我正在尝试创建一个完全无人值守的 Ubuntu 安装,并已删除几乎安装过程中所有可能的提示。唯一剩下的提示是下面文本中显示的提示,它提示我卸载已安装的分区。令人讨厌的是,我选择是或否对我来说并不重要,所以整个提示对我的应用程序来说毫无意义。此外,我尝试过的任何方法都无法阻止此提示出现。有人对我如何防止此提示再次困扰我有什么建议吗?
安装程序检测到以下磁盘已安装分区:
/dev/sda
是否希望安装程序在继续之前尝试卸载这些磁盘上的分区?如果让它们保持挂载状态,您将无法在这些磁盘上创建、删除或调整分区大小,但您可以安装到那里的现有分区。
卸载正在使用的分区?
答案1
这与另一个答案的思路类似,但有一个完整的测试代码示例。
我遇到了同样的问题,最后幸运地发现了一组可以让我自动执行此操作的幻灯片,并且有一个带有完整预置文件的代码库。https://github.com/uweplonus/adia-install/blob/master/initrd/preseed.cfg#L3
许多人建议使用preseed/early_command umount /media/*
,但由于预播部分运行的时间与分区的时间不同,这种方法在相当长的一段时间内都没有起到作用。
正确的方法是将以下内容添加到 boot 命令引用的预置文件中的任何位置。
USBDEV=$(list-devices usb-partition | sed "s/\(.*\)./\1/");\
BOOTDEV=$(list-devices disk | grep -v "$USBDEV" | head -1);\
debconf-set partman-auto/disk $BOOTDEV;\
debconf-set grub-installer/bootdev $BOOTDEV; \
umount /media || true;
答案2
我对修改 Ubuntu 安装没有太多经验。
但最简单(也可能是最安全)的做法是自动卸载/dev/sdXY
当前已挂载的所有程序,挂载点位于 的程序除外/
。我构建了以下 bash 命令:
卸载LC_ALL=en_US.UTF8 mount | grep -P '^/dev/sd' | grep -v 'on / type' | awk '{print $1}'
为了解释它是如何工作的,我将逐个命令进行分解:
LC_ALL=en_US.UTF8 mount
以下列格式列出当前安装的驱动器,强制使用英语语言环境:/dev/devicefile on mountpoint type filesystem (mount options)
例如
/dev/sda2 on / type ext4 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
| grep -P '^/dev/sd'
列出当前安装的设备并获取以 开头的每一行/dev/sd
,即过滤每个固态磁盘设备。| grep -v 'on / type'
从该选择中删除实时系统根分区,因此您不会卸载安装程序本身;)awk '{print $1}'
使用任意空格作为分隔符来分割单行,并返回分割行的第一个元素,即 udev 设备文件,因此输出将如下所示:/dev/sda1 /dev/sdb1
该输出最终传递给umount
(必须以 root 身份运行),卸载这些分区,从而无需提示即可进行安全安装。
答案3
没有足够的声誉来发表评论,必须在这里发布。Dragon788 的解决方案对我来说效果很好,直到我在空硬盘上尝试它。它给了我一个错误并等待输入,所以它不是完全无人值守的。也许还有其他方法,但这对我有帮助:
umount /media || true;
而不是
umount /media;
抑制错误。