我正在尝试安装 Ubuntu 基础(从头开始的 Ubuntu),但我遇到了问题...安装后我得到一个带有只读文件系统的系统,而且 /boot 不会自动安装。
这是我的 /etc/fstab:
/dev/sda1 /boot vfat defaults,noatime 0 2
/dev/sda2 / ext4 defaults,noatime 0 1
以下是我如何 chroot 进入基本系统进行安装:
mount /dev/sda2 /mnt
cp /etc/resolv.conf /mnt/etc/resolv.conf
mount --types proc /proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --make-rslave /mnt/sys
mount --rbind /dev /mnt/dev
mount --make-rslave /mnt/dev
test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm
chroot /mnt /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
<installation steps>
exit
cd
umount -l /mnt/dev{/shm,/pts,}
umount -R /mnt
reboot
当我运行以下命令时,系统变为可写:
mount -o remount,rw /
我做错了什么 ?
答案1
简答
在安装步骤中,您需要安装该systemd-sysv
软件包。
长答案
您似乎正在安装 Ubuntu Focal。 Focal 的 Ubuntu 基础映像不包含/sbin/init
.假设您使用的是默认的 systemd,则该二进制文件由软件包提供systemd-sysv
。请注意,某些早期版本的 Ubuntu 的 Ubuntu Base 映像做include /sbin/init
,因此较旧的说明可能不会提及这一点。 (为什么图像不再有/sbin/init
?可能是因为容器中通常不需要它,而容器是此类图像的越来越大的用例。)
那么,如何在没有 init 的情况下出现 shell 提示符呢?init
中的脚本负责initrd
执行exec
“真正的”init,有一个后备。如果/sbin/init
未找到,它会尝试一系列备用可执行文件,其中之一是/bin/sh
.您可能还会收到类似Target filesystem doesn't have requested /sbin/init
打印到控制台的消息。
那么为什么你的根文件系统被挂载为只读呢?因为这就是您的 GRUB 配置告诉它要做的事情。运行cat /proc/cmdline
,您应该看到ro
包含该选项,该选项指示最初以只读方式initrd
挂载。/
这允许 init 在必要时运行fsck
以修复根文件系统上的错误。然后 Init 将重新挂载/
读写。