タイガーラック クリエイティブブログ
2024
October
17

【Linux】dumpコマンドによるCentOSのバックアップ・リストア方法

今回はLinuxのdumpコマンドを使ったバックアップとリストアの方法について説明していきます。
尚、今回の説明はファイルシステムがext4の場合のものになります。
xfsの場合は下記のやり方とは差異が発生するので注意してください。

環境

  • さくらのVPS
  • サーバー2台
  • CentOS Linux 7
サーバー名役割設定IP
サーバーAバックアップの作成・リストア(NFSクライアント)192.168.1.2
サーバーBバックアップの保存先(NFSサーバー)192.168.1.1

という形で扱っていきます。
また、2台のVPSは以前説明したスイッチ接続とNFSを設定して接続しています。

NFSの接続

NFSの基本設定は以前の記事を参照してください。

NFSサーバーの設定

サーバーBの操作になります。

mkdir /backup
vi /etc/exports

公開ディレクトリを作成し、公開設定を編集します。
今回は/backupというディレクトリを作成し、その中にサーバーAのバックアップデータを保存していきます。

/backup 192.168.1.2/24(rw,async,no_root_squash)

/etc/exportsの中に/backupの公開設定を記入します。

exportfs -rv

公開ディレクトリ設定を反映させます。

NFSクライアントの設定

サーバーAの操作になります。

mkdir /mnt/nfs
mount -v -t nfs 192.168.1.1:/backup /mnt/nfs

マウント先のディレクトリを作成し、サーバーBの/backupをマウントします。
接続できない場合はサーバーBのifg-cfgやfirewallの設定を確認してみてください。

バックアップ

以下のコマンドは全てサーバーAで行います。

パッケージのインストール

yum -y install dump gdisk

dumpgdiskのパッケージがインストールされていない場合はインストールしておきます。

パーティション・ボリューム情報の取得

gdisk -l /dev/vda > /mnt/nfs/`hostname`_gdisk
df -T > /mnt/nfs/`hostname`_df
pvdisplay > /mnt/nfs/`hostname`_pv
lvdisplay > /mnt/nfs/`hostname`_lv
vgdisplay > /mnt/nfs/`hostname`_vg

パーティションやボリュームの情報を取得し、NFSを通してサーバーBに保存します。

dumpファイルの取得

dump 0 -f /mnt/nfs/vda2_boot.dump /dev/vda2
dump 0 -f /mnt/nfs/vda4_root.dump /dev/vda4

dumpコマンドでbootrootパーティションのバックアップを取得し、サーバーBに保存します。

cd /
umount /mnt/nfs

バックアップを保存し終わったらNFSを切断します。

リストア

レスキューモードの起動

リストアを行うためにはLinuxのレスキューモードを起動して作業する必要があります。

さくらのVPSでレスキューモードを開始するには、まずブラウザからサーバーAの設定画面を開き、上部にある『OS再インストール』を選択します。

OSインストール方法は『ISOイメージ』、インストールするOSは一覧から『CentOS7 x86_64』を選択します。

ネットワーク接続を保持するかは必ず『接続先を保持』を選択します。
NFSの接続にスイッチ接続を利用しているため、接続先を初期化してしまうとバックアップを保存したサーバーBへの接続ができなくなってしまいます。

設定が終わったら『内容確認』を選択し、VNCコンソールを起動します。

VNCコンソール内にメニュー画面が表示されたらまず『Troubleshooting』を選択し、
次に表示されるメニューから『Rescue a CentOS system』を選択します。
それから暫くすればレスキューモードが起動します。

レスキューモードの設定

レスキューモード

レスキューモードが起動するとまずディスクマウントの選択肢が表示されるので、
3を入力し『Skip to shell』を選択します。
するとキー入力を受け付ける状態になります。

localectl set-keymap jp106
ip a add 192.168.1.2/16 dev eth1

レスキューモードの初期状態ではキーボード配列が英語のものになっているので、
localectl set-keymap jp106と入力し日本語キーボード配列に変更します。
その後、ip a add 192.168.1.2/16 dev eth1でeth1にスイッチ接続しているIPを再設定します。

パーティションの再作成

gdisk /dev/vda

gdiskを起動し、バックアップの際にサーバーBへ保存した[ホスト名]_gdiskのファイル内容を元に、
バックアップ時と同じパーティションを再作成します。

mkfs.ext4 /dev/vda2
mkfs.ext4 /dev/vda3
mkfs.ext4 /dev/vda4

パーティションの作成が終わったらboot以外のパーティションにファイルシステムを作成します。

バックアップデータのリストア

mount -t nfs 192.168.1.1:/backup /mnt

サーバーBの/backup/mntにマウントします。

mkdir /restore
mount -t ext4 /dev/vda4 /restore
cd /restore
restore -rf /mnt/vda4_root.dump

/restoreというディレクトリを作成し、/dev/vda4/restoreにマウント、/restore内にサーバーBに保存しているrootパーティションのデータをrestoreコマンドにより復元します。
これにより/dev/vda4内にバックアップデータが復元されます。

mount -t ext4 /dev/vda2 /restore/boot
cd /restore/boot
restore -rf /mnt/vda2_boot.dump

/dev/vda2/restore/bootにマウントし、bootのパーティションのデータをrestoreコマンドで復元します。

システム設定の修正

mount --bind /dev /restore/dev
mount --bind /proc /restore/proc
mount --bind /sys /restore/sys
chroot /restore
vi /etc/fstab

システムファイル類を/restore内にマウントし、rootディレクトリを/restoreに変更します。
その後、/etc/fstabを開きシステムファイル情報を書き換えます。

/dev/vda4 /ext4 defaults 1 1
/dev/vda2 /boot ext4 defaults 1 2
/dev/vda3 /swap swap defaults 0 0

第一フィールドがUUID=という形式で書かれている場合、該当するパーティションに書き換えます。ここで記入されているUUIDはバックアップデータのUUIDの為、そのままだと正しくマウントポイントが設定されません。

grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/vda

grub2-mkconfigコマンドによりGRUB2というブートローダーの設定ファイルを専用のコマンドで更新します。
その後grub2-install /dev/vdaにより、MBRにブートローダーをインストールします。

exit
exit

ブートローダーのインストールが終わったらレスキューブートを終了するためにexitを2回入力します。(一度目はchrootに対するexit)

レスキューブートが終了した時点でVPSが停止するので、
起動し直した後、ssh接続し各種データが復旧していることが確認できればリストア完了になります。

終わりに

バックアップとリストアの方法について調べてみた所、Mondo Rescueというツールが人気のようなのですが、使ってみた所カーネルパニックが発生してリカバリが出来なかったので、今回はdumpを使ったバックアップとリストアを紹介しました。

私と同様にMondo Rescueが使用できないという方やあまり色々なパッケージのインストールをしたくないという方は参考にしてみてはいかがでしょうか。

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.