XFS文件系统快速起步
安装和修复XFS
安装XFS管理工具
xfsprogs
sudo pacman -S xfsprogs
如果需要修复XFS文件系统,需要先umount之后再修复:
umount /dev/sda3 xfs_repair -v /dev/sda3
XFS在线元数据检验(scrub)
警告
XFS的scrub可以用来检验元数据,但是这是一个试验性质程序。
xfs_scrub
会查询内核有有关XFS文件系统所有元数据独爱想。元数据记录被扫描检查明显损坏值然后交叉应用另一个元数据。目的是通过检查单个元数据记录相对于文件系统中其他元数据的一致性来建立对整个文件系统一致性的合理信心。如果存在完整的冗余数据结构,则可以从其他元数据重建损坏的元数据。
通过启动和激活 xfs_scrub_all.timer
来周期性检查在线XFS文件系统的元数据。
XFS元数据校验
xfsprogs 3.2.0引入了一个磁盘格式v5包含了元数据校验和机制,称为"自描述元数据"(Self-Describing Metadata),基于CRC32,提供了对于元数据的附加保护,避免电源故障时发生意外。从xfsprogs 3.2.3开始默认激活了校验,不过对于比较旧哦内核,可以通过 -m crc=0
关闭校验:
mkfs.xfs -m crc=0 /dev/target_partition
XFS性能
在RAID设备上使用XFS时候,有可能通过使用 largeio
, swalloc
参数值增加来提高性能。参考:
备注
MarkLogic Server是面向文档的No-SQL数据库,上文提供了XFS优化策略可以参考实践。
XFS条带大小和宽度
如果文件系统建立在条代化的RAID之上,通过 mkfs.xfs
命令参数设置特定条带大小可以显著提升性能。XFS有时能够检查出底层软RAID的分布,但是对于硬件RAID,请参考 how to calculate the correct sunit,swidth values for optimal performance
XFS案例
以下案例在LVM上创建XFS文件系统
创建GPT分区:
parted -s /dev/nvme0n1 mklabel gpt
parted -s -a optimal /dev/nvme0n1 mkpart primary 0% 100%
parted -s /dev/nvme0n1 set 1 lvm on
parted -s /dev/nvme0n1 name 1 db_data
如果有多个NVMe磁盘,依次执行:
for i in {0..2};do
parted -s /dev/nvme0n${i} mklabel gpt
parted -s -a optimal /dev/nvmd0n${i} mkpart primary 0% 100%
parted -s /dev/nvmd0n${i} set 1 lvm on
parted -s /dev/nvmd0n${i} name 1 db_data
done
完成后检查磁盘:
lsblk
输出类似:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3.5T 0 disk
└─nvme0n1p1 259:2 0 3.5T 0 part
nvme0n2 259:0 0 3.5T 0 disk
└─nvme0n2p1 259:2 0 3.5T 0 part
nvme0n3 259:0 0 3.5T 0 disk
└─nvme0n3p1 259:2 0 3.5T 0 part
...
创建逻辑卷:
pvcreate /dev/nvme0n{0..2}p1
vgcreate vg_db /dev/nvme0n{0..2}p1
lvcreate -n vl_log -l 10%FREE -i 3 -I 128k vg_db
lvcreate -n vl_data -l 100%FREE -i 3 -I 128k vg_db
说明:
-i 3
表示使用3块磁盘作为volume group,这样条带化会分布到3个磁盘上
-I 128k
表示使用 128k 作为条带化大小,也可以使用单纯数字128
默认单位就是k
-l
表示扩展百分比,这里采用了10%FREE
和100%FREE
表示空闲空间的10%和100% ; 另外一种常用的扩展大小表示是使用-L
参数,则直接表示扩展多少容量,例如-L 10G
表示扩展 10GB 空间
备注
Striped Logical Volume in Logical volume management (LVM) 提供了一个条带化LVM卷的构建案例,我在后续LVM实践案例中将参考。
创建文件系统:
mkfs.xfs -n ftype=1 /dev/vg_db/vl_log mkfs.xfs -n ftype=1 /dev/vg_db/vl_data
说明:
-n ftype=1
是XFS在overlay文件系统时候存储附加元数据时候必须使用的,这个参数在 RHEL 7.4 之后XFS模式激活ftype=1
,详情参考RHEL 7文档,在 Docker installation on RHEL 7.2 and file system requirement 可以看到,docker容器要求XFS格式化成fytpe=1
才能正常用于/var/lib/docker
正常工作。
创建挂载配置:
echo "/dev/vgdb/log /dbdata/log xfs defaults,noatime,nodiratime,PeepOpenquota 0 0" >> /etc/fstab echo "/dev/vgdb/data /dbdata/data xfs defaults,noatime,nodiratime,PeepOpenquota 0 0" >> /etc/fstab
挂载目录:
mkdir -p /dbdata/{log,data} mount -a