USB được đặt thành / dev / sda thay vì / dev / sdb


7

Tôi đã cố gắng sử dụng tệp khởi động để hướng dẫn trình cài đặt Red Hat (RHEL6.5) mà không cần sự can thiệp của người dùng. Nó tìm chính xác tệp khởi động /dev/sdb/fs.cfg, nhưng vì USB được nhận dạng /dev/sda, nên nó thực sự nằm ở /dev/sda/fs.cfg. Tôi có thể tự cài đặt trình cài đặt đến đích này, nhưng phần còn lại của tệp kickstart phụ thuộc vào việc có ổ cứng gốc sda. Tôi muốn làm như vậy mà không cần chỉnh sửa các tập tin khởi động, nhưng đó là điều cần thiết, tôi sẵn sàng làm điều đó.

Có cách nào để buộc kernel nhận ra USB là sdbvà HD không sda(tôi giả sử hạt nhân chịu trách nhiệm cho việc trộn lẫn, nhưng tôi không chắc chắn)? Có vẻ rất kỳ lạ khi nó chọn một ổ đĩa ngoài (USB) sdavà buộc bên trong (HD)sdb.

Lưu ý: Vấn đề của tôi rất giống với vấn đề này , ngoại trừ việc tệp khởi động của tôi hoàn toàn phụ thuộc vào HDsda

Sự cố này chỉ xảy ra đối với trình cài đặt RHEL6.5 chứ không phải đối với trình cài đặt RHEL5.X (Tôi chưa thử bất kỳ phiên bản nào trước đây của RHEL6.X). Điều tôi thực sự muốn biết là tại sao nó lại thay đổi giữa các phiên bản.


2
Đó không phải là hạt nhân trộn lẫn, đó là bất cứ ai đã viết tập tin khởi động. Tuy nhiên, bạn có thể tránh được sự cố này bằng cách khởi động mà không cần cắm USB , sau đó sau khi hệ thống khởi động, hãy cắm nó vào.
goldilocks

BTW, tôi không biết bạn kết thúc như thế nào /dev/sd[anything]/whatever- trừ khi tôi sắp học được điều gì đó mới, đây không phải là một con đường thực sự. Tập tin nằm trong hệ thống tập tin, không phải nút thiết bị.
goldilocks

Tôi đã xem xét điều này, nhưng tôi không chắc chắn về thời gian. Tôi đoán tôi chỉ nên tiếp tục thử các khoảng thời gian khác nhau cho đến khi tôi nhận được cài đặt khởi động thành công với USB là sdb.
skamazin

Tôi khá chắc chắn rằng khi một đường dẫn như /dev/sdXđược đưa ra một cách thủ công (hoặc thông qua tệp khởi động) trong khi cài đặt, kernel (hoặc một số phần mềm khác) sẽ tự động chọn một điểm gắn kết để tải các tệp trên đó.
skamazin

1
@goldilocks có giải pháp hợp lệ duy nhất ở đây nếu bạn thực sự tập trung vào việc sử dụng /devtài liệu tham khảo. Tuy nhiên, bạn nên cân nhắc sử dụng tên thiết bị nhất quán (ví dụ: nhãn hoặc UUID).
HalosGhost

Câu trả lời:


5

Ok, đây là cách quá trình khởi động hoạt động:

  • firmware> bootloader có thể > kernel ${parameters}> initramfs> không gian người dùng có thể

Trên một đĩa cài đặt redhat hệ thống các tập lệnh dracut của họ là những gì xây dựng và cấu thành initramfs và hệ thống cài đặt anaconda của họ tạo thành không gian người dùng cuối cùng.

Đó là udevxử lý thiết lập thiết bị - như trong, nó đặt tên cho các thiết bị trong /dev. Nhưng điều này hầu như luôn xảy ra hai lần - một lần trong initramfs và một lần nữa khi initbên trong đã tìm thấy thiết bị gốc mục tiêu của nó và sẵn sàng gắn kết devfsnó trên nó.

