Bashスクリプトを使用してfdiskを自動化しようとしています。私のスクリプトには次のコードブロックがあります。
echo "Creating root filesystem partition..."
(
echo n
echo 3
echo
echo
echo w
) | fdisk ${DEVICE}
その中にはDEVICE
物理ディスク/dev/sda
/dev/nvme0n1
などがありますが、パーティションはありません。ただし、ディスクが以前に暗号化されたファイルシステムを作成した場合は、fdisk
署名を削除するように簡単なメッセージが表示されます。ブロックに1行だけ追加しても署名を持たないディスクでは問題が発生します。crypto_LUKS
Yes/No
echo Y
crypto_LUKS
ブロックを呼び出す前にwipefs --all --force ${DEVICE}
呼び出しを試みましたが、署名でwipefs --all --force ${DEVICE}[1-9]*
はなくいくつかの一般的なファイルシステムとパーティションテーブルのみを削除しますLUKS
。
答え1
これまでstdin / outで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}
3つの数値セットでは、最初の数字は目的のパーティション番号を表し、2番目の数字は最初のセクタ番号を表し(使用可能な最初のセクタが必要な場合は0を入力します)、最後の数字はパーティションを表します(固定位置または私同様に、最初のセクターをサイズ単位で配置するには相対位置を使用し、使用可能な最新のセクターを持つパーティションを使用するには0に設定します。
sgdiskがLUKS署名を削除するのにどのように役立つかを尋ねる場合は、sgdiskがfdiskのCLIプロンプトのように要求するのではなく、これらの署名を強制的に削除すると言うことができます。