'ランダムな'文字のリストをfdisk
にパイプするシェルスクリプトを継承しました。それがしていることは、次のようにディスクを分割することです:
空のディスク、パーティションテーブルなどを設定します。最初のパーティションサイズAを作成します。最初のパーティションの直後に、サイズYの2番目のパーティションを作成します。 2番目のパーティションの直後に、サイズXの3番目のパーティションを作成します。また、「fun」に追加するために、A、Y、およびXが計算され、使用可能な新しいディスクのサイズに応じて変更される場合があります。
Fdiskは、既存の位置に基づいて開始位置の入力を求め、「コード」は「リターン」をヒットし、これを受け入れます。
このコードは非常に不透明で、fdisk
ではなく 'parted --script...
'の呼び出しに置き換えたいのですが、partedに '最後のパーティションの直後に開始するという方法があることがわかりません。 '。自分で開始位置を計算し続けなければならないようです。
私は正しいですか?もしそうなら、誰かがこれに対する賢明な解決策を持っていますか?
悪いスクリプトによって行われたすべての正確な複製を書く必要はありません。書き換えは、コードだけでなくロジックも修正する機会です。元のコードが何をするかを解読することから始めて、それからそれを何か正気に変えてください。
あなたの直接の質問に対する答えは「いいえ。あなたは自分で開始と終了を提供する必要があります」です。幸いなことに、それはそれほど難しいことではありません。
parted
のmkpart
コマンドは、start
およびend
引数を取ります(単位はデフォルトでメガバイトです)。パーティションを作成するときに指定する必要があります。例えばディスクイメージファイルの使用:
$ cat partition.sh
#!/bin/sh
truncate -s 1G disk.img # create a 1G disk image file
parted -s disk.img mklabel msdos # create the partition table
# make some partitions
parted -s disk.img mkpart primary 1 100
parted -s disk.img mkpart primary 101 200
parted -s disk.img mkpart primary 201 800
parted -s disk.img mkpart primary 801 1000
parted -s disk.img print
または、parted
を1回だけ実行します。
#!bin/sh
truncate -s 1G disk.img # create a 1G disk image file
parted -s disk.img mklabel msdos \
mkpart primary 1 100 \
mkpart primary 101 200 \
mkpart primary 201 800 \
mkpart primary 801 1000 \
print
$ ./partition.sh
Model: (file)
Disk /home/cas/stack-exchange/2018-01-03/pauldsmith/disk.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary
2 101MB 200MB 99.6MB primary
3 201MB 800MB 599MB primary
4 801MB 1000MB 199MB primary
難しいのは、パーティションの正確な開始値と終了値を計算して、セクターサイズに合わせて適切に配置することです。最初のパーティションは簡単です-1MBは512バイトと4Kセクターの両方に対応します。 1MBの正確な倍数で始まるパーティションも正しく配置されます(上記の例で作成されたすべてのパーティションは正しく配置されます)。
パーティションの開始値と終了値のいずれにもシェル変数を使用できます。これにより、シェル演算を使用してそれらを計算できます(ただし、シェル演算は整数のみであることに注意してください。次の場合はbc
またはdc
を使用してください。浮動小数点またはパーセンテージの計算を行う必要があります)。
ところで、parted
のalign-check
コマンドで配置を確認できます。例えば.
$ parted disk.img align-check optimal 1
WARNING: You are not superuser. Watch out for permissions.
1 aligned
align-check
をparted
の-s
スクリプトモードオプションとともに使用すると、出力は生成されません。代わりに、整列されていない場合はステータス1で終了します。それ以外の場合は、スクリプトの残りの部分に進みます。
parted
にはif/then機能がないため、アライメントチェックとパーティション作成を自動化する場合は、上記のスクリプトの最初のバージョンを使用して、check-align
を挿入できるようにします。各mkpart
の間にコマンドを入力し、終了コードがゼロ以外の場合は適切に応答します。
parted
を使用してエンドセクターを印刷できます。
$ parted /dev/sda 'unit s print'
Number Start End Size File system Name Flags
1 2048s 1048575s 1046528s fat32 primary boot, esp
2 1048576s 2095103s 1046528s ext4 primary raid
次に、次のパーティションは、最後のパーティションの後に+1セクターで開始されます。2095103s
(前のパーティションのサイズが正しい単位で指定されていると仮定)。
(parted) mkpart primary 2095104s 100%
また、パーセントを使用して、計算をparted
自体に任せることもできます。