在命令行上缩小 ext4 分区

Taa*_*avi 8 command-line partitioning

是否可以在正在运行的系统上缩小 ext4 分区并在可用空间上创建另一个分区,例如在 Gparted 中完成的?

我想缩小/dev/sdb1它不是系统分区,所以卸载不是问题。

我设法调整大小/dev/sdb1resize2fs但在那之后我迷路了,因为fdisk没有看到任何可用空间来创建新分区。

运行 Ubuntu 服务器 14.04。

小智 11

是的,您需要运行fdisk才能实际更改分区表。

在使用resize2fs(必须卸载分区)调整文件系统大小后,查看命令的输出:

$ resize2fs /dev/sdb1 24G
...
The filesystem on /dev/sdb1 is now 6291456 (4k) blocks long.
Run Code Online (Sandbox Code Playgroud)

记住块的数量和块的长度。这只改变了文件系统的大小,而不是分区。您需要使用以下fdisk命令删除分区并以正确的大小重新创建它:

$ fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)

您可以键入p以查看分区表:

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1  *     2048 52428766 52426719  25G 83 Linux
Run Code Online (Sandbox Code Playgroud)

键入d以删除分区。然后n添加一个新分区,使用与原始分区相同的值,但将最后一个扇区更改为适合当前文件系统的扇区。它接受最后一个扇区的相对大小,因此通过将块数乘以给出 resize2fs 命令的块长度来计算结果大小。在这个例子中:

6291456 * 4k = 25165824k

添加新分区时,系统会要求您输入最后一个扇区,请键入结果大小(注意+前缀和大写K):+25165824K

键入a如果分区是可以引导的一个,并p查看新的分区表:

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sdb1  *        2048 50333695 50331648   24G 83 Linux
Run Code Online (Sandbox Code Playgroud)

键入w以将更改写入磁盘。之后,您现在应该会看到新的尺寸。

  • 为什么不直接说“+24G”,而不是计算“6291456 * 4k = 25165824k”,然后将新分区大小指定为“+25165824K”? (3认同)