- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!概要
ファイルシステムに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 - /dev/sda2 2>>/mnt/backup/backup.log | gzip -c > /mnt/backup/sda2.dump
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/sda1.dump | xfsrestore - /mnt/boot
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 {} \;
{{category2 OS,Linux}}