如何确定 resize2fs 的新大小?

Lek*_*eyn 26 partition ext4 resize2fs

我想缩小一个 ext4 文件系统以为新分区腾出空间并遇到了该resize2fs程序。该命令如下所示:

resize2fs -p /dev/mapper/ExistingExt4 $size
Run Code Online (Sandbox Code Playgroud)

我应该如何确定$size是否要从当前的 ext4 文件系统中减去 15 GiB?我可以df以某种方式使用输出吗?

Lek*_*eyn 41

您不应该使用,df因为它显示文件系统报告的大小(在本例中为 ext4)。

使用该dumpe2fs -h /dev/mapper/ExistingExt4命令找出分区的实际大小。该-h选项可以dumpe2fs显示超级块信息,而没有很多其他不必要的细节。从输出中,您需要块计数块大小

...  
块数:               19506168  
保留块数:975308  
免费块:13750966  
免费 inode:4263842  
第一个区块:0  
块大小:                4096  
...

将这些值相乘将得出分区大小(以字节为单位)。上述数字恰好是 1024 的完美倍数:

$ python -c 'print 19506168.0 * 4096 / 1024'
78024672.0
Run Code Online (Sandbox Code Playgroud)

由于您想将分区缩小 15 GiB(即 15 MiB 乘以 1 KiB):

$ python -c 'print 19506168.0 * 4096 / 1024  -  15 * 1024 * 1024'
62296032.0
Run Code Online (Sandbox Code Playgroud)

由于resize2fs接受多种后缀,其中之一是K“1024 字节”,因此将分区缩小到 62296032 KiB 的命令变为:

resize2fs -p /dev/mapper/ExistingExt4 62296032K
Run Code Online (Sandbox Code Playgroud)

如果没有单位,该数字将被解释为文件系统块大小的倍数(在本例中为 4096)。参见man resize2fs(8)

  • man resize2fs:可选地,大小参数可以后缀为以下单位指示符之一:“s”、“K”、“M”或“G”,分别表示 512 字节扇区、千字节、兆字节或千兆字节. 可能比进行块计算更简单。 (4认同)
  • `dumpe2fs` 不报告分区大小;它确实报告了文件系统的大小。(这很好,因为这可能是您想要的。) (2认同)