はじめに
Qiita初投稿です。自分はSEになってまだ3年目のぺーぺーですが、新しい案件で環境構築を任されシステムバックアップの実装もするよう言われました。その際、CentOS7 での復旧手順で地獄を見たので備忘録として残しておきます。誰かの役に立ちますように。
環境
-
バックアップサーバ
Western Digital製 HDD 3TB
CentOS7.6
レガシーBIOSのみ
IP:192.168.56.10 -
バックアップ対象サーバ
Western Digital製 HDD 3TB
CentOS7.6
UEFI対応
IP:192.168.56.1 -
リストアサーバ
Western Digital製 HDD 3TB
IP:192.168.56.1
前提
- HDD1枚のため、デバイス名は
/dev/sda
とします。 - CentOS7.6のイメージディスク使用。
- バックアップ対象サーバとリストアサーバは同じ筐体を使用。
今回のバックアップ、リストアはレガシーBIOSでブートする場合になります。
UEFIでのリストアはまだ上手くいっていません。。。いつか上げられたら嬉しいです。
手順
-
NFSサーバの設定
まずはバックアップを取るためにNFSサーバ・クライアントの設定します。以下のサイトを参考に構築していきます。参考サイト
CentOS7.1 NFSサーバ、クライアントの設定
NFS サーバ/クライアント設定メモ(CentOS7.1.1503)NFSサービスのインストール
# yum -y install nfs-utils
エクスポートポイント(NFS用の共有)設定。
今回は、 /backup というディレクトリを誰でも触れるようにしている
アクセスできるIPアドレスを設定したい場合は、* のところにIPを設定する。# vi /etc/exports /backup *(rw,async,no_root_squash)
サービスを起動して有効化
以下の2つはOS起動時に自動的に有効にするコマンド# systemctl start rpcbind # systemctl start nfs-server # systemctl enable rpcbind # systemctl enable nfs-server
ここからはNFSクライアントの設定
マウントポイントを作成
# mkdir /mnt/nfs
サービスを起動して有効化
# systemctl start rpcbind
ポート 2049 の TCP/UDP を許可
# firewall-cmd --add-port=2049/tcp --permanent # firewall-cmd --add-port=2049/udp --permanent
設定を読込み
# firewall-cmd --reload
設定を確認(以下の表示があればOK)
# firewall-cmd --list-all ports: 2049/tcp 2049/udp
NFSv4でマウント
# mount -t nfs [サーバ側のIPアドレス]:/backup /mnt/nfs
※NFSv3とNFSv4の違いは、IPの指定ができる点。その他諸々。
以下、参考サイト
知っておきたいNFSの基本と活用法 -
バックアップ対象サーバのバックアップ実行
参考サイト
Linuxシステムバックアップの基本:dump と restore コマンドによるシステムリカバリの方法を今更ながら解説(Linux)
Linux システムバックアップリストア(xfs dump restoreおよびUEFI)2-1. 必要なパッケージのインストール
CentOSの場合、dumpコマンドが標準インストールされていないため、パッケージをインストール
また、この後使うディスク情報を取るコマンドで、足りないものがあったのでそれもインストールする。# yum -y install dump # yum -y install lvm2 (lvm系のコマンドのインストール)
2-2. ディスク情報の出力
バックアップ対象サーバーのディスク情報をファイルに出力。後でパーテーションの復旧等に使用。# LANG=C fdisk -l > /tmp/`hostname`_fdisk.txt # LANG=C df -T > /tmp/`hostname`_df.txt # LANG=C pvdisplay > /tmp/`hostname`_pv.txt # LANG=C vgdisplay > /tmp/`hostname`_vg.txt # LANG=C lvdisplay > /tmp/`hostname`_lv.txt
2-3. ダンプの実行
バックアップ対象サーバのマウントポイントごとに、ダンプする。
今回は、/および、/bootをバックアップ対象とし、tmpfsは、バックアップ対象外とする。# dump -f /mnt/nfs/sda2_boot.dump /dev/sda2 (/boot のパーテーション) # dump -f /mnt/nfs/sda5_root.dump /dev/sda5 (/ のパーテーション)
ダンプが終了すると、NFSマウントしたマウント先にダンプファイルが出力されるので、NFSマウントを解除。
# umount /mnt/nfs
-
先ほど取ったバックアップを空のHDDに復旧させる(リストアの実行)
ダンプ終了後、CentOSのインストールCDのレスキューモードを使用してリストア対象サーバにリストアを行う。
なお、リストア対象サーバは、OSがインストールされていない新規サーバとしている。3-1. レスキューモード起動
CentOSのインストールCDを用いて、リストア対象サーバを起動。
ブートメニューが表示されたら、Troubleshooting
->Rescue a CentOS system
の順で選択する。
しばらく待っていると、1~4番のメニューを選択する画面になるので、3を入力。3-2. 初期設定
キーボードが変だったり、IPが設定されていなかったりするので設定する。# localectl set-keymap jp106 # ip a add [設定したいIP]/[ネットマスク] dev [ネットワークデバイス名] 例) # ip a add 192.168.56.1/16 dev eno1
3-3. パーティション作成
新規のHDDに、パーティションを作成。
自分の環境では、sda1からsda7までパーテーションを作成し、sda1にブートフラグを設定している。
設定完了後、パーティションタイプも変更。
設定の仕方は参考サイトにも書いてある。ちなみに今回は間違ってfdiskでやってしまいましたが特に問題はありませんでした。
しかし、2TBを超える場合はgdiskコマンドで設定をしましょう。# fdisk /dev/sda ・ ・ ・ ★パーティション作成後 # mkfs.ext4 /dev/sda2 # mkfs.ext4 /dev/sda3 # mkfs.ext4 /dev/sda4 # mkfs.ext4 /dev/sda5 # mkfs.ext4 /dev/sda7
3-4. リストアの実行
まず、リストアを実行する前に、バックアップイメージを置いたバックアップサーバのNFS領域をマウント。# mount -t nfs [バックアップサーバのIP]:[NFS領域] /mnt 例) # mount -t nfs 192.168.56.10:/backup /mnt
そのままリストアすることは出来ないので、ルートディレクトリをリストアするディレクトリを作成。
次に、ルートディレクトリをマウントさせていたデバイスをマウント。
この後、/bootも同様の操作を行う。# mkdir /restore # mount -t ext4 /dev/sda5 /restore # cd /restore # restore -rf /mnt/sda5_root.dump ★ここからboot # mount -t ext4 /dev/sda2 /restore/boot # cd /restore/boot # restore -rf /mnt/sda2_boot.dump
3-5. chroot環境への移行
リストアのマウントポイントを仮想ルートディレクトリに設定。★chrootした先でboot配下等見れるようにする # mount --bind /dev /restore/dev # mount --bind /proc /restore/proc # mount --bind /sys /restore/sys # chroot /restore
-
現在のHDDの環境合わせる
前のサーバの情報(主にUUID)がそのまま設定されているままなので修正していく。
4-1. fstabの修正
UUIDが設定されていると思うので、対応するデバイス名に変更。
バックアップ対象サーバで、dfすればで見れる。
※UUIDは適当に変更しましたので気にしないでください。イメージです。# vi /etc/fstab ★変更前 UUID=11111111-2222-3333-4444-555555555555 / ext4 defaults 1 1 UUID=11111111-2222-3333-4444-555555555555 /backup ext4 defaults 1 2 UUID=11111111-2222-3333-4444-555555555555 /boot ext4 defaults 1 2 UUID=11111111-2222-3333-4444-555555555555 /home ext4 defaults 1 2 UUID=11111111-2222-3333-4444-555555555555 /home/tomatoma ext4 defaults 1 2 UUID=11111111-2222-3333-4444-555555555555 swap swap defaults 0 0 ★変更後 /dev/sda5 / ext4 defaults 1 1 /dev/sda7 /backup ext4 defaults 1 2 /dev/sda2 /boot ext4 defaults 1 2 /dev/sda3 /home ext4 defaults 1 2 /dev/sda4 /home/tomatoma ext4 defaults 1 2 /dev/sda6 swap swap defaults 0 0
4-2. ネットワークインターフェースの修正
/etc/sysconfig/network-scripts/[ネットワークインターフェース名] にも古いUUIDが設定されているので、nmcli コマンドを使用して現在のUUIDを調べる。あとは頑張って修正。
※UUIDは適当に変更しましたので気にしないでください。イメージです。# nmcli connection show NAME UUID TYPE DEVICE eno1 123456768-1234-5678-1234-1234567890ab ethernet eno1
4-2. grub.cfgの修正
grub2ブート設定(/boot/grub2/grub.cfg)にも、古いパーティションへのUUIDが定義されているので再作成し直す。
直接編集は推奨されていないため、専用のコマンドを使用。# grub2-mkconfig -o /boot/grub2/grub.cfg
4-3. mbrにブートローダ(bootのシステム的な) のインストール 超重要
これ忘れていたせいで数時間嵌ってしまいました。詳しいことは長くなるので調べてもらえたら幸いです。# grub2-install /dev/sda
4-4. 再起動
chrootを終了し、レスキューモードからも抜けます。★chrootを終了 # exit ★レスキューモードを終了 # exit
まとめ
以上で手順は終わりです。手探りの中見つけた方法にはなるので、もしかしたら動かないよ!!!
みたいな人もいるかもしれません。また、この手順も必要じゃない?みたいなのもあるかもしれません。
もしそういった意見がありましたら是非教えて頂けたら幸いです。
ありがとうございました。