我有两种类型的工业计算机,并且我想自动安装debian: -1台将ssd映射到sda的PC -1台ssd映射到sdb的PC 我在USB驱动器上安装了预装的debian iso。
因此,问题是:当配置我的预置文件时,我需要设置目标磁盘(sda或sdb),因此它对两个磁盘均不起作用,并且我没有找到任何解决方案来设置“最大的磁盘将是目标”(我的ssd为64 GB,我的USB驱动器为4 GB)或类似的内容。
我试图在iso映像中包括udev规则,以便始终将ssd映射到sda上,但是它没有考虑到...
包括了udev规则(000-install.rules),我已经尝试了这2个:
KERNEL=="sda*",ENV{ID_FS_LABEL}=="CDROM",NAME="sdb%n"
KERNEL=="sdb*",ENV{ID_FS_LABEL}!="CDROM",NAME="sda%n"
和:
KERNEL=="sda",ENV{DEVTYPE}=="disk",ENV{ID_FS_LABEL}=="CDROM",NAME="sdb"
KERNEL=="sdb",ENV{DEVTYPE}=="disk",ENV{ID_FS_LABEL}!="CDROM",NAME="sda"
我的预置conf文件:
#### Contents of the preconfiguration file
### Localization
# Preseeding only locale sets language, country and locale.
# Debian 9 & 10
d-i debian-installer/locale string fr_FR
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-auto/choose_recipe select multi
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
## Controlling how partitions are mounted
# The default is to mount by UUID, but you can also choose "traditional" to
# use traditional device names, or "label" to try filesystem labels before
# falling back to UUIDs.
d-i partman/mount_style select label
结果(上面的文件在ssd映射为sda时有效,但在sdb时无效):安装程序告诉我sda上没有足够的空间(因此在USB驱动器上...)
答案 0 :(得分:0)
首先,我想告诉您“ udev是为响应事件的热插拔类型而创建的” 例如,如果要在插入特定设备时触发特定脚本,则可以使用此守护程序。
使用该守护程序的另一个示例是当您要拒绝特定设备插入目标计算机时。
另一方面,使用这种方法解决问题的最大问题是:
udevd处于活动状态的时间是:
1:在启动时,它将解析所有配置文件和规则文件,然后 在内存中建立规则数据库。
2:事件发生时,它将检查其规则数据库并执行 适当的行动。
请参阅此参考 The system initialization
因此,当由debien-installer执行设备分区代码时,您的根文件系统已经挂载。因此,您不能卸载已经安装的根设备,而只能将其安装到另一台设备上。
如果您想找到最大的设备,建议您查看可以执行udeb软件包的“ debian-installer”(此类软件包只能在debian-installer中执行)。如果您可以创建一个udeb软件包来执行一个脚本,该脚本可以检测到必须在根系统中装入哪个磁盘,那么在通过partman软件包装入根系统之前,可以解决您的问题。
在下面的参考中,您可以看到Debian安装程序中udeb软件包安装的顺序。