Tôi có một máy dùng để khởi động kép Ubuntu (16.04 hiện tại) và Windows 7, với GRUB của Ubuntu là bộ tải khởi động.
Bây giờ tôi chỉ cần thêm Arch Linux làm HĐH thứ ba, theo hướng dẫn cài đặt chính thức. Tôi không cài đặt GRUB từ Arch vì tôi muốn sử dụng cái được điều khiển bởi Ubuntu. Các hướng dẫn có chứa một lệnh mkinitcpio -p linux
có thể tạo ra một số tệp khởi động mà tôi đã chạy như được mô tả.
Bây giờ khi tôi cố gắng khởi động Ubuntu từ GRUB thông qua mục nhập mặc định của nó, tôi gặp phải lỗi khó chịu này (xin lỗi cho ảnh màn hình):
Là đầu ra của các uname -a
chương trình, nó đang cố khởi động kernel Arch, nhưng /dev/sda6
là phân vùng gốc Ubuntu.
Tôi phải điều hướng đến Advanced options for Ubuntu
và chọn một trong các Ubuntu, with Linux 4.4.0-*
mục để có thể tải Ubuntu, mặc dù vậy tôi không thể tìm thấy mục nào có thể tải Arch chính xác.
Chạy sudo update-grub
từ Ubuntu ( " update-grub
còn sơ khai để chạy grub-mkconfig -o /boot/grub/grub.cfg
để tạo tệp cấu hình grub2." ) Không thay đổi bất cứ điều gì. Công grub-customizer
cụ này cũng vô dụng trong việc sửa lỗi này cho đến nay.
Điều gì gây ra sự nhầm lẫn này của GRUB và làm cách nào để khắc phục nó để mỗi phiên bản Linux khởi động với đúng kernel và từ phân vùng chính xác?
Có vẻ như tôi đã cài đặt Arch một cách ngu ngốc với Ubuntu / boot được gắn, vì vậy có lẽ nó đã đặt các tệp khởi động của nó vào đó.
Tôi ổn với việc xóa tất cả các nội dung liên quan đến Arch để tải lại bộ tải khởi động của Ubuntu và thực hiện cài đặt sạch Arch sau đó.
Cập nhật (cảm ơn @terdon vì sự hỗ trợ của anh ấy trong trò chuyện Hỏi Ubuntu):
Đây là của tôi /boot/grub/grub.cfg
.
Tất cả các mục Linux dường như chỉ vào phân vùng / dev / sda6 của tôi, đó là root của Ubuntu:
$ grep ' linux /' /boot/grub/grub.cfg
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
Tôi đã cố cập nhật cấu hình GRUB từ Ubuntu:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done
Tôi đã cố cài đặt lại GRUB cho MBR từ Ubuntu:
$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
Đó là những gói hạt nhân Ubuntu đã được cài đặt, tôi đã thử dpkg-reconfigure
tất cả chúng, nhưng không có bất kỳ ảnh hưởng nào đến vấn đề:
$ dpkg -l linux-image* | grep ^ii
ii linux-image-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii linux-image-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
Tôi cũng đã cố gắng tạo lại các initramfs Ubuntu:
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic
Bố cục phân vùng của tôi:
Đã kiểm tra từ hệ thống Ubuntu. Các nhãn nên tự giải thích.
$ lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs win7-boot 90DCF3A5DCF3842E /win/boot
├─sda2 ntfs windows7 482C7A572C7A3FCC /win/c
├─sda3 ext4 grub-boot 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5 ext4 images 81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6 ext4 ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7 ext4 ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8 ext4 arch-root 8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec
├─sda9 ext4 arch-home 32522902-a53d-44c8-90f2-6bbf14c40f1f
└─sda10 swap linux-swap 8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]
Cấu trúc menu GRUB của tôi:
Thư mục của tôi /boot
:
$ ls -la /boot
total 118480
drwxr-xr-x 4 root root 4096 Apr 24 20:50 .
drwxr-xr-x 28 root root 4096 Apr 24 19:44 ..
-rw-r--r-- 1 root root 1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r-- 1 root root 1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r-- 1 root root 184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r-- 1 root root 189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x 6 root root 4096 Apr 26 19:58 grub
-rw-r--r-- 1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r-- 1 root root 3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r-- 1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r-- 1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------ 2 root root 16384 Okt 28 17:43 lost+found
-rw-r--r-- 1 root root 182704 Jan 28 13:44 memtest86+.bin
-rw-r--r-- 1 root root 184380 Jan 28 13:44 memtest86+.elf
-rw-r--r-- 1 root root 184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw------- 1 root root 3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw------- 1 root root 3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw------- 1 root root 6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw------- 1 root root 7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r-- 1 root root 4435552 Apr 14 19:20 vmlinuz-linux
Các hạt nhân 4.4.0 và 4.2.0 phải là Ubuntu, Arch nên có kernel 4.5.0. Nhưng làm thế nào để tôi tìm ra tập tin không có phiên bản kernel trong tên của nó thuộc về cái gì?
Thư mục gốc Ubuntu của tôi (loại trừ thư mục):
$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx 1 root root 32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx 1 root root 32 Apr 5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx 1 root root 29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx 1 root root 29 Apr 5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic
Thư mục gốc Arch của tôi không chứa bất kỳ tập tin hoặc liên kết.
Root device mounted successfully, but /sbin/init does not exists
. Bạn đã điều tra điều này? Có init
thực sự mất tích? Nếu vậy, bạn chắc chắn nên cài đặt nó, nếu thay vào đó nó có mặt, bất kỳ ý tưởng tại sao nó không thể được tìm thấy?
os-prober
. sau đó chạy chúngsudo mkinitcpio -p linux
sausudo grub-mkconfig -o /boot/grub/grub.cfg
cùngsudo grub-install /dev/sda