我在不同类型的服务器(HP Proliant ML110、ML310、ML350)上使用 USB 驱动器和预置文件进行无人值守安装 Ubuntu-14.04-server。
- 在 ML110 和 ML310 上,硬盘在
/dev/sda
,USB 驱动器取/dev/sdb
. - 在服务器 ML350 上,USB 驱动器占用
/dev/sda
并且硬盘驱动器显示为/dev/sdb
.
由于这应该是一个完全无人值守的安装,无论服务器类型如何,我都需要找到一种方法将正确的设备路径提供给d-i partman-auto/disk
.
我的第一个想法是强制硬盘驱动器出现在 USB 驱动器之前,允许它承担/dev/sda
ML350 服务器;但我没有找到办法做到这一点。
因此,我制作了一个小脚本,在执行之前检测设备名称partman
,并将其记录在变量中$INSTALL_DEV
:
d-i partman/early_command string \
for DEV in `ls /sys/block | grep sd`; do \
if [ -n "`ls -l /sys/block/$DEV | grep /usb`" ]; then \
USB_DEV=/dev/${DEV}; \
echo "USB_DEV is $USB_DEV" >> /var/log/syslog; \
else \
INSTALL_DEV=/dev/${DEV}; \
echo "INSTALL_DEV = $INSTALL_DEV" >> /var/log/syslog; \
break; \
fi; \
done; \
从那时起,我一直在努力寻找一种方法将该变量赋予d-i partman-auto/disk
. 我想到了不同的替代方案,但我找不到实现其中一个的方法:
- 使
partma-auto/disk
解释成为变量。但不幸的是,它只需要一个字符串作为值。 - 修改
debian-installer
我希望存储预置值的数据库。但是我没有找到数据库文件(也没有改变它的方法)。 - 使用正确的设备制作一个包含一个微小预置文件的脚本。但我只能
preseed/include
在硬盘驱动器显示之前包含来自 的文件/dev
。
这是一个简单
partman/early_command
的,正是我想要的这
early-command
是在执行之前partman
执行的。它动态设置partman-auto/disk
配置的值debian-installer
。之间的命令
$(
并)
输出找到的第一个不是 USB 驱动器的硬盘驱动器。