我有一个 400GB 的磁盘和一个 320GB 的 ext4 分区。我想扩大 ext4 分区以使用剩余空间(80GB 可用空间)。
+--------------------------------+--------+
| ext4 | Free |
+--------------------------------+--------+
我怎么能这样做?
我见过有人在使用resize2fs
,但我不明白它是否会调整分区大小。
另一种解决方案是使用fdisk
但我不想删除我的分区和丢失的数据。我怎样才能在不丢失任何文件的情况下简单地增加分区?
注意:我说的是没有 LVM 的未挂载数据分区,我有备份,但我想避免花一些时间进行恢复。
您必须从卸载分区开始。如果您无法卸载它(例如,它是您的根分区或系统需要运行的其他东西),请改用System Rescue CD之类的东西。
运行
parted
,或者gparted
如果您更喜欢 GUI,并调整分区大小以使用额外空间。我更喜欢gparted
它,因为它为您提供了一个很好的图形表示,与您在问题中绘制的图形非常相似。resize2fs /dev/whatever
e2fsck /dev/whatever
(只是想看看你是否安全)重新挂载你的分区。
虽然我从未见过这种失败,但请先备份您的数据!
是的,如果您的分区已经排序,您可以在线增长 EXT4 fs。分区排序了吗?你有LVM吗?
fdisk
将调整您的分区大小,是的,但是如果这是一个根分区(或者实际上是任何已安装的分区),则必须先卸载它。所以离线最有可能!对于与磁盘/fs 操作相关的任何事情,我强烈建议进行备份,并且经过测试、易于理解的恢复过程。
使用
growpart
和resize2fs
示例:请注意,在某些 VDS 服务器上,您可能有非主根分区,需要先调整扩展分区容器的大小
例如,您刚刚升级了您的计划并拥有如下内容:
这里 /dev/vda2 - 是您的扩展容器。和 /dev/vda5 - 我们需要将其调整为全部可用空间的主分区。
最简单的方法:
Parted 不适用于 Centos 上的 ext4。我不得不使用 fdisk 来删除和重新创建分区,(我验证过)它可以在不丢失数据的情况下工作。我按照http://geekpeek.net/resize-filesystem-fdisk-resize2fs/中的步骤操作。简而言之,它们在这里:
parted
可以resize
分区及其文件系统。只是为了向仍在阅读此主题的任何人阐明我是如何做到这一点的。
如果它是您要调整大小的启动分区,那么您必须从 bootcd 或 bootusb“救援”驱动器启动,这只是一个 Live Linux。这允许您在要更改的驱动器以外的机器上运行 Linux。
我认为在这种情况下最好的“救援”cd 或 usb 是可引导的 gparted USB 或 CD
盒,您需要在其中提供救援映像
1。要扩展的分区是最后一个分区,但您从它启动并且无法卸载它。
sda1 = 引导(或交换)
sda2 = 交换(或引导)
sda3 = /
未使用的空间
sda1 = boot
sda2 = / (要扩展的分区不是最后一个)
sda3 = swap
未使用的空间
如果要更改不是“根”分区 (/) 的挂载分区,例如 /home 是不同的分区,则无需使用救援映像。如果是最后一个分区,则尤其如此。
sda1 = boot
sda2 = /
sda3 = /home
未使用空间- 或
-
sda1 = /
sda2 = /home
未使用空间
当我从较小的驱动器或 SSD 拍摄图像并将其移动到较大的 SSD 时,就会遇到这种情况。
在这种情况下,您只需要在扩展 /home 时卸载它。但是要卸载 /home,您需要确保您没有登录到主目录位于其中的任何用户帐户。由于“root”用户的主目录直接在系统root /下,如/root,如果你能登录到root,那么你就可以卸载/home
我注销了 GUI(KDE/Gnome/等)会话并使用 [CTRL] + [ALT] + [F1] 调出一个 shell 会话。
如果您刚刚退出用户登录,Linux 可能需要 20-30 秒才能完成关闭任何文件,因此您可能会在尝试卸载 /home 时遇到错误。
1. umount /home(如果它失败长达 30 秒,我会重试此命令,然后去查看其他会话,看看我是否在某处“cd /home/xxx”。)
2. parted /dev/sda
a。resize x(x = 你想要调整大小的分区,使用“p”获取分区列表)
b。输入调整大小的最后一个扇区=“-1”(负1表示从磁盘末尾开始1个扇区)
c。q (quits parted)
3 resize2fs /dev/sda"x" (x = 要调整大小的分区。这也会重新挂载文件系统)
4. df -m(我检查 /home 以确认它已调整大小)
我从未使用此方法丢失文件或损坏驱动器。
祝你好运
公认的答案有些过时:在线调整 ext4 文件系统的大小比离线更好,因为在线扩展代码路径比离线扩展代码路径更常用。
更困难的事情可能是扩展底层分区,除非您使用 LVM并且您的卷组中有可用空间。要在线扩展分区,可以使用
fdisk
或parted
; 然后,您必须运行kpartx <device>
以通知内核更改。如果使用 LVM,您需要在卷pvresize
之前调整大小的分区lvresize
。最后,您可以发布
resize2fs
您的文件系统。您可以使用
fdisk
或cfdisk
修改(或重新创建)分区(只要确保您不会更改其开始边界),然后重新启动并resize2fs
. 但一般来说,最好使用 LVM-2 而不是 MBR/GPT,因为它允许您在不重启内核的情况下引入这些更改。我被要求在运行 CentOS 7 的戴尔服务器上增加一个安装为 /scratch 的磁盘,而不打扰当前用户。这是 RAID 0 磁盘上的 XFS 分区,带有普通的 GPT 磁盘标签。这将以几乎完全相同的方式用于 ext4 分区 - 稍后见。
这就是我在不卸载、重新启动或中断系统操作的情况下执行此操作的方法。我刚刚使用了 Linux 命令(和戴尔的 RAID 工具):
/sys/block/sdb/size
仍处于较低值。这已使用以下命令更正:echo 1 > /sys/block/sdb/device/rescan
使磁盘驱动程序更新其对磁盘大小和形状的了解。这似乎是一个宣传不佳的功能:我从名字就猜到了它的作用!
parted
编辑磁盘标签并将其在磁盘末尾的副本移动到新的磁盘末尾。幸运的是,它在没有鼓励的情况下准确地猜到了我想做什么并提示了我。首先是磁盘标签的副本:Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? F
然后是磁盘标签中反映的磁盘大小:
Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 7811891200 blocks) or continue with the current setting? Fix/Ignore? F
所以我必须输入“F”两次,然后输入“q”才能退出并更正磁盘标签(及其副本)。这解决了大部分必须解决的问题,无需任何艰苦的思考或工作。
parted
当磁盘仍然挂载时不允许我这样做 - 所以我fdisk
改为使用:fdisk /dev/sdb d 1 n 1 (defaults were correct for full size of disk) t 1 11 (That's Microsoft basic data - which is the same as xfs). w
注意我已经确定它使用了正确的起始块号 2048。否则,那是行不通的。我很幸运地使用了两个具有相同起始块约定的工具,但我确实首先检查了初始起始块。
parted
了与以前相同的名称来为分区命名。fdisk
一个小细节。partprobe /dev/sdb
(并partprobe /dev/sdb1
采取了很好的措施)让操作系统再次读取分区表。我认为只有第一个命令才真正有所作为。xfs_growfs -d /scratch
只用了 1.6 秒就将分区增长到最终大小,填满了新增长的磁盘。这也适用于 ext4 卷:唯一的区别是使用
resize2fs /dev/sdb1
而不是xfs_growfs -d /scratch
- 以及为 ext4 使用正确的分区类型编号而不是 xfs。fdisk 命令可以列出常见磁盘系统的类型号,包括 ext4。