我正在尝试使用 Bash 脚本自动化 fdisk。在我的脚本中,我有以下代码块:
echo "Creating root filesystem partition..."
(
echo n
echo 3
echo
echo
echo w
) | fdisk ${DEVICE}
其中DEVICE
是物理磁盘/dev/sda
/dev/nvme0n1
等,但不是分区。但是,如果磁盘之前创建了加密文件系统,则会在简单提示中fdisk
要求删除签名。我可以简单地在块上添加一行,但这会导致不包含任何签名的磁盘出现问题。crypto_LUKS
Yes/No
echo Y
crypto_LUKS
我曾尝试在调用该块之前调用wipefs --all --force ${DEVICE}
and wipefs --all --force ${DEVICE}[1-9]*
,但是它仅删除一些普通文件系统和分区表,不适用于LUKS
签名。
答案1
到目前为止,从标准输入/输出回显 fdisk 选项似乎是非常硬编码的方法,根据 @phuclv 的建议,使用 sgdisk 是一种非常通用的自动化分区方式。
例如,我将主帖中的这些行更改为基于 sgdisk 的行,这是非常有效的方法:
# Create a GPT on the disk:
sgdisk -o ${DEVICE}
# Create the EFI partition:
sgdisk -n 1:0:+512M ${DEVICE}
# Create the /boot partition:
sgdisk -n 2:0:+$512M ${DEVICE}
# Create the / partition:
sgdisk -n 3:0:0 ${DEVICE}
在该三组数字中,第一个数字表示所需的分区号,第二个数字表示第一个扇区号(如果您想要第一个可用扇区,则输入零),最后一个数字表示分区(您可以使用固定位置或相对位置)像我一样按大小单位定位到第一个扇区,或者如果您想使用最新可用扇区的分区,则将其设置为零)。
如果您问 sgdisk 如何帮助删除 LUKS 签名,我可以说 sgdisk 会强制删除这些签名,而不是像 fdisk 的 CLI 提示符那样询问。