Vì vậy, đây là cách nó hoạt động:

  • bootloader (hoặc firmware) gọi kernel với một bộ tham số tùy chọn và hình ảnh initramfs tùy chọn. Bộ tham số này được lưu trong /proc/cmdlinevà kernel bỏ qua tất cả các tham số mà nó không hiểu.

  • Các initramfs là một không gian người dùng linux hoạt động. Cho dù /nội dung của nó được giải nén từ một hình ảnh được đưa ra khi gọi hoặc chúng được biên dịch không thành vấn đề - vì kernel 2.6 nó luôn là hệ thống tập tin gốc hoạt động đầu tiên, gắn kết kernel linux. Từ thời điểm này, nhân linux để lại tất cả cho không gian người dùng.

    • Thông thường (như đúng với dracut của redhat) các initramfs chỉ chứa những gì thực sự cần thiết để tìm một thiết bị gốc và gắn nó lên chính nó. Nói chung, tất cả những gì được bao gồm là busyboxvà các mô-đun hạt nhân cần thiết để gắn thiết bị gốc mục tiêu của bạn.

    • Có lẽ nó cần udevphải làm điều đó, vì vậy udevthường được bao gồm - với bộ quy tắc nhỏ bé của riêng nó.

    • Như đã đề cập, initramfs là hệ thống tập tin gốc linux hoàn chỉnh nhỏ của riêng nó. Một cái hoàn chỉnh có thể trông giống như : /bin /etc /dev /new_root /proc /sys init. Nhìn chung không có gì khác thường về bất kỳ nội dung nào của các thư mục này - hầu như luôn luôn là một /bin/shvà một /etc/fstab.

    • Hầu hết inits sẽ phân tích cú pháp /proc/cmdlinecho bất kỳ tham số kernel nào mà chúng có thể diễn giải. Một một trong rất phổ biến là root=/dev/somediskhay root=UUID=somediskUUIDhay root=LABEL=somedisklabel. Đó là các initramfs initdiễn giải các root=...tham số này - không phải kernel hoặc cuối cùng được thực initthi sau đó (mặc dù cái cuối cùng có thể diễn giải rất tốt các tham số khác) . Nó sẽ chấp nhận tham số này và gắn kết nó /new_root (hoặc bất kỳ tên nào nó sử dụng cho dàn dựng trước khi switchroots) . Nếu udevđược bao gồm trong initramfs thì chính quy tắc initramfs sẽ quyết định mục /dev/...nhập của đĩa đích đó được đặt tên cho bây giờ - nhưng điều đó có thể thay đổi.

    • Khi initramfs inittìm thấy thành công và gắn kết các /new_rootthiết bị đó thường tìm kiếm cái gì đó để execbản thân vào - thường /new_root/bin/init- vì vậy bất cứ chương trình đó là trở thành pid 1. Nó thường thực hiện điều này với các switch_rootchương trình cung cấp busybox- mà không một execkhi đồng thời gắn /new_root trên / . Quá trình của nó được mô tả trong các tài liệu kernel, do đó :

    Nhưng initramfs rootfs: bạn không thể pivot_rootrootfs, cũng không phải umountnó. Thay vào đó hãy xóa mọi thứ ra khỏi rootfs để giải phóng không gian ( find -xdev / -exec rm '{}' ';') , vượt qua rootfs với root mới ( cd /newmount; mount --move . /; chroot .) , đính kèm stdin/stdout/stderrvới cái mới /dev/consoleexeccái mới init.

  • Thiết bị gốc initvừa được thực thi bây giờ phải đưa vào hệ thống tập tin gốc của chính nó. Nó kêu gọi của nó udevgắn kết và riêng của mình devfstrên /devdựa trên ruleset riêng của mình và làm tất cả phần còn lại. Khi nó thông qua bạn đã sẵn sàng để sử dụng máy tính của bạn.

