OSのバックアップ・リストアツールReaR(4): PXEを利用したOSのクローン

PXEブートによるバックアップリカバリー Relax-and-Recover

ReaR (Relax-and-Recover)のバックアップ・リカバリーの方法として、PXEブートを利用したバックアップ・リカバリーの方法を説明します。複雑な処理になりますが、DVD-ROMやUSBフラッシュメモリを使わないメリットがありますし、1台のサーバにインストールしたOS環境を多数台のサーバに複製(クローン)する作業にも応用ができます。多数台のサーバを構築するSEさんには、とっても役に立つ方法です。

PXEブートって何?

PXEブート (Preboot eXecution Environment boot) とは、ネットワーク経由でOSを起動する仕組みです。詳細はぜひ、「犬でも分かるPXEブート」シリーズをご参照ください。

ReaRにおけるPXEブートの処理

ReaRにおいてPXEブートで起動するOS(ネットワーク経由で起動するOS)は、レスキュー用OSとかレスキューイメージとか呼ばれるものです。これはメモリ上で稼働するOSで、ReaRのリカバリー処理をするために必要な機能、すなわちシステムを救う(レスキュー)機能が組みこまれています。
レスキュー用OSが起動したら、ReaRのリカバリー機能が、バックアップファイルの中身をストレージに展開して、それが完了したら、ストレージにリカバリーしたOSから起動すれば、システムは元通りってことです。

PXEブートでリカバリー可能なバックアップを作成する

/etc/rear/local.conf の設定

PXEブートでリカバリー可能なバックアップを作成するための ReaRの設定例 (/etc/rear/local.conf)は以下の通りです。

OUTPUT=PXE
PXE_CONFIG_URL=nfs://192.168.2.200/export/rear_backup/tftp
PXE_TFTP_URL=nfs://192.168.2.200/export/rear_backup/tftp
PXE_CONFIG_GRUB_STYLE=y
PXE_TFTP_IP=192.168.2.203
USING_UEFI_BOOTLOADER=yes
BACKUP=NETFS
BACKUP_URL=nfs://192.168.2.200/export/rear_backup
BACKUP_RESTORE_MOVE_AWAY_FILES=( )

OUTPUT変数には PXE を指定して下さい。

PXEブートでリカバリー可能なバックアップを作成するということは、システムのバックアップ本体 backup.tar.gz の他に、レスキュー用OSのカーネルとRAMイメージも作成する必要があります。加えて、ReaRのバックアップ機能は、PXEブートで仕様するgrub.cfgファイルのひな型も生成してくれます。

上記の設定で、192.168.2.200 は私の環境におけるNFSサーバのIPアドレスです。また、192.168.2.203 はTFTPサーバが稼働しているサーバ(仮想マシン)のIPアドレスです。

BACKUP_URL は、backup.tar.gz を格納するディレクトリのURLを指定します。nfs://192.168.2.200/export/rear_backup と指定しているので、このNFSサーバの/export/rear_backup/ ディレクトリをバックアップ時に自動的にマウントしてくれます。もちろん、NFSサーバ側では、/export/rear_backup/をexport しておくことと、バックアップ対象のサーバで/export/rear_backup/ というマウントポイントを作成しておくことを忘れてはいけません。私のNFSサーバでは以下の内容を /etc/exports に定義しています。

/export/rear_backup 192.168.2.0/24(rw,no_root_squash,async)

PXE_CONFIG_URL変数 には、grub.cfg のひな型ファイルを作成するディレクトリを指定します。
PXE_TFTP_URL変数 には、PXEブートで起動するレスキュー用OSのカーネルとRAMイメージを作成するディレクトリを指定します。それぞれTFTPサーバでファイルを提供することになるので、実際のTFTPサーバで使用するディレクトリを指定すれば効率が良いと思いますが、必ずしもそうでなくても良いです。なぜならば、後でTFTPサーバのディレクトリにコピーすれば良いからです。
上記の例では、NFSサーバの /export/rear_backup/tftp/ ディレクトリに作成することを指示しています( 予め /export/rear_backup/tftp/ を作成しておくことに注意して下さい)。

上記の設定でバックアップを行うと、以下の図に示した通りファイルが作成されます。
/export/rear_backup/ 配下にホスト名のディレクトリが作成され、その下に backup.tar.gz が作成されます。grub.cfg ファイルのひな型は、/export/rear_backup/tftp/ の下に、rear-ホスト名 というファイル名で作成され、カーネルとRAMイメージもそれぞれ、ホスト名.kernel と ホスト名.initrd.cgz というファイル名で作成されます。

バックアップの実行

バックアップは、いつもと同じく、以下のコマンドで行います。

# rear -v mkbackup

