Fstab 文件无法挂载到 /usr

Fstab 文件无法挂载到 /usr

我尝试使用从我的 /d(另一个分区)/usr 到 /usr 的绑定挂载

我尝试使用 fstab 多次但都失败了,有人可以看看吗?

fstab 文件:

# / was on /dev/nvme0n1p2 during installation
UUID=b3dc29ae-e63b-4ced-89ab-1173755b3f6c /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=3124-2C6F  /boot/efi       vfat    umask=0077      0       1
# /d was on /dev/sda during installation
UUID=2ca0cc41-b46c-4b39-8c08-70bccc8698d2 /d              ext4    defaults        0       2
/swapfile                                 none            swap    sw              0       0
/d/usr /usr bind bind 0 0

如果我将其安装在 /usr 以外的某个地方,一切都会正常工作。

但是如果我将其挂载到 /usr,启动时就会出现以下错误:

mounting /d/usr on /root/usr failed: No such file or directory.
failed to mount /d/usr as /usr file system.

我自己复制了这 2 个错误,因为你实际上无法复制它们。

之后,ubuntu 将我带到 ash 终端,我可以sudo mount -a正常使用,但它阻止我启动。

启动后,使用 后任何时候 fstab 都可以正常工作sudo mount -a

正如K7AAY推荐的,版本是Ubuntu Desktop 20.04 LTS,64位。

答案1


您说得对,它在某些发行版中可以运行(例如,它可以直接与 Slackware 配合使用),但在其他发行版中则不行(例如,Ubuntu 的“最近”版本)。

原因解释如下没有 /usr 的引导会损坏。我无法选择引语,但文章很短,值得一读。

但最后:

没有办法可靠地启动具有空 /usr 的现代系统。有两种方法可以修复它:将 /usr 移回 rootfs 或使用可以隐藏系统分离的 initramfs。

如果你愿意尝试第二种方法,也许这一页可以帮助。

就我而言,我决定不再浪费时间,选择了第一种方法。我之所以要单独分区,/usr是因为已经分区的硬盘的根分区空间不足(我真的不想重新分区),所以我改用/var自己/usr/share的分区,到目前为止,这种方法似乎有效。

答案2

显然,您需要命令mount将文件系统安装到设备上。(根分区除外)。但是,如果您将 移至/usr另一个分区,则mount命令将消失。剩下的是/bin(在某些发行版中是 的符号链接/usr/bin,但在其他一些发行版中不是这种情况(例如 Gentoo))和/sbin(通常不是符号链接)。但是,在 ubuntu 中,/bin是一个符号链接,在 移位后/usrmount变得完全无法访问。

那么我们如何解决这个问题呢?您可以生成一个 initramfs 来在单独的分区上启动。initramfs 可以包含 mount 命令、文件系统工具(例如 btrfs-progs、e2fsprogs),这些工具可以帮助将分区挂载/usr到根分区上,从而可以/usr在另一个分区上启用。如果您的根分区是 ext4,并且内核仅将 ext4 支持作为内核模块,则 initramfs 可以包含使其挂载的工具。(如果您很好奇,内核(很有可能)存在于目录中/boot,该目录是另一个分区(可能是 fat32,可以由引导加载程序和 BIOS 读取),因此内核始终可以访问)。

请注意,initramfs 可以做很多其他事情,例如启用全盘加密启动。如果用于解密根分区的工具不可用(加密),initramfs 可以提供未加密的“备份”,使系统首先解密系统。

由于大多数 Ubuntu 用户不熟悉 initramfs,这里有一些额外的信息:

Gentoo Wiki 上的 initramfs

Arch Wiki 上的 initramfs

相关内容