Bash

以程式方式對磁碟進行分區

  • September 25, 2013

我正在嘗試創建一個 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;

這是否適用於您的情況(在我的範例中,您也無法在那裡創建分區,它已經滿了)是您必須自己弄清楚的事情。:)

引用自:https://unix.stackexchange.com/questions/92265