XFS文件系统
什么是XFS?
XFS是一种高度可扩展的高性能文件日志文件系统,最初是在1993年由Silicon Graphics,Inc.设计的。XFS最初用于Silicon Graphics Inc.的操作系统Irix,但是后来在2001年移植到Linux内核。如今,大多数Linux发行版都支持XFS,现在它已成为RHEL(红帽企业Linux),Oracle Linux 7,CentOS 7和许多其他发行版上的默认文件系统。最初,XFS的创建是为了支持容量最大为16 EB的超大型文件系统和容量最大为8 EB的文件。
XFS支持元数据日记功能,可以在系统崩溃后更快地进行恢复。XFS文件系统在安装并处于活动状态时也可以进行碎片整理和扩展。XFS文件系统不能减小大小!
XFS具有以下分配方案:
- 基于扩展的分配
- Stripe-aware的分配策略
- 延迟的分配
- 空间预分配
延迟分配和其他性能优化对XFS的影响与对ext4的影响相同。也就是说,除非程序随后执行fsync()调用,否则不能保证程序对XFS文件系统的写操作是在磁盘上进行的。
XFS文件系统还支持以下功能:
- 扩展属性(xattr),它允许系统为每个文件关联多个额外的名称/值对。
- 配额日志,它避免了崩溃后冗长的配额一致性检查。
- 项目/目录配额,允许对目录树进行配额限制。
- 次秒级时间戳
XFS文件系统的基本布局
XFS文件系统可以驻留在常规的磁盘分区上,也可以驻留在逻辑卷上。
XFS文件系统最多有三个部分:数据部分、日志部分和实时部分。使用默认mkfs.xfs选项,没有实时部分,日志区域包含在数据部分中。日志部分可以与数据部分分离,也可以包含在其中。文件系统部分被划分为一定数量的块,其大小由mkfs.xfs命令的-b选项指定。
数据部分包含所有文件系统元数据(inode、目录、间接块),以及普通(非实时)文件的用户文件数据,如果日志位于数据部分内部,则包含日志区域。数据部分被分成若干个分配组。分配组的数量和大小由mkfs选择。因此,通常有少量大小相等的组。分配组的数量控制文件和块分配中可用的并行度。如果有足够的内存和大量的分配活动,则应该从默认值开始增加。分配组的数量不应该设置得很高,因为这会导致文件系统使用大量的CPU时间,特别是当文件系统几乎满了的时候。
当运行xfs_growfs时,会添加更多的分配组(原始大小)。下面的xfs_growfs示例中可以看到这个命令的使用示例。
日志部分(如果是数据部分的内部部分,则称为区域)用于在文件系统运行时存储对文件系统元数据的更改,直到对数据部分进行更改为止。更改在正常操作期间按顺序写入,在挂载期间仅读取。在崩溃后挂载文件系统时,将读取日志以完成在崩溃时正在进行的操作。
实时部分用于存储实时文件的数据。这些文件在文件创建之后,即任何数据写入文件之前,通过xfsctl设置一个属性位。实时部分被划分为若干固定大小的区段(在mkfs中指定)。xfs时间)。实时区段中的每个文件的区段大小是实时区段大小的倍数。
每个分配组包含几个数据结构。第一个扇区包含超级块。对于第一个之后的分配组,超块只是一个副本,不会在mkfs.xfs之后更新。接下来的三个扇区包含分配组中块和inode分配的信息。每个分配组中还包含用于定位空闲块和inode的数据结构。这些是通过标题结构定位的。
每个XFS文件系统都使用通用唯一标识符(UUID)进行标记。UUID存储在每个分配组标头中,用于帮助区分一个XFS文件系统与另一个文件系统,因此应该避免使用dd
实用程序或任何其他逐块复制程序来复制XFS文件系统。如果同一台机器上的两个XFS文件系统具有相同的UUID,那么在执行增量备份或恢复转储时,xfsdump可能会感到困惑。建议使用xfsdump和xfsrestore复制XFS文件系统。(参见xfs_copy)
创建一个XFS文件系统
要创建XFS文件系统,可以使用命令mkfs。xfs /dev/device.
当使用mkfs。在包含现有文件系统的块设备上,应该使用-f选项强制覆盖该文件系统。
下面是mkfs的一个示例。在CentOS 7服务器上执行的xfs命令。命令成功运行后,我们执行mount命令。在本例中,我们使用一个挂载点xfs_test
。这是通过执行mkdir /xfs_test
命令创建的。
[root@centos07a ~]# mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=256 agcount=4, agsize=32704 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 data = bsize=4096 blocks=130816, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=853, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 real-time =none extsz=4096 blocks=0, rtextents=0 [root@centos07a ~]# mount /dev/sdb1 /xfs_test [root@centos07a ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 6.7G 1.1G 5.7G 16% / devtmpfs devtmpfs 492M 0 492M 0% /dev tmpfs tmpfs 498M 0 498M 0% /dev/shm tmpfs tmpfs 498M 6.6M 491M 2% /run tmpfs tmpfs 498M 0 498M 0% /sys/fs/cgroup /dev/sda1 xfs 497M 100M 398M 20% /boot /dev/sdb1 xfs 508M 26M 482M 6% /xfs_test
使用LVM(逻辑卷管理器)为XFS文件系统添加空间
通常,为了增加空间,您可以使用LVM(逻辑卷管理器。在下面的示例中,我们将创建一个类型为8e的分区,表示LVM。我们将使用pvcreate命令创建一个物理卷,创建一个VolumeGroup并定义一个逻辑卷。接下来,我们将在逻辑卷上生成一个XFS文件系统。
使用fdisk创建一个分区
我们将使用磁盘分区工具fdisk
创建一个分区。
[root@centos07a ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-4194303, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): Using default value 4194303 Partition 1 of type Linux and of size 2 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): p Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x340b4c69 Device Boot Start End Blocks Id System /dev/sdb1 2048 4194303 2096128 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
可以看到在设备/dev/sdb
上创建了主分区,分区号为1
(/ dev / sdb1)。指定类型8e
与逻辑卷管理一起使用。然后使用选项p
预览分区布局,然后使用w
选项写入更改。
创建逻辑卷管理器组件:PV,VG和LV
- 创建一个包含/dev/sdb1分区的物理卷
- 创建一个名为
vg01
的卷组 - 创建一个逻辑卷,该逻辑卷将使用该卷组中的所有可用空间
[root@centos07a ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@centos07a ~]# vgcreate vg01 /dev/sdb1 Volume group "vg01" successfully created [root@centos07a ~]# lvcreate -n lv01 -l 100%VG vg01 Logical volume "lv01" created
使用命令pvs
和vgs
命令显示PV(物理卷)和VG(卷组)信息
[root@centos07a ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 7.51g 0 /dev/sdb1 vg01 lvm2 a-- 2.00g 0 [root@centos07a ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 7.51g 0 vg01 1 1 0 wz--n- 2.00g 0
在逻辑卷上创建XFS文件系统
使用mkfs.xfs
命令在逻辑卷(LV)上创建文件系统
[root@centos07a ~]# mkfs.xfs /dev/vg01/lv01 meta-data=/dev/vg01/lv01 isize=256 agcount=4, agsize=130816 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 data = bsize=4096 blocks=523264, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 real-time =none extsz=4096 blocks=0, rtextents=0
创建一个挂载点
在开始使用文件系统之前,首先必须将其挂载在挂载点上。
[root@centos07a /]# mkdir xfs_test
挂载文件系统
[root@centos07a /]# mount /dev/vg01/lv01 xfs_test/
使用df命令显示有关已挂载文件系统的信息
[root@centos07a /]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 6.7G 1.1G 5.7G 16% / devtmpfs devtmpfs 492M 0 492M 0% /dev tmpfs tmpfs 498M 0 498M 0% /dev/shm tmpfs tmpfs 498M 6.6M 491M 2% /run tmpfs tmpfs 498M 0 498M 0% /sys/fs/cgroup /dev/sda1 xfs 497M 100M 398M 20% /boot /dev/mapper/vg01-lv01 xfs 2.0G 33M 2.0G 2% /xfs_test
在挂载表/ etc / fstab中添加文件系统
要自动挂载文件系统,需要在挂载表/etc/fstab
中添加类似下面的一行
/dev/sdb1 /xfs_test xfs defaults 0 0
使用LVM扩展xfs文件系统
先向系统中添加其他磁盘。然后将该空间添加到现有的卷组vg01
,最后扩展增大逻辑卷lv01
。
在新添加的磁盘上创建新分区
使用分区工具fdisk
为添加的新磁盘创建新分区
[root@centos07a ~]# fdisk /dev/sdc Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-1048575, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-1048575, default 1048575): Using default value 1048575 Partition 1 of type Linux and of size 511 MiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): p Disk /dev/sdc: 536 MB, 536870912 bytes, 1048576 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x934cae77 Device Boot Start End Blocks Id System /dev/sdc1 2048 1048575 523264 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
创建一个新的物理卷
使用设备/dev/sdc1
创建一个新的PV(物理卷)。
[root@centos07a ~]# pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created
将新的物理卷添加到现有的卷组
在这里,我们将新空间添加到现有的卷组vg01
中。
[root@centos07a ~]# vgextend vg01 /dev/sdc1 Volume group "vg01" successfully extended
检查PV和VG
[root@centos07a ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 7.51g 0 /dev/sdb1 vg01 lvm2 a-- 2.00g 0 /dev/sdc1 vg01 lvm2 a-- 508.00m 508.00m [root@centos07a ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 7.51g 0 vg01 2 1 0 wz--n- 2.49g 508.00m
增大逻辑卷
使用lvextend
命令,将逻辑卷扩大500MB
由于使用-r
选项,文件系统将自动调整大小。
[root@centos07a /]# lvextend /dev/vg01/lv01 -L +500M -r Extending logical volume lv01 to 2.48 GiB Logical volume lv01 successfully resized meta-data=/dev/mapper/vg01-lv01 isize=256 agcount=4, agsize=130816 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 data = bsize=4096 blocks=523264, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 real-time =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 523264 to 651264
使用df检查文件系统
使用df
命令来检查文件系统大小是否已经增加。
[root@centos07a /]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 6.7G 1.1G 5.7G 16% / devtmpfs devtmpfs 492M 0 492M 0% /dev tmpfs tmpfs 498M 0 498M 0% /dev/shm tmpfs tmpfs 498M 6.6M 491M 2% /run tmpfs tmpfs 498M 0 498M 0% /sys/fs/cgroup /dev/sda1 xfs 497M 100M 398M 20% /boot /dev/mapper/vg01-lv01 xfs 2.5G 33M 2.5G 2% /xfs_test
xfs文件系统现在有2.5GB的可用空间。
说明: 无法减小XFS文件系统
[root@centos07a /]# lvreduce /dev/vg01/lv01 -L -500M -r fsadm: Xfs filesystem shrinking is unsupported fsadm failed: 1 Filesystem resize failed.
使用xfs_repair修复XFS文件系统
语法:
xfs_repair /dev/device
xfs_repair实用程序旨在非常快速地修复大小文件系统。
与其他文件系统修复工具不同,xfs_repair不会在系统引导时运行。
xfs_repair在装入时重做其日志,以确保文件系统一致。如果xfs_repair遇到脏日志,则它将无法修复文件系统。
要纠正文件系统,您需要首先清除相关日志,安装并卸载xfs文件系统。
如果日志文件已损坏并且无法成功重做,则可以使用选项-L
强制将日志清零。
日志清零命令xfs_repair -L /dev/device
XFS配额管理-xfs_quota
xfs_quota使管理员能够管理磁盘空间限制。XFS配额可以控制或报告用户,组或目录项目级别的使用情况。XFS配额在安装时启用。您可以指定noenforce
选项,该选项允许报告使用情况,但是不强制执行任何限制。
使用xfs_freeze挂起XFS文件系统
暂停访问或恢复对xfs文件系统的写活动的命令是xfs_freeze
。通常,此选项用于挂起写活动,从而允许基于硬件的设备快照用于以一致状态捕获文件系统。
xfs_freeze实用程序由软件包xfsprogs
提供,请注意,该功能仅适用于x86_64体系结构。
要冻结XFS文件系统,基本语法为:
xfs_freeze -f /mount/point
-f标志请求将指定的XFS文件系统设置为冻结状态,并立即停止进行任何修改。选择此选项后,将允许文件系统中所有正在进行的事务完成。任何新的写入系统调用都将停止。
要取消冻结XFS文件系统,基本语法是:
xfs_freeze -u /mount/point
-u标志用于取消冻结文件系统并允许操作再次继续。被冻结选项阻止的任何文件系统修改都将被取消阻止并允许完成。
如果要拍摄LVM快照,则无需运行xfs_freeze
实用程序,因为LVM实用程序将自动挂起相关的xfs文件系统。
您还可以使用xfs_freeze
实用程序来冻结或取消冻结ext3,ext4和btrfs文件系统。
xfs_copy
复制XFS文件系统的内容。xfs_copy仅应用于复制未装载的文件系统,只读已装载的文件系统或已被xfs_freeze实用程序冻结的文件系统。
xfs_fsr-XFS的文件系统重组器
xfs_fsr
实用程序用于对已安装的XFS文件系统进行碎片整理。重组算法一次对一个文件进行操作,压缩或以其他方式改善文件范围(文件数据的连续块)的布局。当不带任何参数调用时,xfs_fsr将对所有已挂载的xfs文件系统中的所有常规文件进行碎片整理。
xfs_bmap
打印XFS文件系统中文件使用的磁盘块的映射。
xfs_info
要查看您的XFS文件系统信息,可以执行命令xfs_info
:
[root@centos07a /]# xfs_info /dev/sdc1 meta-data=/dev/sdc1 isize=256 agcount=17, agsize=32704 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 data = bsize=4096 blocks=524032, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=853, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 real-time =none extsz=4096 blocks=0, rtextents=0
xfs_admin
xfs_admin命令允许管理员更改XFS文件系统的参数。
xfs_metadump
xfs_metadump是一个调试工具,可将XFS文件系统元数据复制到文件中。xfs_metadump实用程序仅应用于复制卸载的,只读的或冻结的/挂起的文件系统。否则,生成的转储可能已损坏或不一致。
xfs_mdrestore
xfs_mdrestore用于将XFS元转储映像还原到文件系统映像。
xfs_db
可用于调试XFS文件系统的实用程序。
xfs_estimate
xfs_estimate实用程序用于估计xfs文件系统将占用的空间量。
xfs_mkfile
xfs_mkfile用于创建xfs文件。默认情况下,文件以零填充。默认大小以字节为单位,但是可以分别用k,b,m或g后缀标记为千字节,块,兆字节或千兆字节。
语法
xfs_mkfile [ -v ] [ -n ] [ -p ] size[k|b|m|g] filename