バックアップ対象サーバのホスト名は base1 なので、バックアップ終了後の、/export/rear_backup/base1 配下のファイル構成は、以下の通りに作成されています。

[root@base0 rear_backup]# ls -lR
.: total 0
drwxr-x--- 2 root root  45 May 14 13:12 base1
drwxr-xr-x 2 root root 173 May 14 13:08 tftp

./base1:
total 1502576
-rw------- 1 root root    7990338 May 14 13:12 backup.log
-rw------- 1 root root 1530644616 May 14 13:12 backup.tar.gz
./tftp: total 572204
lrwxrwxrwx 1 root root        10 May 14 13:08 01-00-e0-4c-38-6c-39 -> rear-base1
lrwxrwxrwx 1 root root        10 May 14 13:08 01-80-b6-55-5f-47-40 -> rear-base1
lrwxrwxrwx 1 root root        10 May 14 13:08 01-92-61-a7-72-a8-65 -> rear-base1
-r--r--r-- 1 root root 575012718 May 14 13:09 base1.initrd.cgz
-r--r--r-- 1 root root  10913432 Nov 17 12:42 base1.kernel
-r--r--r-- 1 root root       269 May 14 13:08 base1.message
-r--r--r-- 1 root root       626 May 14 13:08 rear-base1

PXEブートによるシステムのリカバリー

ReaRで作成したバックアップをPXEブートでリカバリーするなら、PXEブートに必要なDHCPサーバとTFTPサーバが必要になります。
PXEブートとReaRを組み合わせた、リカバリーの方法は以下の図のようになります。

PXEサーバ(正確には、DHCPサーバとTFTPサーバを稼働させるサーバ)は、私の環境では仮想マシンで運用しています(IPアドレスは 192.168.2.203)。PXEブートに必要な環境の構築に関しては、以下の記事を参考にして下さい。
犬でも分かるPXEブート(3):DHCPサーバの構築
犬でも分かるPXEブート(4):TFTPサーバの構築

リカバリー前の準備

先ず、バックアップで作成されたレスキュー用OSのカーネルとRAMイメージをTFTPサーバにコピーしましょう。

PXE_TFTP_URL=nfs://192.168.2.200/export/rear_backup/tftp
と指定していますので、バックアップが完了すると、NFSサーバの/export/rear_backup/tftp/ 直下に、以下のファイル名でファイルが作成されているはずです。

カーネル base1.kernel
RAMイメージ base1.initrd.cgz

この2つのファイルを、TFTPサーバ(192.168.2.203) の /var/lib/tftpboot/ にコピーしましょう(ちなみにシンボリックリンクはTFTPが参照できないのでダメです)。
/var/lib/tftpboot はTFTPサーバのtopディレクトリです。

次に、grub.cfg ファイルを作成します。
PXE_CONFIG_URL=nfs://192.168.2.200/export/rear_backup/tftp
と指定していますので、バックアップが完了すると、NFSサーバの/export/rear_backup/tftp/ 直下に、以下のファイル名でgrub.cfgのひな型が作成されているはずです。

grub.cfgのひな型 rear-base1

内容は以下の通りに作成されています。

menuentry ‘Relax-and-Recover v2.6’ {
insmod tftp
set net_default_server=192.168.2.203
echo ‘Network status: ‘
net_ls_cards
net_ls_addr
net_ls_routes
echo
echo ” Relax-and-Recover Rescue image”
echo “———————————“
echo “build from host: base1 (RedHatEnterpriseServer 8 Linux-i386)”
echo “kernel 4.18.0-513.5.1.el8_9.x86_64 Tue, 14 May 2024
03:09:41 +0900″
echo “BACKUP=NETFS OUTPUT=PXE BACKUP_URL=nfs://192.168.2.200/export/rear_backup”
echo
echo ‘Loading kernel …’
linux (tftp)//base1.kernel root=/dev/ram0 vga=normal rw selinux=0
echo ‘Loading initial ramdisk …’
initrd (tftp)//base1.initrd.cgz
}

このファイルを TFTPサーバ(192.168.2.203) の /var/lib/tftpboot/grub.cfg にコピーして、以下のように修正しましょう(修正箇所を太文字で示しています)。

set timeout=10
menuentry ‘Relax-and-Recover v2.6’ {
insmod tftp
set net_default_server=192.168.2.203
echo ‘Network status: ‘
net_ls_cards
net_ls_addr
net_ls_routes
echo
echo ” Relax-and-Recover Rescue image”
echo “———————————“
echo “build from host: base1 (RedHatEnterpriseServer 8 Linux-i386)”
echo “kernel 4.18.0-513.5.1.el8_9.x86_64 Tue, 14 May 2024 03:09:41 +0900”
echo “BACKUP=NETFS OUTPUT=PXE BACKUP_URL=nfs://192.168.2.200/export/rear_backup”
echo
echo ‘Loading kernel …’
linux /base1.kernel root=/dev/ram0 vga=normal rw selinux=0 unattended
echo ‘Loading initial ramdisk …’
initrd /base1.initrd.cgz
}

