/etc/fstab 内容似乎是错误的,但事实并非如此

/etc/fstab 内容似乎是错误的,但事实并非如此

我手动创建了分区,将 rootfs 复制到适当的分区中,chroot编辑到 rootfs 中,安装了内核和 Grub,就像我以前做过一百万次一样。我使用与当前主机完全相同的磁盘布局和启动过程(无需从“从头开始”创建 rootfs)。

当前的问题是启动过程挂起

A start job is running for ...some-UUID-beginning...73
A start job is running for ...some-UUID-beginning...67

消息,然后启动失败并且存在救援 shell。系统是 Debian Buster,最初创建时使用:

sudo lxc-create -n erik3 -t debian -- -r buster

磁盘布局为:

NAME                FSTYPE      FSVER    LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINT
sdc                                                                                                  
├─sdc1              ext2        1.0            fe2cfe8c-28d3-455c-961e-b586cf763367    224.8M    17% /mnt/zencefil-root-rootfs/boot
└─sdc2              crypto_LUKS 2              32d6e3b6-1e75-4d40-86c2-5a8853996e73                  
  └─zencefil_crypt  LVM2_member LVM2 001       ttASfx-WjIt-tuhW-AjRN-6tiJ-dnuI-AU8GgN                
    ├─zencefil-swap swap        1              286b4d65-5ca6-4453-b904-6d56749fed0f                  
    └─zencefil-root btrfs                      655c3de0-2963-46d1-bc0f-a6a8690632ad    896.1G     3% /mnt/zencefil-root

当我输入 root 密码来检查情况时,我注意到注释掉一些必要的行/etc/fstab(并重新启动)仍然不能阻止启动挂起 1 分 30 秒,但可以让系统正确启动。

我仔细检查了文件的内容/etc/fstab,它必须是正确的:

/dev/mapper/zencefil-root /               btrfs        subvol=rootfs,rw,noatime       0       1
##UUID=fe2cfe8c-28d3-455c-961e-b586cf763367     /boot   ext2    defaults,noatime        0       2
###/dev/mapper/zencefil-root /mnt/zencefil-root       btrfs        subvolid=5,rw,noatime       0       1
tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,mode=1777,size=512M 0 0

##...###...行是必要的,但将它们注释掉可以让系统在 1 分 30 秒后显示登录屏幕)

甚至连错别字都没有fstab。这是证明:

grep "^##\w" /etc/fstab | sed -e 's/^##//' \
        | awk '{print "mount " $1 " " $2 " -t " $3 " -o " $4}' \
        | xargs -L 1 -I {} sh -c "echo {}; {}"

上面的脚本解析fstab文件中的 line ##...,构造一个mount ...命令并执行它,这反过来会成功:

mount UUID=fe2cfe8c-28d3-455c-961e-b586cf763367 /boot -t ext2 -o defaults,noatime
root@erik3:~# mount | grep boot
/dev/sda1 on /boot type ext2 (rw,noatime)

但是,将同一行未注释掉/etc/fstab不会安装/boot.为什么?

... / ...中的行使分区/etc/fstab安装/在 中rw。注释掉该行会导致/分区挂载ro(最初由 initrd 执行),正如预期的那样。所以/etc/fstab文件绝对被重视。

显示“A start job is running...”消息的子系统是什么?

答案1

事实证明,使用 LXC 创建的 rootfs 不适合创建实际安装。我们应该用multistrap它来代替。

完全产生上述问题的步骤可在multistrap-helpers@2ada86fd。如果您使用 multistrap 创建 rootfs,则install-to-disk指令可以完美运行。如果您使用 创建 rootfs lxc-create,则会发生该问题。

相关内容