既存のパーティションを持つディスク上にファイルシステムを持つ新しいパーティションを作成するbashスクリプトを作成しようとしています。
プログラムでpartedを使用してパーティションを作成するのは簡単なようですが、新しいパーティションを開始および停止する場所を知っておく必要があり、ここで問題が発生します。
特定の位置/サイズのパーティションを持つディスクに依存したくありません。つまり、既存の最後のパーティションの直後から新しいパーティションを作成したいと考えています。次に、固定サイズのパーティションを作成したり、残りのスペースを埋めたりできるようにしたいと考えています。
バッシュでは、信頼できる方法で判断できますか
a)最後のパーティションの終了位置、および
b)最後のパーティションの後にパーティション化されていない残りのスペース?
parted
は空き領域を出力できます。例(私はわざと複雑なものを選びました):
# parted /dev/sda unit s print free
[...]
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 4196351s 4194304s primary fat32 lba
4196352s 4198399s 2048s Free Space
2 4198400s 6295551s 2097152s primary ext2 boot
6295552s 6297599s 2048s Free Space
3 6297600s 27269119s 20971520s primary ext2
27269120s 27271167s 2048s Free Space
4 27271168s 31115263s 3844096s extended lba
5 27273216s 29192191s 1918976s logical ext2
6 29194240s 31115263s 1921024s logical ext2
31115264s 31116287s 1024s Free Space
ご覧のように、これにより、作成できるパーティションの位置とサイズ、つまりFree Space
。 31115264で始まり、31116287で終わるパーティションを作成できます。
落とし穴がなければ、拡張パーティションが十分に大きくありません!
しかし、おそらくあなたはそのような複雑さに悩まされていない場所ですでにGPTを使用しています。
数字をつかむのは簡単です。
function make_partition
{
parted -s "$1" unit s mkpart primary "$2" "$3"
}
make_partition /dev/sda `parted /dev/sda unit s print free | grep 'Free Space' | tail -n 1`
または似たようなもの。 (当然、ここでさらに健全性チェックを行う必要があります。)
@swisscheeseは他の回答で良いコメントをしました、parted
が解析に適した出力を提供することを知りませんでした。代わりにそれを使用することもできます。最後の最大の空き容量を取得する例:
# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;
それがあなたの状況に当てはまるかどうか(私の例では、そこにパーティションを作成することができませんでした、それはすでに本当にいっぱいです)はあなた自身のために理解しなければならないものです。 :)