set timeout=10 は、起動メニューの表示を10秒でtimeoutして、ブートの処理に進めるための設定です。
linux行とinitrd行の引数には、それぞれカーネルとRAMイメージのパスを指定します(/var/lib/tftpbootがtopディレクトリなので、/var/lib/tftpboot/base1.kernel と /var/lib/tftpboot/base1.initrd.cgz 参照されます。
unattended は、ReaRのリカバリー処理を自動的にスタートするための指定です。

リカバリー開始

うちのサーバ(ホスト base1)は安価なミニPCなので、BMCが付いていません。よって、IPMI経由でブート順序を変更して、電源ONというスマートな方法ができません。代わりに、自分でBIOS画面を操作して、ブート順序でPXE bootを最上位に設定してから、Save & Exit して起動します。

コンソールの画面は、PXEブート可能なメディアを検索して、存在することが確認できたと言っています。

NBP file のダウンロードに成功して、ネットブートイメージを起動しています。

TFTPサーバのログ(/var/log/messages)には、以下のログが出力されています。
May 18 01:17:11 rocky1 in.tftpd[5370]: RRQ from ::ffff:192.168.2.210 filename BOOTX64.EFI
May 18 01:17:11 rocky1 in.tftpd[5370]: Client ::ffff:192.168.2.210 finished BOOTX64.EFI
May 18 01:17:11 rocky1 in.tftpd[5371]: RRQ from ::ffff:192.168.2.210 filename grubx64.efi
May 18 01:17:12 rocky1 in.tftpd[5371]: Client ::ffff:192.168.2.210 finished grubx64.efi

その後、grub.cfg ファイルが読み込まれると、grub.cfg の menuentry行に記載した文字列が画面に表示されます。

TFTPサーバのログ(/var/log/messages)には、以下のログが出力されています。
May 18 01:17:12 rocky1 in.tftpd[5386]: RRQ from ::ffff:192.168.2.210 filename /grub.cfg
May 18 01:17:12 rocky1 in.tftpd[5386]: Client ::ffff:192.168.2.210 finished /grub.cfg

grub.cfg に echo コマンドで記述したメッセージが画面に表示されて、カーネルとRAMイメージが読み込まれています。

TFTPサーバのログ(/var/log/messages)には、以下のログが出力されています。
May 18 01:17:22 rocky1 in.tftpd[5387]: RRQ from ::ffff:192.168.2.210 filename /base1.kernel
May 18 01:17:24 rocky1 in.tftpd[5387]: Client ::ffff:192.168.2.210 finished /base1.kernel
May 18 01:17:25 rocky1 in.tftpd[5388]: RRQ from ::ffff:192.168.2.210 filename /base1.initrd.cgz
May 18 01:19:16 rocky1 in.tftpd[5388]: Client ::ffff:192.168.2.210 finished /base1.initrd.cgz

unattended を指定しているので、rear recover が自動的に実行されています。
リカバリー処理では、backup.tar.gz から、/mnt/local に仮マウントしたストレージにバックアップが復元されます。
その後、リカバリーが成功すると、自動的にシステムの再起動が行われます。

リカバリー後のシステムが起動しました。これでPXEブートによるリカバリーが完了です。

PXEブートによるOSのクローン

さて、前述のリカバリーでは、バックアップしたのと同じサーバにリカバリーをしたので、単純なバックアップ&リカバリー(リストア)なのですが、同一のハードウェア構成の別のサーバにリカバリーすれば、OS(システム)のクローンが行えます。
OSのクローンにReaRを利用する場合は、バックアップするサーバではネットワーク設定をDHCP(auto)にした状態でバックアップを取得することをお勧めします。そうすれば、OSをクローンしたサーバにおいてIPアドレスが競合することがありませんので。

広告主へのリンク




このブログにおける関連リンク

OSのバックアップ・リストアツールReaR(1):ReaRを使ってみた
OSのバックアップ・リストアツールReaR(2):ReaRのオプション
OSのバックアップ・リストアツールReaR(3):USBフラッシュメモリを使ったバックアップ
OSのバックアップ・リストアツールReaR(5):UbuntuでReaR
OSのバックアップ・リストアツールReaR(6):UbuntuでReaR(PXE編)
OSのバックアップ・リストアツールReaR(7): ReaRのトラブルシューティング

コメント

タイトルとURLをコピーしました