Press "Enter" to skip to content

在Ubuntu上使用XFS文件系统

虽说ext4格式的文件系统支持超过16TB的容量,但一旦给16TB以上的分区扩容时,问题就来了,因为resize2fs工具不支持给16TB以上的文件系统扩容,怎么办呢?改用XFS文件系统。本文是在Ubuntu 12.04 64bit系统上配置LVM+XFS的过程,记录一下。

遇到的问题
当给lv容量超出16TB以上时,lvextend为逻辑卷扩容可以成功,但resize2fs时就会失败。因Ubuntu系统自带的e2fsprogs版本不支持扩容16TB以上的分区,谷歌了一阵,貌似最新版本的e2fsprogs可以支持超过16TB的系统分区,但升级完成以后,再次尝试resize2fs的时候,又报出如下错误:

$ sudo lvscan
  ACTIVE            '/dev/vg_02/lv-release' [5.00 TiB] inherit
  ACTIVE            '/dev/vg_02/lv-product-b' [23.80 TiB] inherit
$ sudo resize2fs /dev/vg_02/lv-product-b
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/vg_02/lv-product-b is mounted on /data/product-b; on-line resizing required
old_desc_blocks = 2791, new_desc_blocks = 3047
resize2fs: Filesystem does not support online resizing 

很搞笑,这三条提示前后互相矛盾,前面说on-line resizing required,后面说does not support online resizing。

尝试解决办法:修改blocksize
要修改blocksize的话,重新mkfs是肯定的了。这里重新格式化以后,发现根本无法mount。

$ sudo mkfs.ext4 -b 8192 /dev/dm-3
Warning: blocksize 8192 not usable on most systems.
Proceed anyway? (y,n) y
mkfs.ext4: 8192-byte blocks too big for system (max 4096)
Proceed anyway? (y,n) y
Warning: 8192-byte blocks too big for system (max 4096), forced to continue
……
Writing superblocks and filesystem accounting information: done

$ sudo mount -t ext4 -o blocksize=8192 /dev/dm-3 /data/output-b
mount: wrong fs type, bad option, bad superblock on /dev/dm-3,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

后来查了一下原因,貌似是blocksize不能超出系统的pagesize。这简直是在断我的后路呀。

最终解决办法:使用xfs文件系统
XFS文件系统是专为超大分区及大文件设计的,网上有许多关于ext4和xfs的比较,这里不再多说。另外,如果用在真实的生产环境中的话,可以搜索一下XFS的优化参数。

$ sudo apt-get install xfs xfsprogs

$ sudo lvcreate -L 18T -n lv_01 vg-15k

$ sudo mkfs.xfs -f /dev/vg-15k/lv_01

$ sudo mount /dev/vg-15k/lv_01 /data/output-b

$ df -h
……
/dev/mapper/vg--15k-lv_01              18T   33M   18T   1% /data/output-b

$ sudo lvextend -L +6TB /dev/vg-15k/lv_01   #扩容LV分区
  Extending logical volume lv_01 to 26.00 TiB
  Logical volume lv_01 successfully resized

$ sudo xfs_growfs /data/output-b   #扩容文件系统,注意命令不一样
……
data blocks changed from 5368709100 to 6979321830

$ df -h
……
/dev/mapper/vg--15k-lv_01              24T   33M   26T   1% /data/output-b

$ sudo vim /etc/fstab  
/dev/vg-15k/lv_01    /data/output-b    xfs    defaults,noatime,nobarrier,inode64       0 0  
  
$ sudo mount -o remount /data

另外,请注意,XFS的blocksize也不能超过系统的pagesize

mkfs - Allocation Block Size
Specify the fundamental allocation block size of the filesystem.
The default value is 4KB, the minimum is 512 bytes, and the maximum is 64KB
XFS on Linux currently only supports pagesize or smaller blocks.

请注意,如果需要在XFS上使用NFS,请务必参考这篇文章!!!

Leave a Reply

Your email address will not be published. Required fields are marked *