(参考URL)
https://chidipy.jpn.com/server/other/xfs_efi_backuprestore.html
今回はOS領域を含むディスクを空のディスクにxfsdumpでバックアップを取得し、
xfsrestoreで同一VMへのリストアを試してみました。
xfsrestoreではdump後に作成されたファイルは残ってしまいますので、
dump前に確認用ファイルを作成し、dump後に削除する手順としました。
1.ディスク構成
/dev/sda:OS領域含むディスク(UEFIブート:Standard Partition)
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 3905535 1951744 953M Linux filesystem
/dev/sda3 3905536 11716607 7811072 3.7G Linux swap
/dev/sda4 11716608 41940991 30224384 14.4G Linux filesystem
/dev/sdb:空のディスク
2.事前作業
2-1.空のディスク/dev/sdbをxfsでフォーマットしてマウントテストします。
# fdisk -l
Disk /dev/sda: 20 GiB, 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
Disklabel type: gpt
Disk identifier: A5C77C76-8D82-4733-8279-D47E103BAC4C
Device Start End Sectors Size Type
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 3905535 1951744 953M Linux filesystem
/dev/sda3 3905536 11716607 7811072 3.7G Linux swap
/dev/sda4 11716608 41940991 30224384 14.4G Linux filesystem
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
# mkfs -t xfs /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2621440, 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
# mkdir /mnt/backup
# mount /dev/sdb /mnt/backup
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda4 15G 1.4G 14G 10% /
/dev/sda2 947M 165M 783M 18% /boot
/dev/sda1 952M 6.8M 945M 1% /boot/efi
tmpfs 378M 0 378M 0% /run/user/0
/dev/sdb 10G 104M 9.9G 2% /mnt/backup
2-2.ボリューム構成情報のバックアップ
下記コマンドで取得して端末にDLして下さい。
LANG=C fdisk -l > /tmp/`hostname`_fdisk.txt
LANG=C df -T > /tmp/`hostname`_df.txt
LANG=C blkid > /tmp/`hostname`_blkid.txt
2-3.確認用のファイルを作成
touch /root/test.txt
2-4.xfsdumpのインストール
yum install xfsdump
Downloading Packages:
(1/2): attr-2.4.48-3.el8.x86_64.rpm 634 kB/s | 68 kB 00:00
(2/2): xfsdump-3.1.8-2.el8.x86_64.rpm 1.6 MB/s | 332 kB 00:00
2-5.UEFI領域のバックアップ
UEFI領域のバックアップはtarコマンドで取得します(ファイルシステムがvfatなので)
tar -cvf /mnt/backup/boot_efi.tar /boot/efi
2-6.xfsdumpでOSディスクのバックアップ
xfsdump -l0 - /dev/sda2 | gzip -c > /mnt/backup/sda2.boot.dump.gz
xfsdump -l0 - /dev/sda4 | gzip -c > /mnt/backup/sda4.root.dump.gz
xfsdump: Dump Status: SUCCESS
(仮想15GB:約1分)
2-7.確認用ファイルの削除
rm /root/test.txt
3.リストア
インストールCDからブートする(rescueモード)
TroubleShooting -> Rescue a CentOS Linux system を選択
ファイルシステムを/mnt/sysiamge以下にマウントするか?を聞かれるが、マウントしない。「skip:3」を選択
キーボードを日本語配列にする
localectl set-keymap jp106
ディスク情報の確認
fdisk -l | more
バックアップ用ディレクトリ作成
mkdir /backup
バックアップ用ディレクトリに空のディスク(/dev/sdb)をマウント
mount /dev/sdb /backup
マウントされたことを確認
df -h
リストア
一番最初に復旧させる/にマウントするファイルシステムを/restoreにマウントしリストアする。
その後、復旧させる/bootなどにマウントするファイルシステムを
/restore/boot(/をリストアことによって復活している)マウントしてリストアする。他も同様に順にリストアする。
mkdir /restore
mount -t xfs /dev/sda4 /restore
cd /restore
gzip -dc /backup/sda4.root.gz | xfsrestore - ./
(16sec)
mount -t xfs /dev/sda2 /restore/boot
cd /restore/boot
gzip -dc /backup/sda2.boot.dump.gz | xfsrestore - ./
mount -t vfat /dev/sda1 /restore/boot/efi
cd /restore
tar -xvf /backup/boot_efi.tar
sync;sync;sync
ブート設定準備
mount -t proc proc /restore/proc
mount --bind /dev /restore/dev
mount -t sysfs sysfs /restore/sys
リストア先パスにchrootする
chroot /restore
grub2ブート設定ファイルの再作成
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
同期
sync;sync;sync
レスキューモードを終了
exit
サーバ起動後に確認用のファイルが存在することを確認
ls -la /root/test.txt
5.まとめ
xfsrestoreではdump後に作成されたファイルは残ってしまいますので、
dump前に確認用ファイルを作成し、dump後に削除する手順としました。
xfsrestoreでもバックアップ後のファイルを残さない方法を調べようと思います。