XFS文件系统的备份、恢复、修复

XFS文件系统是硅谷图形公司(Silicon Graphics Inc,简称SGI)开发的用于IRIX(一个UNIX操作系统)的文件系统,后将XFS移植到Linux操作系统上。XFS是高级日志文件系统,其特点极具伸缩性,同时也很健壮。2000年5月XFS通过GNU通用公共许可证移植到Linux系统上,通过十多年的不断修改已经成为一款非常成熟的文件系统。在多项针对XFS的性能测试上,XFS都取得了不俗的成绩,高并发环境下甚至已经超过ext4。

一、XFS文件系统的备份与恢复

XFS文件系统提供了整个分区备份的工具xfsdump供用户使用,用户可以在不借助第三方软件的情况下对XFS文件系统上的数据实施备份。

创建XFS分区及测试文件

[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分区

[root@localhost file]# mkdir /backup 

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

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

#利用xfsdump备份挂载点/file对应的分区

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会话标签

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

#输入媒体标签

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/

#已经成功创建备份文件

file.bak

恢复过程

[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

#已经成功恢复被删除的文件

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文件系统的检查和修复

创建XFS测试分区

[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文件系统,如果检查过程中发现问题将会列出

[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.

自动检查并修复XFS文件系统

[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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,135评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,317评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,596评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,481评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,492评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,153评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,737评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,657评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,193评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,276评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,420评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,093评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,783评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,262评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,787评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,427评论 2 359