概要
ファイルシステムにxfsを利用し、UEFI起動している場合のシステムバックアップとリストア方法
参考
http://chidipy.jpn.com/server/other/xfs_efi_backuprestore.html
注意
https://bugzilla.redhat.com/show_bug.cgi?id=1405285
xfsdump にバグがあるので注意。
正常にバックアップが完了したように見えても、xfsresotre時にエラーになることがある。
デバイス指定よりもマウントポイントを指定するほうが良い。
デバイスを指定した場合、bind でマウントされていたりするとbind先をバックアップしようとする。
バックアップ
手順
- バックアップ情報の保存
- efi情報の保存
- fstabの保存
- labelの収集
- パーティッション情報の収集(LVM含むj)
- バックアップ
バックアップ情報の保存
efi情報の保存
efibootmgr -v > efibootmgr.txt
fstabの保存
cp /etc/fstab /mnt/backup/
ラベル情報
lsblk -f > lsblk.txt
パーティッション情報の保存
fdisk -l /dev/sda > /mnt/backup/fdisk_sda.txt gdisk -l /dev/sda > /mnt/backup/gdisk_sda.txt
または
sfdisk -d /dev/hda > /mnt/backup/hda_info.txt ※リストア時に /sbin/sfdisk /dev/hda < hda.info で復元可
LVM情報の保存
pvdisplay > /mnt/backup/pv_info.txt vgdisplay > /mnt/backup/vg_info.txt lvdisplay > /mnt/backup/lv_info.txt
または
vgdisplay -v > /mnt/backup/lvm_info.txt
バックアップ
UEFIで使用するファイルのバックアップ
sync #念のため cd /boot/efi tar -C /boot/efi -cf バックアップ先/boot_efi.tar .
xfsdump -l0 -e - /boot 2>>/mnt/backup/backup.log | gzip -c > /mnt/backup/boot.dump xfsdump -l0 -e - / 2>>/mnt/backup/backup.log | gzip -c > /mnt/backup/root.dump
シングルモードの方がいいけど、そこまで神経質にならなくても良いと思います。
LVMのスナップショット機能を組み合わせてもいいと思う。
リストア
ディスクを交換せずにデータを戻すだけの場合は、データリストア以外の手順は省略して良い。
手順
- パーティッション復元
- データのリストア
- ラベル復元
- efi復元
- SELinux用の情報を付け直し
キーボードレイアウト設定
キーボードのレイアウトがおかしい場合
localectl set-keymap jp106
パーティッションの復元
fdisk /dev/sda
または
gdisk /dev/sda
または
/sbin/sfdisk /dev/hda < hda.info
でパーティッションを作る。
LVM復元
VG、LVを同じ名前で再作成
LVM
基本的に
lvm pvcreate <デバイス> lvm vgcreate <vg名> <pvデバイスファイル> lvm lvcreate --size <lv容量> --name <lv名> <VG名>
を使う。
フォーマット
UEFI用のファイルシステムをFAT32で作成
mkfs.vfat -v -c -F32 -s2 -n ラベル -i <<UUID>> /dev/sda1
-i はUUIDを指定する。ハイフンは不要。 UUIDを再作成する場合は -i は不要。
XFSのフォーマット
mkfs.xfs -f -m uuid=<<UUID>> -L ラベル /dev/sda2
ラベルの指定やUUIDを再作成する場合
mkfs.xfs /dev/sda2 mkfs.xfs /dev/mapper/centos-root
UUID設定(フォーマット時に指定しなかった場合)
基本的にフォーマット時に指定する。
以下のコマンドで再設定できるが、フォーマット後にUUIDを変更すると以下のUEFIの再設定をしても起動できないことがある。
xfs_admin -U <<UUID>>
ラベル復元(フォーマット時に指定しなかった場合)
XFS
xfs_admin -L <label> /dev/XXX
VFAT
fatlabel /dev/XXX <label>
ブートフラグを立てる
parted /dev/sda p set 1 boot on
この「1」はパーティション番号。pの結果からブートフラグを立てるパーティションを指定する。
データのリストア
リストア先をマウントしてからxfsrestoreでリストア。
zcat /mnt/boot.dump | xfsrestore - /mnt/boot zcat /mnt/root.dump | xfsrestore - /mnt/root sync
UEFIのデータリストア
mount /dev/sda1 /mnt/efi cd /mnt/efi tar xf /mnt/backup/boot_efi.tar
スワップ領域
mkswap /dev/mapper/centos-swap
ラベルを付ける場合
mkswap -L ラベル /dev/mapper/centos-swap
fstab編集
ルートのデバイスをマウントして /etc/fstab を編集する
mount /dev/mapper/centos-root /mnt/root vi /mnt/root/etc/fstab
ディスクを変更したり、パーティションを作り直した場合、UUIDが変わっているのでUUIDを
lsblk -f
の結果に合わせて書き換える。
面倒な場合は
/dev/mapper/centos-root / xfs defaults 0 0 /dev/sda2 /boot xfs defaults 0 0 /dev/sda1 /boot/efi vfat umask=0077,shortname=winnt 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
のようにUUIDではなく、デバイス名に書き換えても良い。
OS起動後にUUIDに戻してもいいし、LABELの運用にしてもよい。
ラベルを使用する場合はファイルシステムのラベル変更を参考にデバイスにラベルを設定する。
UEFIブート設定(UUIDを再作成した場合)
UUIDが変更した場合は、UEFIブートの設定を変更する。
efibootmgr -v #起動順の参照 BootCurrent: 0000 Timeout: 1 seconds BootOrder: 0000,0001 Boot0000* CentOS HD(1,800,64000,7e44aa01-f593-4ce4-8ec8-b3afba558cfc)File(\EFI\CENTOS\SHIM.EFI) Boot0001* UEFI OS HD(1,800,64000,7e44aa01-f593-4ce4-8ec8-b3afba558cfc)File(\EFI\BOOT\BOOTX64.EFI) # efibootmgr -b 1 -B # 削除 # efibootmgr -b 0 -B # 削除
-b はbootnum を指定。 -B は--delete-bootnum。
起動順登録
efibootmgr -c -d /dev/sda -p 1 -l '\EFI\centos\shimx64.efi' -L 'CentOS'
- -dはディスクのデバイスファイルパス
- -pは/boot/efiのパーティション番号
- -lはファイルシステム内のブートローダファイルへのパス
Boot0000* CentOS HD(1,GPT,185b5b92-638c-410a-9718-f5d29b8c22d6,0x800,0x64000)/File(\EFI\centos\shimx64.efi)
こんな感じに登録される。
efibootmgr -o 0000
のように起動順を指定する。
grup2ブート設定ファイル再作成(UUIDを再作成した場合)
chroot後に設定する。
chroot /mnt/sysimage
/boot/efi/EFI/centos/grub.cfgにも古いUUIDが指定されているので再作成する
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
初期RAMディスク再作成(UUIDを再作成した場合)
古いディスクを探しに行くので再作成。これもchroot後に実行。
cd /boot mv initramfs-3.10.0-693.el7.x86_64.img initramfs-3.10.0-693.el7.x86_64.img.old # dracut -f initramfs-3.10.0-693.el7.x86_64.img 3.10.0-693.el7.x86_64
3.10.0-693.el7.x86_64は環境やカーネルのバージョンにより変わる。
ディスク同期
sync;sync;sync
好きなように・・・。
dumpの除外について
http://www.walbrix.com/jp/blog/2008-12-dumpxfsdump.html
d 属性がついているファイルやディレクトリは dumpや xfsdump によるダンプ時に除外することが出来る。
ファイルに d属性を付けるには、
chattr +d ファイル名
とする。
xfsdumpの場合は -e オプション指定時、dumpの場合はインクリメンタルバックアップ時又は -h 0 オプションの指定時に d属性のファイルがスキップされる。
下記は、ホームディレクトリ以下で 100MB以上の大きさのファイルはバックアップ対象外にする例。
find /home -size +100M -exec chattr +d {} \;
[カテゴリ: OS > Linux]
[通知用URL]
Tweet
最終更新時間:2017年12月27日 01時03分01秒