当前位置: 首页>>技术问答>>正文


如何在运行时调整ext根分区的大小?

, ,

问题描述

如何在运行时增加系统根分区的大小?

我有一个分区没有在根分区(也是ext4)之后分配,我怎样才能将未分配的空间添加到分配给根分区的空间而不必关闭服务器?

最佳解决方案

GUI(Ubuntu 14.04和更高版本):GParted v0.17和更高版本为此提供了一个很好的GUI。 (旧版本会拒绝调整安装的分区大小)。

命令行(任何Ubuntu版本):有三个步骤。

第1步。必须先调整分区大小。如果您使用LVM,这很容易,而且您大概知道如何继续。如果您使用的是经典分区,则会更复杂一些,并且可能需要重新启动(尽管您不必启动另一个系统或live CD)。

这就是我的做法:使用fdisk首先删除分区(想法是磁盘上的数据将被保留),然后在相同的位置小心地重新创建它。

例:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

再次重要的是,新的分区在与旧的分区相同的分区开始。 Id也应该匹配(Linux系统为83)​​。准备好在丝毫错字处丢失所有数据。

为了安全起见,您也可以通过按a来恢复启动标志(某些计算机上仍然需要according to Wikipedia)。

请参阅注释部分,了解如果您的交换分区受阻,应采取的措施。

现在应该很明显,为什么人们推荐使用Live CD。 😉

第2步。由于fdisk有用地提醒你,你必须在继续之前重新加载分区表。最安全的方法是简单地重新启动;但您也可以使用partprobekpartx (more information)

第3步。一旦分区被重新调整大小并且分区表被重新加载,在文件系统上运行resize2fs是一件简单的事情,甚至当它作为根分区挂载时也可以做到这一点。

例:

$ sudo resize2fs /dev/sda1

次佳解决方案

即使它是根分区,也可以对ext4文件系统执行on-line调整大小。使用resize2fs命令。

sudo resize2fs /dev/sda1

编辑:On-line不收缩是不允许的:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

第三种解决方案

你也可以使用GParted – 只要你调整的分区不是你启动的分区 – 否则我建议live CD选项对于新手来说更容易一些。

GParted基本上完成了所有步骤 – 仅基于GUI前端。

第四种方案

是的,您可以缩小/移动/增大联机根分区,而无需重新启动(livecd和usbkey):consult this answer。它写得很好,容易遵循,虽然很长,有点冒险。所以如果你只想增加你的ext4分区,你可以坚持使用传统的resize2fs解决方案。

例如,我所提供的一般解决方案可用于任何类型的专用或VPS解决方案。

TLDR;这个解决方案意味着pivot_roottmpfs,因此您可以安全地根据umount根分区生活并摆弄它。完成之后,您将pivot_root重新放回新的根分区。

这允许在根文件系统上进行几乎任何操作(移动它,更改文件系统,更改它的物理设备……)。

在这个过程中不需要重新启动,这允许绕过resize2fs无法缩小ext4分区的限制。

我个人使用过这个,它在Debian系统上工作得很好,所以它应该在Ubuntu上运行。我很惊讶,没有看到这个in-depth解决方案与stackexchange网站中处理相同问题的许多问题有更多的联系。

注意:当然,如果你想扩大你的分区,一个简单的resize2fs就足够了,正如许多地方所说的,在这里还有其他答案。

第五种方案

刚装完根时,刚刚在实时系统上调整了ext4根分区的大小。

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

第六种方案

更简单的解决方案 – 使用growpart <device> <partition>

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

与往常一样,备份您的分区表(sfdisk -d /dev/xvda > partition_bak.dmp)以防万一。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/242.html,未经允许,请勿转载。