XFS文件系統(tǒng)的備份、恢復(fù)、修復(fù)

XFS文件系統(tǒng)是硅谷圖形公司(Silicon Graphics Inc,簡(jiǎn)稱SGI)開發(fā)的用于IRIX(一個(gè)UNIX操作系統(tǒng))的文件系統(tǒng),后將XFS移植到Linux操作系統(tǒng)上。XFS是高級(jí)日志文件系統(tǒng),其特點(diǎn)極具伸縮性,同時(shí)也很健壯。2000年5月XFS通過GNU通用公共許可證移植到Linux系統(tǒng)上,通過十多年的不斷修改已經(jīng)成為一款非常成熟的文件系統(tǒng)。在多項(xiàng)針對(duì)XFS的性能測(cè)試上,XFS都取得了不俗的成績(jī),高并發(fā)環(huán)境下甚至已經(jīng)超過ext4。

一、XFS文件系統(tǒng)的備份與恢復(fù)

XFS文件系統(tǒng)提供了整個(gè)分區(qū)備份的工具xfsdump供用戶使用,用戶可以在不借助第三方軟件的情況下對(duì)XFS文件系統(tǒng)上的數(shù)據(jù)實(shí)施備份。

創(chuàng)建XFS分區(qū)及測(cè)試文件

[root@localhost ~]# ls /dev/sd*

/dev/sda? /dev/sda1? /dev/sda2? /dev/sdb

[root@localhost ~]# 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): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x08a5199d

? Device Boot? ? ? Start? ? ? ? End? ? ? Blocks? Id? System

Command (m for help): n

Partition type:

? p? primary (0 primary, 0 extended, 4 free)

? e? extended

Select (default p): p

First sector (2048-41943039, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G

Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x08a5199d

? Device Boot? ? ? Start? ? ? ? End? ? ? Blocks? Id? System

/dev/sdb1? ? ? ? ? ? 2048? ? 2099199? ? 1048576? 83? Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]# partprobe

Warning: Unable to open /dev/sr0 read-write (Read-only file system).? /dev/sr0 has been opened read-only.

[root@localhost ~]# ls /dev/sd*

/dev/sda? /dev/sda1? /dev/sda2? /dev/sdb? /dev/sdb1

[root@localhost ~]# mkfs.xfs -f /dev/sdb1

meta-data=/dev/sdb1? ? ? ? ? ? ? isize=512? ? agcount=4, agsize=65536 blks

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? sectsz=512? attr=2, projid32bit=1

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? crc=1? ? ? ? finobt=0, sparse=0

data? ? =? ? ? ? ? ? ? ? ? ? ? bsize=4096? blocks=262144, imaxpct=25

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? sunit=0? ? ? swidth=0 blks

naming? =version 2? ? ? ? ? ? ? bsize=4096? ascii-ci=0 ftype=1

log? ? ? =internal log? ? ? ? ? bsize=4096? blocks=2560, version=2

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? sectsz=512? sunit=0 blks, lazy-count=1

realtime =none? ? ? ? ? ? ? ? ? extsz=4096? blocks=0, rtextents=0

[root@localhost ~]# blkid /dev/sdb1? ? ?

/dev/sdb1: UUID="61a5e59d-92d3-458d-ac09-7d945469cda6" TYPE="xfs"

[root@localhost ~]# mkdir /file

[root@localhost ~]# echo "/dev/sdb1 /file xfs defaults 0 0" >> /etc/fstab

[root@localhost ~]# mount -a

[root@localhost ~]# df -h

Filesystem? ? ? ? ? ? Size? Used Avail Use% Mounted on

/dev/mapper/rhel-root? 17G? 1.9G? 16G? 12% /

devtmpfs? ? ? ? ? ? ? 901M? ? 0? 901M? 0% /dev

tmpfs? ? ? ? ? ? ? ? ? 912M? ? 0? 912M? 0% /dev/shm

tmpfs? ? ? ? ? ? ? ? ? 912M? 8.7M? 903M? 1% /run

tmpfs? ? ? ? ? ? ? ? ? 912M? ? 0? 912M? 0% /sys/fs/cgroup

/dev/sr0? ? ? ? ? ? ? 3.8G? 3.8G? ? 0 100% /yum

