在前段时间一次Linux系统管理中,一个同事竟然将使用etx3文件系统的LVM逻辑卷扩展到了17TiB,并在使用resize2fs调整文件系统大小时,遇到了如下错误:
[root@shizhanxia.com ]# resize2fs /dev/testvg/testlv resize2fs 1.43.8 (1-Jan-2018) resize2fs: New size too large to be expressed in 32 bits
此时,通过lvdisplay查看逻辑卷大小显示为17TB。
[root@shizhanxia.com ]# lvdisplay -m /dev/testvg/testlv
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Size 17.00 TiB
...

原因分析
ext3文件系统使用32位无符号整数来记录块数量,因此在默认4K块大小下,最大可寻址的块数为2^32 – 1 = 4294967295块。乘以块大小(4K = 4096字节)得出理论最大容量:
4294967295 × 4096 = 16 TiB - 4 KiB ≈ 16 TiB
当逻辑卷实际大小超过16TiB时,resize2fs尝试将文件系统调整为完整逻辑卷大小,但计算出的块数超过了32位表示范围,因此报错。
解决方案
以下步骤将ext3文件系统精确调整至其支持的最大值16TiB(即16777216MB)。
1.计算ext3最大支持大小(4K块)
16TiB = 16 × 1024 × 1024 MB = 16777216 MB
2.执行指定大小的扩容命令
[root@shizhanxia.com ]# resize2fs /dev/testvg/testlv 16777216M Filesystem at /dev/mapper/testvg-testlv is mounted on /mnt; online resizing required old_desc_blocks = 896, new_desc_blocks = 1024 The filesystem on /dev/mapper/testvg-testlv is now 4294967295 (4k) blocks long.
该LVM已经扩容到ext3文件系统最大支持的16TiB,多余的空间(例如1TiB)仍属于逻辑卷,但文件系统无法使用。您可以创建新的逻辑卷使用剩余空间。
3. 验证调整结果
[root@server ~]# df -h /mnt Filesystem Size Used Avail Use% Mounted on /dev/mapper/testvg-testlv 16T 1.1M 16T 1% /mnt
扩展阅读
由于ext3文件系统不支持在线缩小,且无法直接利用逻辑卷内部的剩余空间,您需要根据实际需求选择以下方案之一。
- 方案一:忽略剩余空间
和业务说清楚情况,将错就错。如果非要全部使用17T空间,建议采用方案二将ext3升级为ext4或XFS。 - 方案二:迁移至支持更大尺寸的文件系统(备份数据)
备份目录中所有数据后,将分区重新格式化为ext4或者xfs。这两种文件系统均支持远超16TiB的容量,且具备更好的性能和扩展性 - 方案三:创建新的逻辑卷使用剩余空间(备份数据)
备份目录中所有数据后,将LVM删除后重新划分为多个分区。
原创文章,作者:实战侠,如若转载,请注明出处:https://www.shizhanxia.com/knowledgebase/resize2fs-32bit-limit-ext3-solution.html
微信扫一扫
支付宝扫一扫