Xin lỗi về mức độ chi tiết ở đó, nhưng tôi muốn làm rõ lý do tại sao điều sau là đúng:

  • bất kỳ tham số kernel nào bạn sử dụng từ bộ tải khởi động như root=/dev/sda không nhất thiết phải giống /dev/sdavới cuối cùng bạn sẽ truy cập /dev/sdasau khi initramfs kết thúc /init.

Vì vậy, một cách để làm điều này, tôi nghĩ, là đặt một udevquy tắc trên đĩa anaconda của bạn - thực sự là một kho lưu trữ squashfs, có thể - hướng dẫn nó thiết lập tất cả các đĩa usb ở một nơi khác. Có một ví dụ tuyệt vời ở đây:

KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="USB 2.0 Storage Device", SYMLINK+="usbhd%n"

Và nó sẽ là một điều rất tốt nếu bạn đọc phần còn lại của liên kết đó. Bạn sẽ có thể làm điều đó để thiết bị đĩa usb của bạn /dev/sdadành cho initramfs - vì vậy bạn không phải thay đổi bất kỳ cấu hình bộ nạp khởi động nào - nhưng sau đó tạo một nút cho cùng một đĩa như /dev/usbađối với hệ thống cài đặt anaconda.


3

đi vào BIOS của máy chủ và sắp xếp lại thứ tự các ổ đĩa cứng và ổ đĩa di động. Điều này sẽ điều chỉnh thứ tự như nó xuất hiện với nhân Linux.


Sắp xếp lại thứ tự khởi động? Hoặc có một tùy chọn khác trong BIOS để sắp xếp lại thứ tự mà nó 'tìm thấy' các ổ đĩa.
skamazin

BIOS khác nhau là khác nhau; bạn sẽ cần phải chơi xung quanh nó.
Michael Martinez

Các tùy chọn duy nhất tôi có thể tìm thấy có liên quan đến thứ tự khởi động. Mặc định có "Tất cả USB HD" là ổ đĩa đầu tiên khởi động từ đó. Di chuyển HD gốc lên trên cùng giúp máy khởi động vào HĐH hiện tại và hoàn toàn không chạy trình cài đặt RHEL. = [
skamazin

Vâng, một số BIOS bị hạn chế hơn những cái khác.
Michael Martinez

1

Trên chiếc máy tính xách tay G60 45 đô la mới nhưng sáng bóng của tôi, tôi cũng gặp vấn đề tương tự. Tôi đã thực hiện chuyển USB từ /dev/sdasang /dev/sdbbằng cách đặt SSD mới vào thứ tự khởi động. Sau đó, khi khởi động, nhấn ESC giống như bạn đang vào BIOS nhưng có menu preBIOS. Vì vậy, thay vì nhấn F10 để vào BIOS, tôi đã nhấn F9 cho TÙY CHỌN BOOT. Sau đó, trong đó bạn có thể chọn tự khởi động từ USB bất kể LỆNH BOOT được đặt trong BIOS. Rõ ràng là tôi đã chọn USB và sau đó khi cài đặt, ổ SSD của tôi hiển thị là /dev/sda.

Tôi đã tìm kiếm và tìm kiếm và nhiều người có vấn đề tương tự nhưng không ai đề xuất điều đó. Đơn giản hơn nhiều so với bất cứ điều gì tôi tìm thấy. Tôi phát hiện ra rằng trên một linh cảm.


0

Bắt đầu từ RHEL6, bạn có thể sử dụng nhãn cho phương tiện cài đặt của mình để bạn truy cập vào ổ đĩa / hd bằng một tên duy nhất không phải là tên sdX hạt nhân không nhất quán.

Khi bạn tạo các hệ thống tệp trên ổ USB của mình, hãy đảm bảo gắn nhãn chúng bằng một cái gì đó như e2label hoặc 101 cách khác để gắn nhãn hệ thống tệp.

Sau khi được gắn nhãn, bạn có thể truy cập USB bằng tên đó ex: ks = hd: LABEL = yourname: /path/to/fs.ks

Ngoài ra, hãy nhớ rằng loại đặt tên này cũng có thể được sử dụng cho các vị trí khác. cài đặt phương tiện, repos, v.v ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.