Bash
以程式方式對磁碟進行分區
我正在嘗試創建一個 bash 腳本,該腳本將在具有現有分區的磁碟上創建一個帶有文件系統的新分區。
看起來使用 parted 以程式方式創建分區很容易,但是它需要您知道從哪裡開始和停止新分區,這就是我遇到麻煩的地方。
我不想依賴具有特定位置/大小的分區的磁碟。也就是說,我想在最後一個現有分區之後立即創建一個新分區。然後我希望能夠創建固定大小的分區,或者填充剩餘空間。
在 Bash 中,是否有可靠的方法來確定
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
. 您可以創建一個從 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`
或類似的東西。(當然你會想在這裡做更多的健全性檢查。)
@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;
這是否適用於您的情況(在我的範例中,您也無法在那裡創建分區,它已經滿了)是您必須自己弄清楚的事情。:)