如何调整 ext4 分区的大小以超出 16TB 的限制?

如何调整 ext4 分区的大小以超出 16TB 的限制?

当尝试调整没有 64 位标志的旧 ext4 分区的大小时,如果新大小达到或超过 16TiB,resize2fs 1.42 将失败。

$ resize2fs -p /dev/mapper/target-device
resize2fs: New size too large to be expressed in 32 bits

我不想将文件复制到外部介质。我也不想冒数据丢失的风险。如何安全地调整卷大小?

答案1

使用该选项-O 64bit(在当今创建的文件系统中默认启用),ext 文件系统可以跨越 1024 PiB,而不仅仅是 16 TiB 卷。您可以升级旧文件系统以激活此选项。

在你开始之前

  1. 这种体积必须有 RAID 支持。常规磁盘错误将要否则会造成伤害。
  2. 仍然,RAID 不是备份。 你必须将您的贵重物品存放在其他地方。
  3. 首先调整大小并验证所有周围卷(分区表、加密、lvm)。
  4. 对 RAID 进行更改后,Linux 可能不会立即确认新的最大大小。检查$ cat /proc/partitions,如有必要,请重新启动。
  5. 使用最新的、受支持的内核。如果有疑问,请安装所有升级并重新启动。
  6. 获取版本1.43(2016-05-17) 或更高版本的e2fsprogs
  • ✔️ Ubuntu 20.04(2020-04-23)附带e2fsprogs 1.45.x(好!)
  • ✔️ Ubuntu 18.04(2018-04-26)附带e2fsprogs 1.44.x(好!)
  • Ubuntu 16.04(2016-04-21)与(2014-08-25)一起发布e2fsprogs 1.42.12- 升级到较新的版本或手动安装较新的版本(请参阅本答案的末尾):

磁盘步骤/dev/mapper/target-device

步骤 1:正确卸载

$ sudo umount /dev/mapper/target-device

第 2 步:开始前确保一致性

$ sudo e2fsck -fn /dev/mapper/target-device

-n旗帜意味着不是进行更改。根据导致错误的原因,尝试e2fsck修复可能会有所帮助。

步骤 3:在文件系统中启用 64 位支持

$ sudo resize2fs -b /dev/mapper/target-device

请考虑阅读man tune2fs-man resize2fs您可能还希望更改其他一些文件系统标志。在典型的 HDD RAID 上,这需要 4 分钟的高 IO 和 CPU 负载。

步骤 4:调整大小

如果你没有在命令行中传递大小,调整2fs大小假设“增长到所有可用空间” - 这通常是您想要的。

$ sudo resize2fs -p /dev/mapper/target-device

在典型的 HDD RAID 上,这需要 4 分钟的高 IO 和 CPU 负载。该-p标志启用进度条 - 但这些仅显示一些初步措施。

步骤 5:再次检查

$ sudo e2fsck -fn /dev/mapper/target-device

较新版本的 e2fsck 可能会建议修复时间戳或范围树。这并不表示存在任何严重问题,您可以选择立即或稍后修复。

如果发生错误,请执行不是惊慌失措不是尝试写入卷;请咨询对文件系统有广泛了解的人,因为进一步的操作可能会破坏数据!

如果没有发生错误,重新挂载设备:

$ sudo mount /dev/mapper/target-device
$ df -h

享受新的空间!



如果使用旧版本:启用源包支持e2fsprogs在旧系统上,下载并编译较新版本:

$ resize2fs
# if this  prints version 1.43 or above, continue to step 1
$ sudo apt update
$ sudo apt install git
$ sudo apt build-dep e2fsprogs
$ cd $(mktemp -d)
$ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs
$ ./configure
$ make
$ cd resize
$ ./resize2fs
# confirm that this prints 1.43 or higher
# use `./resize2fs` instead of `resize2fs` for the rest of the steps

您不需要任何非 Ubuntu 版本的 e2fsprogs 来继续操作升级后的文件系统 - 内核已经支持这些版本很长时间了。只需要启动升级即可。


作为参考,如果要求 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.

答案2

我最近遇到了这种情况,Ubuntu 18.04 在最初安装 16.04 Ubuntu 后进行了更新...存储阵列(/dev/sdb)最初被分成两个 14 TB 的分区,而当想要将第一个分区扩大到 28 TB 时,问题就出现了。

我不需要下载新版本的 resize2fs,因为它是最新的。

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

唯一的问题是转换已格式化为 32 位的 64 位分区 1... 我不会邀请读者查阅 tune2fs 的文档(如 Anx 所建议的),而是提出一个真实的例子!

# tune2fs -O 64bit /dev/sdb1
tune2fs 1.44.1 (24-Mar-2018)
Please run "resize2fs -b /dev/sdb1" to enable 64-bit mode.

# resize2fs -b /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Convert the file system to 64 bits.
The file system on /dev/sdb1 now has a size of 3662109119 blocks (4k).

最后,我们扩大磁盘分区!

# resize2fs /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Resizing the file system on /dev/sdb1 to 7324303099 (4k) blocks.
The file system on / dev / sdb1 now has a size of 7324303099 blocks (4k).

答案3

如果由于“文件系统繁忙”而无法卸载,请从 LiveCD(Ubuntu 桌面)启动。请使用 v18.04+,因为它已经具有 resize2fs v1.44。

相关内容