我已经在我的计算机上安装了 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
等等...
我尝试添加 init=/usr/lib/systemd/systemd
到 grub,正如我在 google 中看到的那样,但仍然相同。
我必须注意,对于 Manjaro 安装,我使用单独的分区 for/
和 for/usr
和 for /var
。这也许有影响?正如我所见这里。
但问题是我什么也写不了,它挂了。
我还发现了一篇博文的评论这里其中规定:
“如果将 /usr 作为单独的分区,则必须遵守以下要求:” - 添加关闭挂钩。关闭过程将转向保存的 initramfs 副本,并允许 /usr(和 root)从 VFS 正确卸载。
“ - 添加 fsck 挂钩,在 /etc/fstab 中将 /usr 标记为 passno 0。虽然推荐给所有人,但如果您希望 /usr 分区在启动时进行 fsck,则这是强制性的。如果没有这个钩子,/usr 将永远不会被 fsck。
“ - 添加 usr 挂钩。这将在挂载 root 后挂载 /usr 分区。在 0.9.0 之前,如果在真实根目录的 /etc/fstab 中找到 /usr,则会自动挂载。”
并且永远不要忘记每次更改 mkinitcpio.conf 后运行 mkinitcpio -p linux 以实际创建新映像并将它们放置在正确的位置。
这听起来很有希望,因为我的/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
}
}
答案1
正如 @Leiaz 在评论中非常正确地指出的那样,/sbin
Arch(以及扩展的 Manjaro)现在是/usr/bin
.这意味着除非/usr
被挂载,否则/usr/sbin/init
不会存在。因此,您需要确保它/usr
是由初始 ramdisk 挂载的。这就是你的 OP 中 Arch wiki 引用的意思:
如果将 /usr 作为单独的分区,则必须遵守以下要求:
启用 mkinitcpio-generate-shutdown-ramfs.service 或添加 shutdown 挂钩。
添加 fsck 挂钩,在 /etc/fstab 中将 /usr 标记为 passno 0。虽然推荐给所有人,但如果您希望 /usr 分区在启动时进行 fsck,则这是强制性的。如果没有这个钩子,/usr 将永远不会被 fsck。
添加 usr 挂钩。这将在挂载 root 后挂载 /usr 分区。在 0.9.0 之前,如果在真实根目录的 /etc/fstab 中找到 /usr,则会自动挂载 /usr。
因此,您需要使用正确的钩子1生成一个新的初始化文件。这些是通过更改HOOKS=""
中的行来添加的/etc/mkinitcpio.conf
。所以
启动到 Mint 并挂载 Manjaro
/
目录:mkdir manjaro_root && sudo mount /dev/sda11 manjaro_root
现在,Manjaro 的根目录将安装在
~/manjaro_root
.使用您最喜欢的编辑器编辑
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
passno 为 0/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 -----|
创建新的初始化映像。为此,您
/usr
还必须挂载 Manjaro 的目录。sudo mount /dev/sda12 ~/manjaro_root/usr
我对 Arch 没有太多经验,因此可能不需要(您可能可以
mkinitcpio
在没有 的情况下运行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
您现在将处于一个 chroot 环境中,该环境
~/manjaro_root/
实际上是/
.您现在可以继续生成新的初始化映像mkinitcpio -p linux
退出
chroot
exit
更新您的
grub.cfg
(同样,实际上可能不需要):sudo update-grub
现在重新启动并尝试再次启动到 Manjaro。
1 “Hooks”是一些小脚本,告诉mkinitcpio
我们应该将什么添加到它生成的初始化映像中。
答案2
从薄荷,你可以改变根到您的 Manjaro 安装,以便重新生成 initramfs。
将 Manjaro 根目录挂载到您选择的目录 ( ~/foo
) 下。将您的/usr
分区安装在~/foo/usr
,如果引导是单独的,也安装引导。挂载 proc sys dev :
# mount -t proc proc ~/foo/proc/
# mount --rbind /sys ~/foo/sys/
# mount --rbind /dev ~/foo/dev/
并更改根:chroot ~/foo /bin/bash
正如中所解释的维基百科:“挂钩是小脚本,描述将添加到图像中的内容”。编辑/etc/mkinitcpio.conf
,将usr
fsck
和shutdown
挂钩添加到HOOK
条目中,如 wiki 和评论中所示。重新生成 initramfs : mkinitcpio -p linux
(它将被写入/boot
)
退出 chroot,卸载 proc、sys、dev 和 Manjaro 分区并尝试重新启动。
答案3
只是浪费了大约 6 个小时为 Linux Mint 创建 USB 启动设备,备份 2 个分区的所有数据,并在收到可怕的 sbin/init 未找到消息后尝试各种救援尝试......
这是在小更新后发生的 - 系统无法重新启动。似乎整个 sbin 文件夹已被神秘删除且无法恢复。我能找到的唯一有意义的建议是“重新安装”。
修复(不到 5 分钟!!)如下:
- 启动从原来的实时安装盘(本例中为 Cinnamon Mint 17.1),
- 以 root 身份打开文件资源管理器(右键单击文件夹并选择“以 root 身份打开”,或者打开终端并键入“sudo nemo”
- 找到实时安装的 sbin 文件夹
- 安装有缺陷的 Mint 分区(单击图标)
- 更改应用于 sbin 文件夹的权限(右键单击,属性,权限,其他,文件访问,读取和写入 - 然后单击“将权限应用于封闭文件”)
- 将整个 sbin 文件夹复制到安装的根目录 (/) 中。 (这是系统“bin”、“boot”、“home”、“usr”等文件夹所在的位置。)
- 重启