だから私はすべての作業をせずにArchをインストールするために必要なすべての機能を実行するbashプログラムをウェブサイトで作成しようとしています。ディスクの消去、パーティションの作成/削除、プログラムのインストールにはこのプログラムが必要です。私が経験している問題は、ディスクを安全に消去してパーティションを作成/削除することです。デバイスをブロックせずにこれを行うにはどうすればよいですか?
このリソースに関する別の質問(https://superuser.com/questions/332252/how-to-create-and-format-a-partition-using-a-bash-script)
私はこのコードを見ました:
# to create the partitions programatically (rather than manually)
# we're going to simulate the manual input to fdisk
# The sed script strips off all the comments so that we can
# document what we're doing in-line with the actual commands
# Note that a blank line (commented as "defualt" will send a empty
# line terminated with a newline to take the fdisk default.
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
o # clear the in memory partition table
n # new partition
p # primary partition
1 # partition number 1
# default - start at beginning of disk
+100M # 100 MB boot parttion
n # new partition
p # primary partition
2 # partion number 2
# default, start immediately after preceding partition
# default, extend partition to end of disk
a # make a partition bootable
1 # bootable partition is partition 1 -- /dev/sda1
p # print the in-memory partition table
w # write the partition table
q # and we're done
EOF
ユーザーが変数を指定する必要があるかどうかを教えてもらえますか?私は、ユーザーの便宜のために、プログラムがすべての分割コマンドを実行できるようにしたいと思います。さらに、これは安全ですか?
答え1
sfdisk
代わりに、次のものを使用することを検討する必要がありますfdisk
。
まず、ディスクにgptパーティションテーブル、EFIパーティション、およびEXT4パーティションを作成するには、/dev/sda
次の手順を実行します。
sfdisk -X gpt /dev/sda <<EEOF
,+500M,U,
,,L,
write
EEOF
GPTの代わりにDOSが必要な場合は、次の手順を実行します-X dos
。-X gpt
これにより、ディスクに残っている空き領域を使用して500 mb EFIパーティションとEXT4パーティションが作成されます/dev/sda
。
U
そしてV
パーティションタイプを指定します。その中にはV
EFIパーティションとU
EXT4パーティションがあります。
それでもfdiskを使いたいなら。以前と同様の操作を実行する必要がありますが、古いパーティションテーブルを上書きすると警告が表示されることがあります。これにはユーザー入力が必要です(あなたが望んでいないようです)。
man sfdisk
パーティションタイプのエイリアスと詳細情報を確認してください。
考慮すべき事項:sda
ユーザーにディスクがない場合、この操作は失敗します。代わりに、ユーザーがArchをインストールするディスクを指定できるように、ユーザー入力をお勧めします。
read -p "Name of disk to install: " disk
次に、前のように実行し、代わりに次をsda
使用します$disk
。
sfdisk -X gpt /dev/$disk <<EEOF
パーティションを作成して覚えてくださいパーティションフォーマット
答え2
このツールはparted
まさにあなたに必要なものかもしれません。これはコマンドラインと同じですgparted
。ソフトRAIDシナリオで複数のディスクをプログラムするために使用します。
まず、ヘルパー機能を使用してくださいpdisk
。装置を指定すると、パーティション表が印刷されます。それ以外の場合は、ユーザーが提供したコマンドに従って機能します。
pdisk() {
local dev ="$1"
shift
test 0 -eq $# && set -- print
parted "$dev" --align optimal unit MiB "$@"
}
以下は、GPTパーティションテーブルを設定する例です。
d=/dev/sdz
pdisk "$d" --script mklabel gpt
pdisk "$d" mkpart primary fat32 1 511 # 511MB EFI
pdisk "$d" set 1 boot on
pdisk "$d" set 1 esp on
pdisk "$d" mkpart primary 511 512# 1MB Grub
pdisk "$d" set 2 bios_grub on
pdisk "$d" mkpart primary 512 $((512 + 20*1024)) # 20GB
pdisk "$d" mkpart primary $((512 + 20*1024)) 100% # Everything else