錯誤:根設備掛載成功,但 /sbin/init 不存在
我已經在我的電腦上安裝了 Linux Mint 和 Manjaro Linux。我在 MBR 上只安裝了 Linux mint。對於 Manjaro,我創建了一個
/boot/efi
分區,但我沒有檢查安裝到 MBR。所以,我
grub
從薄荷糖開始控制。現在,當我嘗試啟動 Manjaro 時,它顯示:ERROR: resume: no device specified for hibernation: performing fsck on dev/sda11 /dev/sda11: clean 1727/915712 files, .... blocks WARNING: The root device is not configured to be mounted read-write!It may be fsck'd again later :mounting /dev/sda11 on real boot running cleanup hook [udev] ERROR: Root device mounted successfully, but /sbin/init does not exist. sh:can't access tty; job control turned off [rootfs /]#
在shell提示符之後,我什麼都寫不出來了。它掛起,或者有時它不斷向我顯示消息,例如:
usb 3-3: device not accepting address 2, error -62
等等…
正如我在 google 中看到的那樣,我嘗試添加
init=/usr/lib/systemd/systemd
到 grub,但仍然相同。我必須注意,對於 Manjaro 安裝,我使用單獨的分區 for
/
和 for/usr
和 for/var
。這可能有影響?正如我在這裡看到的。但問題是我不能寫任何東西,它掛起。
我還在這裡找到了一篇部落格文章的評論,其中指出:
“如果將 /usr 保留為單獨的分區,則必須遵守以下要求:” - 添加關閉掛鉤。關閉過程將轉向已保存的 initramfs 副本,並允許 /usr(和 root)從 VFS 中正確解除安裝。
“ - 添加 fsck 鉤子,在 /etc/fstab 中用密碼 0 標記 /usr。雖然推薦給所有人,但如果您希望 /usr 分區在啟動時被 fsck’ed,這是強制性的。沒有這個鉤子,/usr 將永遠不會被 fsck’d。
“ - 添加 usr 鉤子。這將在掛載 root 後掛載 /usr 分區。在 0.9.0 之前,如果 /usr 在真實根目錄的 /etc/fstab 中找到,它會自動掛載。”
並且永遠不要忘記在每次更改 mkinitcpio.conf 後執行 mkinitcpio -p linux 以實際創建新圖像並將它們放置在正確的位置。
這聽起來很有希望,因為 my
/usr
確實在一個單獨的分區上。這些“鉤子”是什麼?如何添加它們?
parted -l
:Model: ATA TOSHIBA MQ01ABD0 (scsi) Disk /dev/sda: 750GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 1075MB 1074MB ntfs Basic data partition hidden, diag 2 1075MB 1347MB 273MB fat32 Basic data partition boot 3 1347MB 1482MB 134MB ntfs Basic data partition msftres 4 1482MB 80,1GB 78,6GB ntfs Basic data partition msftdata 5 80,1GB 80,4GB 262MB ext4 6 80,4GB 90,4GB 10,0GB ext4 msftdata 7 93,0GB 102GB 9000MB ext4 msftdata 9 102GB 106GB 3999MB linux-swap(v1) 10 106GB 106GB 250MB fat32 boot 11 106GB 121GB 15,0GB ext4 msftdata 12 121GB 151GB 30,0GB ext4 msftdata 13 151GB 165GB 14,0GB ext4 msftdata 14 165GB 206GB 40,9GB ext4 msftdata 8 206GB 743GB 537GB ext4 msftdata 15 743GB 747GB 4000MB linux-swap(v1) msftdata
grub
:menuentry 'Linux Mint 17 Cinnamon 64-bit, 3.13.0-24-generic (/dev/sda5)' --class ubuntu --class gnu-linux --class gnu --class os { recordfail gfxmode $linux_gfx_mode insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt5' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt5 --hint-efi=hd0,gpt5 --hint-baremetal=ahci0,gpt5 19af2e09-8946-4ca2-9655-75921f3609a5 else search --no-floppy --fs-uuid --set=root 19af2e09-8946-4ca2-9655-75921f3609a5 fi linux /vmlinuz-3.13.0-24-generic root=UUID=9356f543-f391-4ba5-9dcc-e8484d6935e0 ro quiet splash $vt_handoff initrd /initrd.img-3.13.0-24-generic } menuentry 'Linux Mint 17 Cinnamon 64-bit, 3.13.0-24-generic (/dev/sda5) -- recovery mode' --class ubuntu --class gnu-linux --class gnu --class os { recordfail insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt5' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt5 --hint-efi=hd0,gpt5 --hint-baremetal=ahci0,gpt5 19af2e09-8946-4ca2-9655-75921f3609a5 else search --no-floppy --fs-uuid --set=root 19af2e09-8946-4ca2-9655-75921f3609a5 fi echo 'Loading Linux 3.13.0-24-generic ...' linux /vmlinuz-3.13.0-24-generic root=UUID=9356f543-f391-4ba5-9dcc-e8484d6935e0 ro recovery nomodeset echo 'Loading initial ramdisk ...' initrd /initrd.img-3.13.0-24-generic } menuentry 'Manjaro Linux (0.8.10) (on /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-95ed019d-9269-4869-9f99-a03f002a53c6' { insmod part_gpt insmod ext2 set root='hd0,gpt11' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt11 --hint-efi=hd0,gpt11 --hint-baremetal=ahci0,gpt11 95ed019d-9269-4869-9f99-a03f002a53c6 else search --no-floppy --fs-uuid --set=root 95ed019d-9269-4869-9f99-a03f002a53c6 fi linux /boot/vmlinuz-312-x86_64 root=/dev/sda11 initrd /boot/initramfs-312-x86_64.img } submenu 'Advanced options for Manjaro Linux (0.8.10) (on /dev/sda11)' $menuentry_id_option 'osprober-gnulinux-advanced-95ed019d-9269-4869-9f99-a03f002a53c6' { menuentry 'Manjaro Linux (0.8.10) (on /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-312-x86_64--95ed019d-9269-4869-9f99-a03f002a53c6' { insmod part_gpt insmod ext2 set root='hd0,gpt11' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt11 --hint-efi=hd0,gpt11 --hint-baremetal=ahci0,gpt11 95ed019d-9269-4869-9f99-a03f002a53c6 else search --no-floppy --fs-uuid --set=root 95ed019d-9269-4869-9f99-a03f002a53c6 fi linux /boot/vmlinuz-312-x86_64 root=/dev/sda11 initrd /boot/initramfs-312-x86_64.img } }
正如@Leiaz 在評論中非常正確地指出的那樣,
/sbin
Arch(以及副檔名 Manjaro)現在是指向/usr/bin
. 這意味著除非/usr
被掛載,否則/usr/sbin/init
將不存在。因此,您需要確保它/usr
是由初始 ramdisk 安裝的。這就是您的 OP 中 Arch wiki 引用的意思:如果將 /usr 保留為單獨的分區,則必須遵守以下要求:
- 啟用 mkinitcpio-generate-shutdown-ramfs.service 或添加關閉掛鉤。
- 添加 fsck 鉤子,在 /etc/fstab 中用 passno 0 標記 /usr。雖然推薦給所有人,但如果您希望 /usr 分區在啟動時被 fsck’ed,這是強制性的。沒有這個鉤子,/usr 將永遠不會被 fsck’d。
- 添加 usr 鉤子。這將在掛載 root 後掛載 /usr 分區。在 0.9.0 之前,如果在真實根目錄的 /etc/fstab 中找到 /usr,它會自動掛載。
因此,您需要使用正確的鉤子1生成一個新的初始化文件。這些是通過更改中的
HOOKS=""
行來添加的/etc/mkinitcpio.conf
。所以
- 啟動到 Mint 並掛載 Manjaro
/
目錄:mkdir manjaro_root && sudo mount /dev/sda11 manjaro_root
現在,Manjaro 的根目錄將安裝在
~/manjaro_root
. 2. 使用您最喜歡的編輯器編輯mkinitcpio.conf
文件(我僅用nano
作範例,不再使用):sudo nano ~/manjaro_root/etc/mkinitcpio.conf
找到該
HOOKS
行並確保它包含相關的鉤子HOOKS="shutdown usr fsck"
重要“:不要刪除任何已經存在的鉤子。只需將上面的內容添加到那裡。例如,最終結果可能看起來像
HOOKS="base udev autodetect sata filesystems shutdown usr fsck"
/usr
用 0 的 passno標記/etc/fstab
。為此,打開manjaro_root/etc/fstab
並找到該/usr
行。對於這個例子,我假設它是/dev/sda12
,但使用你係統上的任何一個。“通過”號是/etc/fstab
條目的最後一個欄位。所以,你需要確保這條線看起來像/dev/sda12 /usr ext4 rw,errors=remount-ro 0 0 ^ This is the important one -----|
- 創建新的初始化映像。為此,您還必須掛載 Manjaro 的
/usr
目錄。sudo mount /dev/sda12 ~/manjaro_root/usr
我對 Arch 沒有太多經驗,所以這可能不需要(你可能
mkinitcpio
沒有 a也可以執行chroot
),但為了安全起見,設置一個chroot
環境:sudo mount --bind /dev ~/manjaro_root/dev && sudo mount --bind /dev/pts ~/manjaro_root/dev/pts && sudo mount --bind /proc ~/manjaro_root/proc && sudo mount --bind /sys ~/manjaro_root/sys && sudo chroot ~/manjaro_root
您現在將處於一個認為
~/manjaro_root/
實際上是/
. 您現在可以繼續生成新的初始映像mkinitcpio -p linux
- 退出
chroot
exit
- 更新您的
grub.cfg
(同樣,這實際上可能不需要):sudo update-grub
現在重新啟動並嘗試再次啟動到 Manjaro。
1 “鉤子”是一些小腳本,告訴
mkinitcpio
它應該向它生成的初始化映像添加什麼。