既存のパーティションがあるディスク上にファイルシステムで新しいパーティションを作成するbashスクリプトを作成しようとしています。
partedを使用してプログラムでパーティションを作成するのは簡単なようですが、新しいパーティションを開始および停止する場所を知る必要があり、ここで問題が発生しました。
特定の場所/サイズのパーティションがあるディスクに依存したくありません。つまり、最後の既存のパーティションの直後に新しいパーティションの作成を開始したいと思います。固定サイズのパーティションを作成するか、残りのスペースを埋めたいです。
Bashには信頼できる決定方法がありますか?
a) 最後のパーティションの終わり、
b) 最後のパーティションの後に分割されなかった残りのスペースはどこですか?
答え1
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
。 31115264sで始まり、31116287sで終わるパーティションを作成できます。
拡張パーティションが十分に大きくない場合、これはトラップです!
しかし、すでに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`
またはそのようなもの。 (もちろん、ここでより完全な検査を実行したいと思います。)
parted
@swisscheeseは他の答えから良いコメントを提示しましたが、構文解析に適した出力が提供されたことを知りませんでした。選択して使用してください。最後に最大の無料を得る例:
# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;
これがあなたのケースに当てはまるかどうか(私の例ではパーティションを作成することができず、実際にいっぱいでした)はあなたが直接見つけなければなりません。 :)
答え2
簡単です。オプションがmkparted
あります。を使用して最後のパーティションを検索してからを使用する必要が--list
あります。awk
--list
mkpart part-type [fs-type] start end
しかし、あなたの答えは次のとおりです
まず、すべてのパーティションをインポートして次を使用する必要があります。
mystartgroup=`parted --list |awk {'print $2'}`
myendgroup=`parted --list |awk {'print $3'}`
メモ:
GB
に変換する必要がありますMG
。- 各値の最後の値を使用する必要があります。
variable
-s
最終スクリプトでこれを使用する必要がありますparted command
。
時間があればこのスクリプトを完成してください。時間がなくてすみません。