CentOS7.3 でのxfsdump/xfsrestoreコマンドを利用したシステムバックアップ(LVM環境）

# 概要
## 記事の目的
　5～6年ぶりにdump/restoreコマンドを利用したシステムバックアップ/リストアを実装する事になったため、検証機で手順を確認した際の作業メモ。

## 環境
- CentOS 7.3
- ディスク構成は初期インストールのデフォルト（LVM利用）
- バックアップ先はNFSサーバ(/mntにマウントしている）Ｉ
- - ※NFSサーバ自身の設定は省略）

# 環境確認
バックアップ対象の環境を確認する。

1.sfdiskの結果を確認し、NFSサーバに結果を保存する。

``` bash:sfdisk
[root@centos7-test ~]# sfdisk -d /dev/sda

# partition table of /dev/sda
unit: sectors

/dev/sda1 : start=     2048, size=  2097152, Id=83, bootable
/dev/sda2 : start=  2099200, size= 39843840, Id=8e
/dev/sda3 : start=        0, size=        0, Id= 0
/dev/sda4 : start=        0, size=        0, Id= 0`

[root@centos7-test ~]# sfdisk -d /dev/sda > /mnt/sfdisk_dump.txt
```

2.UUIDの情報を出力する

``` bash:blkid
 [root@centos7-test ~]# blkid
 /dev/mapper/cl-root: UUID="691942dd-aee2-4577-a1c7-5d4c1d8e7019" TYPE="xfs"
 /dev/sda2: UUID="8SYMJe-OfPR-fYqX-ir9k-FKmM-HeL8-L7FUHu" TYPE="LVM2_member"
 /dev/sda1: UUID="32066488-6586-4913-8cf7-bbcfd737f657" TYPE="xfs"
 /dev/mapper/cl-swap: UUID="16ae2de8-cbfc-4ee2-a60a-c0493ebd7b03" TYPE="swap"
 [root@centos7-test ~]# blkid > /mnt/blkid.txt
```

3.fstabの情報を記録する
こちらも念のため記録する

``` bash:fstab
[root@centos7-test ~]# cat /mnt/fstab.txt

#
# /etc/fstab
# Created by anaconda on Fri Apr  7 23:48:59 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=32066488-6586-4913-8cf7-bbcfd737f657 /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
 cat /etc/fstab > /mnt/fstab.txt
```
4.NW設定の情報を記録する

``` bash:nmtui
[root@centos7-test ~]# nmcli c
名前   UUID                                  タイプ          デバイス
ens33  60a09814-af79-47a5-ae0d-13343cece826  802-3-ethernet  ens33
[root@centos7-test ~]#
[root@centos7-test ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.73.128  netmask 255.255.255.0  broadcast 192.168.73.255
        inet6 fe80::acce:30a:aeae:c827  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b3:ba:8d  txqueuelen 1000  (Ethernet)
        RX packets 141292  bytes 176581363 (168.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14162  bytes 1055357 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

5. LVMの情報を確認する
LVMの設定を確認する。

``` bash:LVM
[root@centos7-test ~]# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  19.00g    0
[root@centos7-test ~]# vgs
  VG #PV #LV #SN Attr   VSize  VFree
  cl   1   2   0 wz--n- 19.00g    0
[root@centos7-test ~]# lvs
  LV   VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root cl -wi-ao---- 17.00g
  swap cl -wi-ao----  2.00g

[root@centos7-test ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                KIw9TR-esGm-xTWI-Kgcl-TbKe-2jx6-BMRJu4
  LV Write Access        read/write
  LV Creation host, time centos7-test, 2017-04-07 23:48:59 +0900
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                4nARO4-DXwy-d8w0-UbnN-X49G-4RdC-nJZcec
  LV Write Access        read/write
  LV Creation host, time centos7-test, 2017-04-07 23:48:59 +0900
  LV Status              available
  # open                 1
  LV Size                17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
```
6. LVMのバックアップ
LVMの定義をエクスポートする

``` bash:lvm2
[root@centos7-test ~]# vgcfgbackup -f /mnt/lvm_cfg.txt
  Volume group "cl" successfully backed up.
```

# バックアップの取得
```
[root@centos7-test ~]# df
ファイルシス                 1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/cl-root             17811456 1537508 16273948    9% /
devtmpfs                          488964       0   488964    0% /dev
tmpfs                             499968       0   499968    0% /dev/shm
tmpfs                             499968   13120   486848    3% /run
tmpfs                             499968       0   499968    0% /sys/fs/cgroup
/dev/sda1                        1038336  169684   868652   17% /boot
192.168.73.129:/home    18555904 3954176 14601728   22% /mnt
tmpfs                              99996       0    99996    0% /run/user/0
```
→ tmpfsは無視して、boot(/dev/sda1) /dev/mapper/cl-root(/)をバックアップする。
本来であればシングルユーザモードに落としてdumpを実行するべきだが
バックアップ対象にDBサーバ等はいないので、このまま実行する。
## dumpの実行
```
[root@centos7-test ~]# xfsdump -l0 - /dev/sda1 | gzip -9 > /mnt/sda1.dump
[root@centos7-test ~]# xfsdump -l0 - /dev/mapper/cl-root | gzip -9 > /mnt/cl-root.dump
```


#リストア
リストア前にせっかくなので rm -rf / を実行して正常に起動できない状態に
してからリストア操作を実行。

1. レスキューモードでサーバを起動する
2. IPアドレスを付与する

```
nmcli c mod ens33 ipv4.method manual ipv4.address "192.168.73.128/24" ipv4.gateway "GWIPADDR"

```
３. ディスクパーティションの作成

```
# sfdisk /dev/sda < /mnt/sfdisk_dump.txt
```

４. 物理ボリュームの作成
UUIDには/mnt/lvm_cfg.txtファイルの中を確認しUUIDを入力する。

```
# pvcreate --uuid 8SYMJe-OfPR-fYqX-ir9k-FKmM-HeL8-L7FUHu --restorefile /mnt/lvm_cfg.txt
```

5.LVM構成のリストア

```
vgcfgrestore -f /mnt/lvm_cfg.txt cl
vgchange -ay cl
```

6.ファイルシステムの作成

```
■bootパーティション
mkfs.xfs -f /dev/sda1
xfs_admin -U 32066488-6586-4913-8cf7-bbcfd737f657 /dev/sda1

■/パーティション（LVM)
mkfs.xfs -f /dev/mapper/cl-root

■swap
mkswap -U KIw9TR-esGm-xTWI-Kgcl-TbKe-2jx6-BMRJu4 /dev/mapper/cl-swap
```

７. restore

```
mkdir /mnt/boot
mkdir /mnt/root
mount /dev/sda1 /mnt/boot
mount /dev/mapper/cl-root /mnt/root
zcat /mnt/sda1.dump | xfsrestore - /mnt/boot
zcat /mnt/cl-root.dump | xfsrestore - /mnt/root
```

8.ブートローダーの導入
```
grub2-install --boot-directory /mnt/boot /dev/sda
```



9.サーバの再起動
サーバの再起動を実行し、正常に起動されることを確認する。