partedに前のパーティションの後に自動的に次のパーティションを起動させますか?

partedに前のパーティションの後に自動的に次のパーティションを起動させますか?

私は「ランダム」文字リストをパイプするシェルスクリプトを継承しましたfdisk。それがすることは、次のようにディスクを分割するだけです。

空のディスク、パーティションテーブルなどを設定します。最初のパーティションサイズAを作成します。最初のパーティションサイズ Y の直後に 2 番目のパーティションを作成します。 2番目のパーティションの直後にXサイズの3番目のパーティションを作成します。 「面白い」を追加するために、A、Y、Xが計算され、使用可能な新しいディスクのサイズに応じて変更できます。

Fdiskは既存の位置に基づいて開始位置を求めるプロンプトを表示し、単に「Enter」を押すと「コード」が承認されます。

parted --script...このコードは非常に不透明なので、 ""への呼び出しに置き換えたいのですが、fdiskparted で "最後のパーティションの直後に開始"と言う方法はありません。引き続き開始位置を直接計算する必要があるようです。

私は正しいですか?それでは、誰にもこれに対する合理的な解決策がありますか?

ベストアンサー1

間違ったスクリプトが実行するすべての操作の正確なコピーを作成する必要はありません。書き換えは、ロジックとコードを変更する機会です。まず、元のコードの機能を復号化し、それを一般的なコードに置き換えます。

あなたの直接の質問に対する答えは「いいえ。開始と終了を自分で提供する必要があります」です。幸い、これはあまり難しくありません。

partedこのコマンドはと引数をmkpart使用します(デフォルトはメガバイト)。パーティションを作成するときにそれを指定するだけです。たとえば、ディスクイメージファイルを使用する場合:startend

$ 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

partedif / then機能がないため、ソートチェックとパーティションの作成を自動化するには、上記のスクリプトの最初のバージョンを使用して各スクリプト間にコマンドをcheck-align挿入mkpartし、適切な終了コードを作成できます。応答は次のとおりです。 0ではありません。

おすすめ記事