删除无人值守 Ubuntu 安装期间的卸载分区磁盘提示

删除无人值守 Ubuntu 安装期间的卸载分区磁盘提示

我正在尝试创建一个完全无人值守的 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; 抑制错误。

相关内容