Parted

自動擴展最後一個分區以使用所有未分配的空間,在批處理模式下使用 parted

  • December 22, 2021

長話短說,我需要在啟動時自動執行這一切(嵌入式系統)。

我們的工程師會將圖像快閃記憶體到生產設備。這些圖像將包含一個小分區表。在啟動時,我需要自動擴展最後一個分區(#3)以使用磁碟上的所有可用空間。

這是我查看磁碟上的可用空間時得到的結果。

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
       17.4kB  1049kB  1031kB  Free Space
1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
       25.3MB  26.2MB  922kB   Free Space
2      26.2MB  475MB   449MB   ext4         primary
3      475MB   1549MB  1074MB  ext4         primary
       1549MB  32.0GB  30.5GB  Free Space

我需要將分區 3 擴展 N(30.5GB)字節數

如何在沒有提示的情況下自動執行此步驟?這需要在第三個分區之後使用動態大小的可用空間。

在目前版本的parted,resizepart應該適用於分區(parted了解100%或類似的東西-1s,後者也需要--停止在 cmdline 上解析選項)。要確定您可以使用的確切值unit sprint free. resize2fs之後是文件系統。


舊版本parted有一個resize命令可以一次性調整分區和文件系統的大小,它甚至適用於vfat.

在 Kobo 電子閱讀器修改中,我使用它來將內部記憶體的第 3 個分區的大小調整為最大值:(它盲目地假設沒有第 4 個分區和 msdos 表等)

start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))

if [ "$newend" -gt "$end" ]
then
   parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi

/sys/block/.../因此,如果核心支持,您也可以從中獲取值。但是parted刪除了該resize命令,因此您現在必須執行兩個步驟resizepart來擴展分區,以及您的文件系統提供的任何工具來擴展分區,例如resize2fsfor ext*.

由於無法正確編寫parted腳本(它要求確認,因為分區已安裝並且與我發現的其他答案相反,我不理解-1s100%),我剛剛找到了可以執行此操作的growpart工具

用法很簡單:(growpart /dev/sda 3然後是resize2fs /dev/sda3,或使用的文件系統類型的另一個適當的命令)。

在 Debian 和 Ubuntu 中,它被打包為cloud-guest-utils

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