Tôi có một ổ cứng máy tính xách tay trong một vỏ bọc bên ngoài mà tôi sử dụng như một ổ đĩa lớn. Để cải thiện thêm, tôi đã cài đặt Linux trên nó, vì vậy tôi có thể khởi động bất kỳ máy nào với phân phối lựa chọn của mình (ví dụ: để phục hồi dữ liệu hoặc sửa chữa hệ thống b0rked hoặc chỉ sử dụng máy tính xách tay mượn mà không phá hủy Windows được cài đặt sẵn). Vấn đề là, tùy thuộc vào cấu hình phần cứng, ổ cứng USB có thể hiển thị dưới các đường dẫn khác nhau. Đối với cấu hình grub tôi chỉ sử dụng (hda0,0)
vì nó liên quan đến thiết bị mà grub được khởi chạy từ đó. Tôi có các mục UUID trong /etc/fstab
. Tôi cũng chỉ định rootwait
trong các tham số kernel để nó chờ hệ thống con USB lắng xuống trước khi thử gắn thiết bị.
Tôi nên chuyển qua kernel là root=
gì? Hiện tại khởi động từ ổ đĩa một lần, kiểm tra các thông báo gỡ lỗi để xem /dev/sdX
thiết bị nào đã được gán cho ổ USB, sau đó khởi động lại và chỉnh sửa cấu hình grub. Tôi không thể thay đổi bất cứ điều gì trên PC ngoài việc bật Boot from USB hard drive
BIOS và đặt nó ở mức ưu tiên cao hơn so với ổ cứng bên trong.
Có nhiều kịch bản tạo ra initrd trong đó bao gồm hỗ trợ cho UUID trong đường dần đến device root, tiếc là một nguồn gốc Gentoo (genkernel) không hỗ trợ rootwait
và tôi đã không may mắn cố gắng sử dụng những người khác.
Quá trình khởi động diễn ra như thế này ( nó khá giống trong Windows ):
- BIOS chọn thiết bị khởi động và tải bất cứ thứ gì là MBR của nó (điều này xảy ra ở giai đoạn 1).
- Grub tải cấu hình và các tệp giai đoạn 2 từ thiết bị mà nó đã đặt
root
, sử dụng(hd0)
cho thiết bị được tải từ BIOS. - Grub tải và bắt đầu một kernel (vẫn cùng số, vì vậy tôi có thể sử dụng
(hd0,0)
lại). - Kernel khởi tạo tất cả các thiết bị tích hợp (
rootwait
hiện tại nó rất kỳ diệu). - Kernel gắn kết phân vùng mà nó được truyền vào
root
(đây là tham số kernel, không phải tham số grub). init.d
bắt đầu quá trình khởi động người dùng, bao gồm cả việc gắn kết từ/etc/fstab
.
Phần 5 là phần cho tôi vấn đề.