今回はOS領域を含むディスクを空のディスクにddでバックアップを取得し、
ddでの同一VMへのリストアを試してみました。
試験環境はUEFIブートでLVMの構成ですが、ddはデバイス単位でデータをイメージ化するので、
BIOSブートでも非LVM構成でも関係無くバックアップ/リストアが出来ます。
ディスク全体(空の領域含む)のバックアップなので、バックアップのサイズはxfsdumpよりも大き目になります。
1.ディスク構成
/dev/sda:OS領域含むディスク(UEFIブート:LVM)
/dev/sda1 2048 616447 614400 300M EFI System
/dev/sda2 616448 2713599 2097152 1G Linux filesystem
/dev/sda3 2713600 11102207 8388608 4G Linux swap
/dev/sda4 11102208 41940991 30838784 14.7G Linux LVM
/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: 5BDCB5EC-63A3-4E2E-A675-037C02A02A90
Device Start End Sectors Size Type
/dev/sda1 2048 616447 614400 300M EFI System
/dev/sda2 616448 2713599 2097152 1G Linux filesystem
/dev/sda3 2713600 11102207 8388608 4G Linux swap
/dev/sda4 11102208 41940991 30838784 14.7G Linux LVM
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
Disk /dev/mapper/cl-root: 14.7 GiB, 15787360256 bytes, 30834688 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
/dev/sdbをxfsでフォーマットします。
# 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
マウント用のディレクトリ/mnt/backupを作成
# mkdir /mnt/backup
/dev/sdbのマウント
# 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 17M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root 15G 9.4G 5.3G 64% /
/dev/sda2 976M 137M 773M 16% /boot
/dev/sda1 300M 6.8M 294M 3% /boot/efi
tmpfs 378M 0 378M 0% /run/user/0
/dev/sdb 10G 104M 9.9G 2% /mnt/backup
アンマウント
# umount /mnt/backup
2-2.ボリューム構成情報のバックアップ
下記コマンドで取得して端末にDLして下さい。
LANG=C fdisk -l > /tmp/`hostname`_fdisk.txt
LANG=C df -T > /tmp/`hostname`_df.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
ddでOS領域含むディスク(/dev/sda)のバックアップ
dd if=/dev/sda bs=64k status=progress | gzip -c > /backup/sda.ddimg.gz
(仮想20GBで約10分)
バックアップファイルの確認
ls -la /backup
(約8GBのファイルが出来上がっていました)
レスキューモードを終了
exit
再起動かかる
サーバ起動後に確認用のファイルを作成
touch /root/test.txt
4.リストア
インストール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
ddでOS領域含むディスク(/dev/sda)をリストア
gunzip -c /backup/sda.ddimg.gz | dd of=/dev/sda bs=64k status=progress
(仮想20GBで約5分)
レスキューモードを終了
exit
再起動かかる
サーバ起動後に確認用のファイルが無いことを確認
ls -la /root/test.txt
5.まとめ
ddではディスクをパーティション含めて丸ごとバックアップ出来るので、
同じ筐体に戻す際にはUUIDなどの編集も必要無く簡単にリストアできます。
ファイルシステム単位でのxfsdump/restoreと比較すると操作量も少なくて済みますのでお勧めです。