如何调整超出16TB限制的ext4分区?
尝试resize和没有64位标志创建的旧ext4分区时,如果新大小超过16TiB,resize2fs 1.42将失败。
$ resize2fs -p /dev/mapper/target-device resize2fs: New size too large to be expressed in 32 bits
我不想将文件复制到外部媒体。 我也不想冒数据丢失的风险。 如何安全地调整音量大小?
为什么会这样:
新文件系统通常使用选项-O 64bit
创建。这允许它们跨越更大(1024 PiB而不是16 TiB)卷。 在此变为默认值之前创建的旧文件系统以前缺少将地址长度升级到64位的选项。
虽然不是Ubuntu的一部分 – Ubuntu 16.04
(2016-04-21)与e2fsprogs Version 1.42.12
(2014-08-25)一起发布,但最新版本的e2fsprogs Version 1.43
(2016-05-17)已经解决了这个问题。 )。
我现在将概述如何操作,假设您的目标设备被称为/dev/mapper/target-device
先决条件:
- 备份你不能丢失的任何东西。 总是。 另请注意,这种大小的文件系统会受到常规磁盘错误的影响,因此请配置RAID以保证完整性。
- 操作应该离线完成 – 这意味着你不能在系统根目录上执行(严重的是,如果你的root> 16TiB,请咨询linux专家)
- 确保所有周围的卷都完全支持最终的大小(它是否包含在加密容器中?任何分区表?)
- 在resize并重新检查其中包含的内容之后继续升级文件系统 – 升级raid系统后,linux可能会也可能不会立即确认新的最大大小。 检查
$ cat /proc/partitions
。 - 确保(检查
uname -r
)你正在运行一个可以正确处理64位ext4文件系统的内核 – 任何4.4.x
内核(默认Ubuntu 16.04)或更高版本都可以 – 旧内核支持64位选项,我只是不知道是否他们没有错误。
先决条件6 – 获取至少版本1.43的e2fsprogs
$ resize2fs # if this command - without any parameters - prints a version above 1.43, continue to step 1 $ sudo apt update $ sudo apt install git $ sudo apt build-dep e2fsprogs # see https://askubuntu.com/q/158871/158442 to enable source package support $ cd $(mktemp -d) $ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs $ ./configure $ make # note: make test is strange in 1.43, see the master changelog for a fix $ cd resize $ ./resize2fs # if this prints 1.43 or higher, use `./resize2fs` instead of `resize2fs` for the rest of the steps # if this prints any other version, panic
第1步 – 正确卸载文件系统
$ sudo umount /dev/mapper/target-device
第2步 – 检查文件系统是否有错误
$ sudo e2fsck -fn /dev/mapper/target-device
第3步 – 在文件系统中启用64位支持
$ man tune2fs # read about the filesystem flags - you may wish to change some $ man resize2fs $ sudo resize2fs -b /dev/mapper/target-device # on a typical HDD RAID, this takes 4 minutes of high IO & CPU load
第4步 – 调整文件系统的大小
$ sudo resize2fs -p /dev/mapper/target-device # resize2fs assumes "grow to all space available" if no size is passed on command line # the -p flag will enable progress bars - after completing some initial steps # on a typical HDD RAID, this takes 4 minutes of high IO & CPU load
第5步 – 再次检查文件系统
$ sudo e2fsck -fn /dev/mapper/target-device
第6步 – 重新安装
如果发生错误,请不要惊慌; 不要试图写入卷; 在完全填写数据之前,请咨询真正了解这些内容的人。 如果没有发生错误,请重新安装设备。
$ sudo mount /dev/mapper/target-device
成功!
您不需要任何非Ubuntu版本的e2fsprogs来继续操作升级的文件系统 – 内核现在已经支持了很长时间。 只需要启动升级。
注意:较新版本的e2fsck可能会建议修复以前版本处理不当的时间戳或范围树。 这不是问题,您可以选择现在或以后修复它。
作为参考,如果要求mke2fs创建一个包含不适当选项的大型设备,则会出现类似的错误消息:
$ mke2fs -O ^64bit /dev/huge mke2fs: Size of device (0x123456789 blocks) is too big to be expressed in 32 bits using a blocksize of 4096.