![/etc/fstab 内容似乎是错误的,但事实并非如此](https://linux22.com/image/184469/%2Fetc%2Ffstab%20%E5%86%85%E5%AE%B9%E4%BC%BC%E4%B9%8E%E6%98%AF%E9%94%99%E8%AF%AF%E7%9A%84%EF%BC%8C%E4%BD%86%E4%BA%8B%E5%AE%9E%E5%B9%B6%E9%9D%9E%E5%A6%82%E6%AD%A4.png)
我手动创建了分区,将 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
,则会发生该问题。