自動擴展最後一個分區以使用所有未分配的空間,在批處理模式下使用 parted
長話短說,我需要在啟動時自動執行這一切(嵌入式系統)。
我們的工程師會將圖像快閃記憶體到生產設備。這些圖像將包含一個小分區表。在啟動時,我需要自動擴展最後一個分區(#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 s
,print 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
來擴展分區,以及您的文件系統提供的任何工具來擴展分區,例如resize2fs
forext*
.
由於無法正確編寫parted腳本(它要求確認,因為分區已安裝並且與我發現的其他答案相反,我不理解
-1s
或100%
),我剛剛找到了可以執行此操作的growpart工具。用法很簡單:(
growpart /dev/sda 3
然後是resize2fs /dev/sda3
,或使用的文件系統類型的另一個適當的命令)。在 Debian 和 Ubuntu 中,它被打包為cloud-guest-utils。