自动扩展最后一个分区以使用所有未分配的空间,在批处理模式下使用parted

自动扩展最后一个分区以使用所有未分配的空间,在批处理模式下使用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) 个字节

如何在没有提示的情况下自动执行此步骤?这需要与第三个分区之后的可用空间的动态大小配合使用。

答案1

由于无法正确编写parted脚本(它要求确认,因为分区已安装,与我发现的其他答案不理解-1s或相反100%),我刚刚发现成长部分工具这正是这样做的。

用法很简单:(growpart /dev/sda 3然后resize2fs /dev/sda3,或针对所使用的文件系统类型的另一个适当的命令)。

在 Debian 和 Ubuntu 中它被打包为云来宾实用程序

答案2

在当前版本中partedresizepart应该适用于分区(parted理解100%或类似的东西-1s,后者也需要--停止在命令行上解析选项)。要确定确切的值,您可以使用unit s, print freeresize2fs随后是文件系统。


旧版本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%

答案4

或者,您可以使用以下命令制作单行sfdisk

echo ", +" | sfdisk -N 3 /dev/sda

卡雷尔扎克的博客文章更多细节。

相关内容