私は「ランダム」文字リストをパイプするシェルスクリプトを継承しましたfdisk
。それがすることは、次のようにディスクを分割するだけです。
空のディスク、パーティションテーブルなどを設定します。最初のパーティションサイズAを作成します。最初のパーティションサイズ Y の直後に 2 番目のパーティションを作成します。 2番目のパーティションの直後にXサイズの3番目のパーティションを作成します。 「面白い」を追加するために、A、Y、Xが計算され、使用可能な新しいディスクのサイズに応じて変更できます。
Fdiskは既存の位置に基づいて開始位置を求めるプロンプトを表示し、単に「Enter」を押すと「コード」が承認されます。
parted --script...
このコードは非常に不透明なので、 ""への呼び出しに置き換えたいのですが、fdisk
parted で "最後のパーティションの直後に開始"と言う方法はありません。引き続き開始位置を直接計算する必要があるようです。
私は正しいですか?それでは、誰にもこれに対する合理的な解決策がありますか?
ベストアンサー1
間違ったスクリプトが実行するすべての操作の正確なコピーを作成する必要はありません。書き換えは、ロジックとコードを変更する機会です。まず、元のコードの機能を復号化し、それを一般的なコードに置き換えます。
あなたの直接の質問に対する答えは「いいえ。開始と終了を自分で提供する必要があります」です。幸い、これはあまり難しくありません。
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
一度だけ実行してみてください。
#!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
スクリプトモードオプションと組み合わせて使用すると、出力は生成されません。逆に間違ってソートした場合、状態1で終了する。それ以外の場合は、スクリプトの残りの部分が続行されます。parted
-s
parted
if / then機能がないため、ソートチェックとパーティションの作成を自動化するには、上記のスクリプトの最初のバージョンを使用して各スクリプト間にコマンドをcheck-align
挿入mkpart
し、適切な終了コードを作成できます。応答は次のとおりです。 0ではありません。