一,xfs文件系統的特點
XFS是一種高性能的日志文件系統,
它是由SGI公司設計的,被稱為業界最先進的、最具可升級性的文件系統技術。
最初是從unix(irix)移植到linux系統上的。
從centos7開始,xfs成為了默認的文件系統
說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest
對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: 371125307@qq.com
說明:格式化文件系統前需要創建分區,請參考這一篇
https://www.cnblogs.com/architectforest/p/12642634.html
二,centos8中的xfs
1,最大單文件大小:500TB
最大分區大小: 1024TB
2,相比較之下,centos6 的ext4:
最大單文件大小:16TB
最大分區大小: 16TB
可見對於大型文件系統的支持,xfs比ext4要好得多
三,xfs相關的工具程序屬於哪個包及安裝
1,查看所屬的包
[root@blog ~]# whereis mkfs.xfs mkfs: /usr/sbin/mkfs /usr/sbin/mkfs.cramfs /usr/sbin/mkfs.minix /usr/sbin/mkfs.xfs
/usr/sbin/mkfs.ext2 /usr/sbin/mkfs.ext3 /usr/sbin/mkfs.ext4
/usr/sbin/mkfs.fat /usr/sbin/mkfs.msdos /usr/sbin/mkfs.vfat /usr/share/man/man8/mkfs.8.gz [root@blog ~]# rpm -qf /usr/sbin/mkfs.xfs xfsprogs-4.19.0-2.el8.x86_64
2,找不到mkfs.xfs命令時,可以用yum安裝
[root@blog ~]# yum install xfsprogs
四,查看xfs相關工具的版本
1,查看mkfs.xfs的版本
[root@blog ~]# mkfs.xfs -V mkfs.xfs version 5.0.0
2,查看幫助:不指定參數時,會打印幫助信息
[root@blog ~]# mkfs.xfs
五,例子:格式化一個分區為xfs文件系統並掛載
1,查看分區的文件系統:
[root@blog ~]# parted --list Model: Virtio Block Device (virtblk) Disk /dev/vdb: 537GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 537GB 537GB primary
可以看到文件系統字段下面為空,表示還沒有格式化
2,xfs格式化
#使用 mkfs.xfs 加分區
[root@blog ~]# mkfs.xfs /dev/vdb1 meta-data=/dev/vdb1 isize=512 agcount=4, agsize=32767872 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=131071488, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=63999, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
說明:如果當前分區已經有文件系統存在,則需要加-f參數
/* force overwrite */ [-f]
3,再次查看分區:
[root@blog ~]# parted --list Model: Virtio Block Device (virtblk) Disk /dev/vdb: 537GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 537GB 537GB xfs primary
可以看到分區的文件系統已格式化為xfs
4,把格式化好后的分區掛載到/databak這個目錄
查看分區的掛載情況
[root@blog ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 7.5G 0 7.5G 0% /dev tmpfs 7.5G 0 7.5G 0% /dev/shm tmpfs 7.5G 480K 7.5G 1% /run tmpfs 7.5G 0 7.5G 0% /sys/fs/cgroup /dev/vda1 100G 14G 87G 14% / tmpfs 1.5G 0 1.5G 0% /run/user/1000
創建目錄並掛載
[root@blog ~]# mkdir /databak
#掛載時用mount命令 [root@blog ~]# mount /dev/vdb1 /databak
再次查看掛載情況
[root@blog ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 7.5G 0 7.5G 0% /dev tmpfs 7.5G 0 7.5G 0% /dev/shm tmpfs 7.5G 480K 7.5G 1% /run tmpfs 7.5G 0 7.5G 0% /sys/fs/cgroup /dev/vda1 100G 14G 87G 14% / tmpfs 1.5G 0 1.5G 0% /run/user/1000 /dev/vdb1 500G 3.6G 497G 1% /databak
可以看到/dev/vdb1掛載到了/databak目錄下,說明掛載已成功
5,編輯 /etc/fstab,使機器啟動時此文件系統能自動掛載
用blkid得到分區的uuid
[root@blog ~]# blkid /dev/vda1: UUID="e32cfa7a-df48-4031-8fdf-5eec92ee3039" TYPE="xfs" PARTUUID="1863aa79-01" /dev/vdb1: UUID="7b7af437-97ef-4f76-8ea1-bb6498ae0f44" TYPE="xfs" PARTLABEL="primary" PARTUUID="c124c0e4-3626-4abf-a3e5-503c52e31417"
編輯 /etc/fstab
[root@blog ~]# vi /etc/fstab
增加一行,保存后退出:
UUID=7b7af437-97ef-4f76-8ea1-bb6498ae0f44 /databak xfs defaults 0 2
五,對/etc/fstab文件格式的說明:
第一列:設備id,centos默認用uuid指定設備,我們也建議采用這種格式
第二列: 掛載點,它需要是一個存在的目錄,如果是swap分區時可以直接寫swap
第三列: 文件系統類型,需要與格式化時的文件系統類型相同
第四列: 掛載參數:
-
auto: 系統自動掛載,fstab默認就是這個選項
-
defaults: 最常見參數,可以滿足需要大多數文件系統使用
-
noauto 開機不自動掛載
-
nouser 只有超級用戶可以掛載
-
ro 按只讀權限掛載
-
rw 按可讀可寫權限掛載
-
user 任何用戶都可以掛載
-
請注意光驅和軟驅只有在裝有介質時才可以進行掛載,因此它是noauto
第五列:是否允許備份操作
當其值設置為1時,將允許dump備份程序備份;設置為0時,忽略備份操作;
第六列:開機時磁盤的檢查順序
數字越小越優先檢查,如果兩個分區的數字相同,則同時檢查。
當其值為0時,永遠不檢查。
根”/”分區永遠都為1。其它分區從2開始
六,例子:xfs文件系統修復
1,如果發生文件系統報錯,需要進行修復
注意修復前要做umount
# xfs_repair 加分區名,是對此分區做xfs文件系統修復
[root@blog ~]# umount /databak [root@blog ~]# xfs_repair /dev/vdb1 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 - 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 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
2,注意:生產環境中應該系統盤和數據盤分開,則系統盤可以直接重做系統
3,常用的幾個參數
# -L是修復xfs文件系統的最后手段,慎重選擇,它會清空日志,會丟失用戶數據和文件
[root@blog ~]# xfs_repair -L /dev/vdb1
# -n,檢查文件系統是否損壞,如果損壞會列出將要執行的操作
即只檢查不處理
[root@blog ~]# xfs_repair -n /dev/vdb1
七,例子:xfs文件系統備份和恢復
1,備份:
創建一個文件,用來測試備份和恢復是否成功
[root@blog databak]# vi a.txt
內容:abcdefg
# -f 指定備份文件的路徑
[root@blog ~]# xfsdump -f /root/databak.xfsdump /databak xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.8 (dump format 3.0) - type ^C for status and control ============================= dump label dialog ============================== please enter label for this dump session (timeout in 300 sec) -> databak backup session label entered: "databak backup" --------------------------------- end dialog --------------------------------- xfsdump: level 0 dump of blog:/databak xfsdump: dump date: Mon Apr 6 15:53:46 2020 xfsdump: session id: 08fdf1fd-2056-4010-bb8e-43fbbc053b9f xfsdump: session label: "databak backup" 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: 25216 bytes ============================= media label dialog ============================= please enter label for media in drive 0 (timeout in 300 sec) -> vdb1 media label entered: "vdb1 " --------------------------------- 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 21872 bytes xfsdump: dump size (non-dir files) : 544 bytes xfsdump: dump complete: 26 seconds elapsed xfsdump: Dump Summary: xfsdump: stream 0 /root/databak.xfsdump OK (success) xfsdump: Dump Status: SUCCESS
兩個label分別是:this dump session 和 media
我們輸入了: databak backup 和 vdb1
2,查看備份文件的情況
#-I : 大寫的i,用來顯示備份的信息
[root@blog ~]# xfsdump -I file system 0: fs id: 7b7af437-97ef-4f76-8ea1-bb6498ae0f44 session 0: mount point: blog:/databak device: blog:/dev/vdb1 time: Mon Apr 6 15:53:46 2020 session label: "databak backup" session id: 08fdf1fd-2056-4010-bb8e-43fbbc053b9f level: 0 resumed: NO subtree: NO streams: 1 stream 0: pathname: /root/databak.xfsdump start: ino 132 offset 0 end: ino 133 offset 0 interrupted: NO media files: 1 media file 0: mfile index: 0 mfile type: data mfile size: 21872 mfile start: ino 132 offset 0 mfile end: ino 133 offset 0 media label: "vdb1 " media id: 0ff37aa0-a15e-43ed-a0b0-2b432570545f xfsdump: Dump Status: SUCCESS
3,刪除文件后再恢復備份:
[root@blog ~]# cd /databak [root@blog databak]# ls a.txt [root@blog databak]# rm a.txt rm: remove regular file 'a.txt'? y [root@blog databak]# ls [root@blog databak]#
# -f 指定備份文件的路徑
[root@blog databak]# xfsrestore -f /root/databak.xfsdump /databak xfsrestore: using file dump (drive_simple) strategy xfsrestore: version 3.1.8 (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: blog xfsrestore: mount point: /databak xfsrestore: volume: /dev/vdb1 xfsrestore: session time: Mon Apr 6 15:53:46 2020 xfsrestore: level: 0 xfsrestore: session label: "databak backup" xfsrestore: media label: "databak " xfsrestore: file system id: 7b7af437-97ef-4f76-8ea1-bb6498ae0f44 xfsrestore: session id: 08fdf1fd-2056-4010-bb8e-43fbbc053b9f xfsrestore: media id: 0ff37aa0-a15e-43ed-a0b0-2b432570545f xfsrestore: using online session inventory xfsrestore: searching media for directory dump xfsrestore: reading directories xfsrestore: 1 directories and 1 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: restore complete: 0 seconds elapsed xfsrestore: Restore Summary: xfsrestore: stream 0 /root/databak.xfsdump OK (success) xfsrestore: Restore Status: SUCCESS
查看被刪除的文件是否已恢復
[root@blog databak]# ls a.txt [root@blog databak]# more a.txt abcdefg
八,查看centos版本
[root@blog databak]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core)