/dev/sda1? ? ? ? ? ? 1014M? 143M? 872M? 15% /boot

tmpfs? ? ? ? ? ? ? ? ? 183M? ? 0? 183M? 0% /run/user/0

/dev/sdb1? ? ? ? ? ? 1014M? 33M? 982M? 4% /file

[root@localhost ~]# cd /file/

[root@localhost file]# ls

[root@localhost file]# touch file{1..100}

[root@localhost file]# ls

file1? ? file16? file23? file30? file38? file45? file52? file6? file67? file74? file81? file89? file96

file10? file17? file24? file31? file39? file46? file53? file60? file68? file75? file82? file9? file97

file100? file18? file25? file32? file4? file47? file54? file61? file69? file76? file83? file90? file98

file11? file19? file26? file33? file40? file48? file55? file62? file7? file77? file84? file91? file99

file12? file2? file27? file34? file41? file49? file56? file63? file70? file78? file85? file92

file13? file20? file28? file35? file42? file5? file57? file64? file71? file79? file86? file93

file14? file21? file29? file36? file43? file50? file58? file65? file72? file8? file87? file94

file15? file22? file3? file37? file44? file51? file59? file66? file73? file80? file88? file95

備份XFS分區(qū)

[root@localhost file]# mkdir /backup?

[root@localhost file]# yum install -y xfsdump

[root@localhost file]# xfsdump -f /backup/file.bak /file

#利用xfsdump備份掛載點(diǎn)/file對(duì)應(yīng)的分區(qū)

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 ==============================

#輸入dump會(huì)話標(biāo)簽

please enter label for this dump session (timeout in 300 sec)

-> file.bak

session label entered: "file.bak"

--------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of localhost.localdomain:/file

xfsdump: dump date: Thu Oct 31 22:16:02 2019

xfsdump: session id: 02a1445f-5ff3-4518-ab2c-888d9e2a4c44

xfsdump: session label: "file.bak"

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: 52800 bytes

============================= media label dialog =============================

#輸入媒體標(biāo)簽

please enter label for media in drive 0 (timeout in 300 sec)

-> file

media label entered: "file"

--------------------------------- 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 86544 bytes

xfsdump: dump size (non-dir files) : 0 bytes

xfsdump: dump complete: 27 seconds elapsed

xfsdump: Dump Summary:

xfsdump:? stream 0 /backup/file.bak OK (success)

xfsdump: Dump Status: SUCCESS

[root@localhost file]# ls /backup/

#已經(jīng)成功創(chuàng)建備份文件

file.bak

恢復(fù)過程

[root@localhost file]# ls

file1? ? file16? file23? file30? file38? file45? file52? file6? file67? file74? file81? file89? file96

file10? file17? file24? file31? file39? file46? file53? file60? file68? file75? file82? file9? file97

file100? file18? file25? file32? file4? file47? file54? file61? file69? file76? file83? file90? file98

file11? file19? file26? file33? file40? file48? file55? file62? file7? file77? file84? file91? file99

file12? file2? file27? file34? file41? file49? file56? file63? file70? file78? file85? file92

file13? file20? file28? file35? file42? file5? file57? file64? file71? file79? file86? file93

file14? file21? file29? file36? file43? file50? file58? file65? file72? file8? file87? file94

file15? file22? file3? file37? file44? file51? file59? file66? file73? file80? file88? file95

[root@localhost file]# rm -rf *

[root@localhost file]# ls

[root@localhost file]# xfsrestore -f /backup/file.bak /file

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: localhost.localdomain

xfsrestore: mount point: /file

xfsrestore: volume: /dev/sdb1

xfsrestore: session time: Thu Oct 31 22:16:02 2019

xfsrestore: level: 0

xfsrestore: session label: "file.bak"

xfsrestore: media label: "file"

xfsrestore: file system id: 61a5e59d-92d3-458d-ac09-7d945469cda6

xfsrestore: session id: 02a1445f-5ff3-4518-ab2c-888d9e2a4c44

xfsrestore: media id: 2d1d9f33-dff3-4cfa-a2f6-bf65bd8f242b

xfsrestore: using online session inventory

xfsrestore: searching media for directory dump

xfsrestore: reading directories

