长话短说,我需要在启动时自动执行这一切(嵌入式系统)。
我们的工程师会将图像闪存到生产设备。这些映像将包含一个小分区表。启动时,我需要自动扩展最后一个分区(#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) 个字节
如何在没有提示的情况下自动执行此步骤?这需要与第三个分区之后的可用空间的动态大小配合使用。
答案1
答案2
在当前版本中parted
,resizepart
应该适用于分区(parted
理解100%
或类似的东西-1s
,后者也需要--
停止在命令行上解析选项)。要确定确切的值,您可以使用unit s
, print free
。resize2fs
随后是文件系统。
旧版本parted
有一个resize
命令可以一次性调整分区和文件系统的大小,它甚至适用于vfat
.
在 Kobo 电子阅读器修改中,我用它来将内部存储器的第三个分区的大小调整到最大:(它盲目地假设没有第四个分区和 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
例如ext*
.
答案3
正确的方法是利用parted具有百分比概念的事实。所以
parted /dev/sda resize 3 100%