XFS文件系统

时间:2019-04-29 03:17:32  来源:igfitidea点击:

什么是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具有以下分配方案:

  1. 基于扩展的分配
  2. Stripe-aware的分配策略
  3. 延迟的分配
  4. 空间预分配

延迟分配和其他性能优化对XFS的影响与对ext4的影响相同。也就是说,除非程序随后执行fsync()调用,否则不能保证程序对XFS文件系统的写操作是在磁盘上进行的。

XFS文件系统还支持以下功能:

  1. 扩展属性(xattr),它允许系统为每个文件关联多个额外的名称/值对。
  2. 配额日志,它避免了崩溃后冗长的配额一致性检查。
  3. 项目/目录配额,允许对目录树进行配额限制。
  4. 次秒级时间戳

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

  1. 创建一个包含/dev/sdb1分区的物理卷
  2. 创建一个名为vg01的卷组
  3. 创建一个逻辑卷,该逻辑卷将使用该卷组中的所有可用空间
[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

使用命令pvsvgs命令显示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