xfsrestore: 1 directories and 100 entries processed

xfsrestore: directory post-processing

xfsrestore: restoring non-directory files

xfsrestore: restore complete: 0 seconds elapsed

xfsrestore: Restore Summary:

xfsrestore:? stream 0 /backup/file.bak OK (success)

xfsrestore: Restore Status: SUCCESS

[root@localhost file]# ls

#已經(jīng)成功恢復(fù)被刪除的文件

file1? ? file16? file23? file30? file38? file45? file52? file6? file67? file74? file81? file89? file96

file10? file17? file24? file31? file39? file46? file53? file60? file68? file75? file82? file9? file97

file100? file18? file25? file32? file4? file47? file54? file61? file69? file76? file83? file90? file98

file11? file19? file26? file33? file40? file48? file55? file62? file7? file77? file84? file91? file99

file12? file2? file27? file34? file41? file49? file56? file63? file70? file78? file85? file92

file13? file20? file28? file35? file42? file5? file57? file64? file71? file79? file86? file93

file14? file21? file29? file36? file43? file50? file58? file65? file72? file8? file87? file94

file15? file22? file3? file37? file44? file51? file59? file66? file73? file80? file88? file95

二、XFS文件系統(tǒng)的檢查和修復(fù)

創(chuàng)建XFS測(cè)試分區(qū)

[root@localhost file]# 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): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x08a5199d

? Device Boot? ? ? Start? ? ? ? End? ? ? Blocks? Id? System

/dev/sdb1? ? ? ? ? ? 2048? ? 2099199? ? 1048576? 83? Linux

Command (m for help): n

Partition type:

? p? primary (1 primary, 0 extended, 3 free)

? e? extended

Select (default p): p

Partition number (2-4, default 2):

First sector (2099200-41943039, default 2099200):

Using default value 2099200

Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): +1G

Partition 2 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x08a5199d

? Device Boot? ? ? Start? ? ? ? End? ? ? Blocks? Id? System

/dev/sdb1? ? ? ? ? ? 2048? ? 2099199? ? 1048576? 83? Linux

/dev/sdb2? ? ? ? 2099200? ? 4196351? ? 1048576? 83? Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

The kernel still uses the old table. The new table will be used at

the next reboot or after you run partprobe(8) or kpartx(8)

Syncing disks.

[root@localhost file]# partprobe

Warning: Unable to open /dev/sr0 read-write (Read-only file system).? /dev/sr0 has been opened read-only.

[root@localhost file]# ls /dev/sd*

/dev/sda? /dev/sda1? /dev/sda2? /dev/sdb? /dev/sdb1? /dev/sdb2

[root@localhost file]# mkfs.xfs /dev/sdb2

meta-data=/dev/sdb2? ? ? ? ? ? ? isize=512? ? agcount=4, agsize=65536 blks

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? sectsz=512? attr=2, projid32bit=1

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? crc=1? ? ? ? finobt=0, sparse=0

data? ? =? ? ? ? ? ? ? ? ? ? ? bsize=4096? blocks=262144, imaxpct=25

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? sunit=0? ? ? swidth=0 blks

naming? =version 2? ? ? ? ? ? ? bsize=4096? ascii-ci=0 ftype=1

log? ? ? =internal log? ? ? ? ? bsize=4096? blocks=2560, version=2

? ? ? ? =? ? ? ? ? ? ? ? ? ? ? sectsz=512? sunit=0 blks, lazy-count=1

realtime =none? ? ? ? ? ? ? ? ? extsz=4096? blocks=0, rtextents=0

檢查XFS文件系統(tǒng),如果檢查過程中發(fā)現(xiàn)問題將會(huì)列出

[root@localhost file]# xfs_repair -n /dev/sdb2

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 (but don't 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

No modify flag set, skipping phase 5

Phase 6 - check inode connectivity...

? ? ? ? - traversing filesystem ...

? ? ? ? - traversal finished ...

? ? ? ? - moving disconnected inodes to lost+found ...

Phase 7 - verify link counts...

No modify flag set, skipping filesystem flush and exiting.

自動(dòng)檢查并修復(fù)XFS文件系統(tǒng)

[root@localhost file]# xfs_repair /dev/sdb2? ? ? ?

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容