在Fedora 22上创建/挂载/管理XFS文件系统

时间:2020-03-05 15:25:37  来源:igfitidea点击:

XFS是1993年由Silicon Graphics,Inc(SGI)创建的64位日记文件系统。
它是一个高性能和高度可扩展的文件系统,并于2001年移植到Linux内核。
从那时起,许多Linux发行版支持XFS且甚至是一些默认情况。
最新的Fedora 22 Server Edition默认使用XFS文件系统。

XFS在提交给主文件系统之前,跟踪对日志中的文件系统所做的更改。
因此,崩溃恢复更快,保证文件系统一致性。
即使在主动安装时,也可以扩展和对文件系统进行缩短。

在本文中,让我们了解如何在Fedora 22上创建,安装和使用XFS。

1)创建和安装XFS

在以下所有示例中,我正在使用虚拟设备(/dev/xvdc)作为我的块设备。

如果尚未安装XFS,请使用命令安装它:

#yum install xfsprogs

使用fdisk在块设备中创建一个新分区,然后使用mkfs.xfs命令在其上进行文件系统。

#mkfs.xfs  <device>

这是一个示例输出,我的新创建分区是/dev/xvdc1:

[root@li1014-63 ~]# mkfs.xfs /dev/xvdc1
meta-data=/dev/xvdc1 isize=256 agcount=4, agsize=235008 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=940032, 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=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

如果设备分区已在其上有文件系统,则可以使用MKFS使用"-f"选项,并且我们希望通过编写它。
现在XFS分区已准备好安装。

安装XFS直截了当。

#mount <device>  <mount-point>

这里<mount-point>是安装文件系统的本地安装点。

在非常大的文件系统(> 2 TB)上,安装在安装时使用"Inode64"选项,以便提高性能

[root@li1014-63 ~]# mount -o inode64 /dev/xvdc1 /test

验证安装是否成功

[root@li1014-63 ~]# mount
/dev/xvdc1 on /test type xfs (rw,relatime,attr2,inode64,noquota)

如果要在重新启动中保留安装,请将以下行添加到/etc/fstab

/dev/xvdc1  /test   xfs          defaults     0 0

对于具有写入缓存的设备,XFS在功率损耗期间使用用于文件系统完整性的写障碍。
如果我们的设备没有编写缓存,我们可以在安装时使用"nobarrier"禁用此选项。

#mount -onobarrier

2)配额管理

配额是一种控制磁盘空间使用的方式。
它在超出分配空间时警告用户。
XFS允许软和硬限制执行。
可以在用户,组和项目级别设置,但组和项目配额是互斥的。
在安装文件系统时必须设置XFS配额。
还可以仅使用"Noenforce"选项来选择在不执行任何限制的情况下报告文件系统使用情况。

要设置用户配额,请使用"uquota"挂载XFS分区

[root@li1014-63 ~]# mount /dev/xvdc1 -o uquota /test

验证是否在分区上启用了用户配额:

[root@li1014-63 ~]# mount
.....
/dev/xvdc1 on /test type xfs (rw,relatime,attr2,inode64,usrquota)

xfs_quota命令用于管理XFS文件系统上的配额。
现在,检查已挂载的XFS分区上的配额限制的存在:

[root@li1014-63 ~]# xfs_quota -x -c 'report -h' /test
User quota on /test (/dev/xvdc1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------
root         4K     0         0    00     [------]

我们可以设置软和硬体inode计数限制(Isoft,iHard)或者软块限制(Bsoft,Bhard)。

INORDER为用户'BNP设置块软限制,我发出以下命令:

[root@li1014-63 ~]# xfs_quota -xc 'limit bsoft=500m bnp' /test

验证新强加的限制:

[root@li1014-63 ~]# xfs_quota -xc 'report' /test
User quota on /test (/dev/xvdc1)
Blocks
User ID            Used          Soft         Hard          Warn/Grace
---------- -------------------------------------------------
root                   4                        0         0                00 [--------]
bnp                   0            512000          0                00 [--------]

默认情况下,为用户设置限制。
如果要为组或者项目设置,则分别使用选项'-g'和'-p'。

同样,使用GQUOTA和PQUOTA在安装XF时启用组和项目配额。

#mount -o gquota
#mount /dev/device -o pquota /mount/point

3)文件系统扩展

XFS的一个很好的特征是即使安装时也可以长大。
为此,底层设备应该有足够的空间。
使用"fdisk",删除现有分区并使用所需的大小重新创建它。
然后,我们可以使用'xfs_growfs'命令来增长文件系统。

#xfs_growfs -D size

或者

#xfs_growfs -d

此处'-d'选项用于将文件系统大小提高到指定大小,其中"-d"将大小提高到基础设备支持的最大大小。
使用"-d"选项时,需要在块的数量方面指定大小。
要在块方面知道当前大小,我们可以使用"xfs_info"命令。

[root@li1014-63 ~]# xfs_info /test
meta-data=/dev/xvdc1 isize=256 agcount=4, agsize=235008 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=940032, 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=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

以下是示例输出,显示了"-d"选项的使用。

[root@li1014-63 ~]# xfs_growfs -d /test
meta-data=/dev/xvdc1 isize=256 agcount=4, agsize=51200 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=204800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=1605, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 204800 to 262144

请注意,无法减少XFS文件系统的大小。

4)文件系统修复

为了解决问题,如果有的话,使用XFS文件系统,请使用'xfs_repair'命令。
它是一个非常有效的工具,可以修复具有许多inode的大文件系统。
在运行该实用程序之前,必须首先卸载已安装的XFS分区/卷。

#xfs_repair  <device>

以下是在干净系统上运行XFS_REPAIR的示例输出:

root@li1014-63 ~]# xfs_repair /dev/xvdc1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- agno = 4
- agno = 5
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- agno = 4
- agno = 5
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

请注意,即使文件系统分区未完成,此工具也不会在启动时运行。

5)文件系统暂停

"XFS_FREZE"实用程序可在XF中提供暂停(冻结)并恢复I/O到文件系统。

#xfs_freeze -f

访问文件系统的任何尝试都将挂起命令行直到恢复。

[root@li1014-63 ~]# xfs_freeze -f /test

我们可以使用"-u"选项来解冻它。

#xfs_freeze -u <mount-point>
[root@li1014-63 ~]# xfs_freeze -u /test

6)备份和恢复

备份文件系统数据并恢复它可以使用两个实用程序完成,即'xfsdump'和'xfsrestore'完成。
这些不是XFSPROG的一部分,需要使用"yum安装xfsdump"单独安装。

xfsdump支持增量备份,它使用转储级别。
转储级别有助于确定特定转储所属的基础级别。
选项'-l'用于指定转储级别(0-9)。
使用'-l'指定0具有在整个文件系统上执行完整备份的效果。

#xfsdump-l -f

其中转储目的地可以是常规文件或者磁带机。
拍摄文件系统的完整备份的示例输出:

[root@li1014-63 ~]# xfsdump -l 0 -f /dev/xvdc1 /backup
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
-> FullBkup
session label entered: "FullBkup"
--------------------------------- end dialog --------------------------------
xfsdump: level 0 dump of li1014-63:/backup
xfsdump: dump date: Wed Jun 17 05:50:00 2014
xfsdump: session id: bce65c00-cf52-4a79-902a-f9810f1cb78f
xfsdump: session label: "FullBkup"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 20800 bytes
============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> Bkup1
media label entered: "Bkup1"
--------------------------------- end dialog --------------------------------
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21016 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 21 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /dev/xvdc1 OK (success)
xfsdump: Dump Status: SUCCESS

增量备份将备份自上次级别转储以来已更改的文件。

另一方面,XFSRestore作为名称建议将从XFSDump生成的转储中还原文件系统。
为了恢复数据,我们需要将会话ID传递给xfsrestore命令。
可以使用'-i'选项获得此会话ID

#xfsrestore -I
[root@li1014-63 ~]# xfsrestore -I
file system 0:
fs id: 2e3d5f7c-1fde-4c2b-8a71-944e96d3c3a8
session 0:
mount point: li1014-63:/backup
device: li1014-63:/dev/xvdc2
time: Wed Jun 17 05:50:00 2014
session label: "FullBkup"
session id: bce65c00-cf52-4a79-902a-f9810f1cb78f
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /dev/xvdc1
start: ino 0 offset 0
end: ino 1 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 21016
mfile start: ino 0 offset 0
mfile end: ino 1 offset 0
media label: "Bkup1"
media id: ed00b8a7-42fd-4fa3-80a4-31d3a42f03e6
xfsrestore: Restore Status: SUCCESS

现在使用会话ID和还原。

root@li1014-63 ~]# xfsrestore -f /dev/xvdc1 -S bce65c00-cf52-4a79-902a-f9810f1cb78f /backup
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: examining media file 0
xfsrestore: reading directories
xfsrestore: 1 directories and 0 entries processed
xfsrestore: directory post-processing
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore: stream 0 /dev/xvdc1 OK (success)
xfsrestore: Restore Status: SUCCESS

使用'-r'选项从增量备份恢复文件系统。

#xfsrestore -f   -S -r

交互式使用XFSRestore(-i),还可以通过使用XFSRestore(-i)来添加,删除或者从转储中提取文件

#xfsrestore -f -i

示例输出显示交互式还原的用法:

[root@li1014-63 ~]# xfsrestore -f /dev/xvdc1 -i
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: li1014-63
xfsrestore: mount point: /backup
xfsrestore: volume: /dev/xvdc2
xfsrestore: session time: Wed Jun 17 05:50:00 2014
xfsrestore: level: 0
xfsrestore: session label: "FullBkup"
xfsrestore: media label: "Bkup1"
xfsrestore: file system id: 2e3d5f7c-1fde-4c2b-8a71-944e96d3c3a8
xfsrestore: session id: bce65c00-cf52-4a79-902a-f9810f1cb78f
xfsrestore: media id: ed00b8a7-42fd-4fa3-80a4-31d3a42f03e6
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 0 entries processed
xfsrestore: directory post-processing
========================== subtree selection dialog ==========================
the following commands are available:
pwd
ls [ <path> ]
cd [ <path> ]
add [ <path> ]
delete [ <path> ]
extract
quit
help
-> extract
--------------------------------- end dialog --------------------------------
xfsrestore: restore complete: 8 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore: stream 0 /dev/xvdc1 OK (success)
xfsrestore: Restore Status: SUCCESS

更多的公用事业

XFS_FSR.

碎片整数已安装XFS文件系统。
可以在文件系统级别或者甚至在单个文件级别进行碎片整理

[root@li1014-63 backup]# xfs_fsr /test
/test start inode=0

这里/测试是安装XFS文件系统的安装点。

碎片整理特定文件:

[root@li1014-63 /]# xfs_fsr /test/abc

XFS_BMP.

打印文件系统中文件使用的磁盘块映射。

[root@li1014-63 /]# xfs_bmap /test/abc
/test/abc:
0: [0..7]: 88..95

xfs_info.

打印XFS文件系统信息

[root@li1014-63 /]# xfs_info /test
meta-data=/dev/xvdc1 isize=256 agcount=6, agsize=51200 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=1605, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

xfs_copy.

将整个XFS文件系统的内容复制到目标

XFS_DB.

调试XFS文件系统