OSのバックアップ・リストアツールReaR(1):ReaRを使ってみた

Relax-and-Recover

※ 2024/4/9 に更新しました。

ReaRを使ってみた

ReaR(Relax-and-Recover)は、OSをインストールした後に、システム全体のバックアップを作成し、それをISOイメージとして保存できるという優れモノのツールです。ISOイメージでバックアップを作成できるということは、そのISOイメージからシステムを復元できるってことで、システムが壊れてしまったときのためのバックアップを作成するのにちょうど良いツールです。
仕事で使う予定もあるので、事前に自宅のサーバ(というかミニPC) GMKtec NucBox3 で試してみることにします。OSはRHEL8.8です。

(※ 2024/5月時点では、ウチのやつよりも新しいモデルになっています)

ちなみに、ReaRは RElax-And-Recoverの略なのですけど、使い始めるとバックアップとリカバリーが本当に楽です。信用もできる。。。RElax-And-Recoverの意味が分かる気がします。

ReaRをインストールしよう

システムにReaR(Relax-and-Recover)がインストールされていなかったら、インストールを行いましょう。以下のコマンドを実行することで、すぐにインストールすることができます。

# dnf -y install rear
# dnf -y install grub2-efi-x64-modules.noarch

grub2-efi-x64-modules.noarch をインストールする理由ですが、インストールしないとバックアップ時に以下のエラーが発生して失敗するのですよ。なんで依存関係になっていないのかと思いますが、まあそういうものなのでしょう。

grub2-mkstandalone: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist. Please specify --target or --directory.

ReaRの設定(基本)

ReaRを使ったバックアップで最初に迷うのは、設定ファイル /etc/rear/local.conf の定義内容です。
もっともベーシックな設定方法というのが、ネットを検索しても簡単に見つからない。
もっともベーシックなバックアップ/リカバリの方法は、以下の通りだと思っています。

1-(1). システム全体のバックアップをISOイメージで作成して、DVDにバックアップしておきたい。リカバリするときは、そのDVDから起動して簡単にリカバリしたい。

このようにバックアップ/リカバリをしたい人は、/etc/rear/local.conf を以下の通り記載して下さい。これが最もベーシックなReaRによるバックアップの定義です。

OUTPUT=ISO
OUTPUT_URL=null
BACKUP=NETFS
BACKUP_URL=iso:///backup

OUTPUT変数では、リカバリする際のレスキューイメージをどこからブートするのかを指定します。今回はDVDにISOイメージを焼いて、そのDVDから起動するつもりなのでISOを指定します。
BACKUP変数では、バックアップの方法を指定します。ReaRはいろんなバックアップ方法に対応していますが、NETFSと指定した場合は tar.gz でバックアップを作成します。NETFSという紛らわしい名前になっているので、ネットワークファイルシステム(NFS)経由でバックアップする、と誤解しがちなんですが、決してそうではありません。バックアップ方法として、tar+gzipを使う、ということを宣言しているだけです。もちろん、NFSのファイルシステムにバックアップファイルを作成することもできますが、それは後述のOUTPUT_URL変数で指定します。
BACKUP_URL変数は、バックアップで作成した backup.tar.gz ファイルをどこに格納するかを指定します。この例では、ISOイメージの中に /backup というディレクトリを作成して、その下に backup.tar.gz を格納することを宣言しています。
さて、最も誤解しやすいのが、OUTPUT_URL変数です。ReaRはデフォルトで、/var/lib/rear/output/<hostname>/ ディレクトリの下にレスキューイメージ(今回はOUTPUT変数でISOを指定しているので rear-<hostname>.iso というファイル名となる)を作成するのですが、ここに作成したレスキューイメージを他の場所に転送したい場合に、OUTPUT_URLにURLを指定します。/var/lib/rear/output/ から転送する必要がない場合は null を指定しておけばOKです。
BACKUP_URLに具体的なURLを指定してレスキューイメージを転送しても、/var/lib/rear/output/<hostname>/rear-<hostname>.iso は作成されたままなので、BACKUP_URLには null を指定するのが容量の面でもっとも効率が良いです。
これまでの説明を図にまとめると、以下のような感じです。

ReaR(Relax-and-Recover)によるバックアップ


1-(2). システム全体のバックアップをISOイメージで作成して、DVDにバックアップしておきたい。リカバリするときは、そのDVDから起動して簡単にリカバリしたい。 ISOイメージを/tmpに作成する。

レスキューイメージのISOファイルを/tmp 配下に作成するなら、以下の通り定義します(ローカルのファイルシステムの絶対パス指定ではfile:の後に / が3つ並ぶことに注意して下さい)。

OUTPUT=ISO
OUTPUT_URL=file:///tmp
BACKUP=NETFS
BACKUP_URL=iso:///backup

OUTPUT_URLにURLを定義すると、URLが示すディレクトリの下にホスト名のディレクトリを作成して、その下にレスキューイメージとバックアップログを転送します。但し、/var/lib/rear/output 配下のレスキューイメージは残ったままになるので、/tmpにレスキューイメージを転送するのはあまり意味がありません。

ReaRのOUTPUT_URL変数に/tmpを指定

1-(3). システム全体のバックアップをISOイメージで作成して、DVDにバックアップしておきたい。リカバリするときは、そのDVDから起動して簡単にリカバリしたい。 ISOイメージをNFSのファイルシステムに作成する。

レスキューイメージをNFSのファイルシステム、例えば /export/rear_backup に作成するなら、以下の例のように定義します(192.168.2.200はNFSサーバのIPアドレス、NFSのマウントポイントは/export/rear_backupです)。

OUTPUT=ISO
OUTPUT_URL=nfs://192.168.2.200/export/rear_backup
BACKUP=NETFS
BACKUP_URL=iso:///backup

うちにはもう一台サーバ(ミニPC)があって、NFSサーバとして運用しているのは MINISFORUM GK41 というマシンです。

ちなみに、nfs: を指定した場合、自動的にNFSマウントが行われるので、マウントポイントをNFSマウントしていても、していなくてもどちらでも良いです。NFSサーバでは、/export/rear_backup を対象となるホストにexportする設定はしておいて下さい。この場合も、OUTPUT_URLに指定したURLが示すディレクトリの下にホスト名のディレクトリを作成して、その下にレスキューイメージを転送します。この例では、バックアップ対象ホストのホスト名は base1 なので、OUTPUT_URL=file:///tmp の場合は /tmp/base1/ が、OUTPUT_URL=nfs://192.168.2.200/export/rear_backup の場合は、/export/rear_backup/base1 が自動的に作成されます。

ReaRのOUTPUT_URL変数にNFSのディストリを指定

1-(4). リカバリーシステムはISOイメージで作成したいが、バックアップ本体はISOイメージの中ではなく、NFSのファイルシステムに作成したい。

バックアップ対象の容量がDVDの容量を超えてしまう場合は、ISOイメージの中にバックアップファイル(tar.gzファイル)を作成することができません。その場合は、レスキューイメージだけISOで作成しておき、バックアップファイル本体はNFSファイルシステムに作成するのが良いでしょう。以下のように指定します。

OUTPUT=ISO
BACKUP=NETFS
OUTPUT_URL=nfs://192.168.2.200/export/rear_backup
BACKUP_URL=nfs://192.168.2.200/export/rear_backup

OUTPUT_URLとBACKUP_URLに同じURLを指定していますが、それぞれの意味は、
BACKUP_URLはバックアップファイル backup.tar.gz を作成する場所で、
OUTPUT_URLはレスキューイメージの転送先です。
このように作成したレスキューイメージは、リカバリに必要なシステムを起動するためのカーネルとRAMイメージしか格納されないので、500MB程度のサイズにしかなりません。

ReaRのBACKUP_URL変数の意味

1-(5). RHELでバックアップする場合の注意

Rocky LinuxやAlma LinuxでReaRのバックアップを行う場合は、これまでの設定でOKです。RHELの場合、/boot/grub2/grubenv が ../efi/EFI/redhat/grubenv のシンボリックリンクとして存在するのですが、ReaRでリカバリを行うときに、/boot/grub2/grubenv がリカバリされない仕様になっています。なぜなら、デフォルトの設定ファイル /usr/share/rear/conf/default.conf において、以下の定義があるからです。

BACKUP_RESTORE_MOVE_AWAY_FILES=( /boot/grub/grubenv /boot/grub2/grubenv )

これは move awayの表記の通り、/boot/grub/grubenv と /boot/grub2/grubenv を取り除くという設定です。grubenvは前回のブートの情報(エラーが発生したとか)を記録するファイルなのですが、リカバリによって再作成されたシステムでは前回のブートというのは意味がないので、ReaRではあえてそれを削除するおせっかい仕様になっているのです。しかし、RHELでは /boot/grub2/grubenv は ../efi/EFI/redhat/grubenv のシンボリックリンク になっている役割があるので、削除してはダメです。だから、RHELの場合の最もベーシックな設定は以下の通りとなります。

OUTPUT=ISO
OUTPUT_URL=null
BACKUP=NETFS
BACKUP_URL=iso:///backup
BACKUP_RESTORE_MOVE_AWAY_FILES=( )

要するに、BACKUP_RESTORE_MOVE_AWAY_FILES変数に ( ) を定義することで、デフォルトの設定を打ち消しています。もし、この設定を忘れてしまっても、リカバリ後に、手作業でシンボリックリンクを再設定すれば問題はありません。

バックアップ開始

以下のコマンドでバックアップを開始します。

# rear -v mkbackup

以下のようなログが画面に出力されます。

Relax-and-Recover 2.6 / 2020-06-17
Running rear mkbackup (PID 64544)
Using log file: /var/log/rear/rear-base1.log
Running workflow mkbackup on the normal/original system
Using backup archive '/tmp/rear.o4RsHneb4qSjDe5/tmp/isofs/backup/backup.tar.gz'
Using UEFI Boot Loader for Linux (USING_UEFI_BOOTLOADER=1)
Using autodetected kernel '/boot/vmlinuz-4.18.0-477.10.1.el8_8.x86_64' as kernel in the recovery system
Creating disk layout
Overwriting existing disk layout file /var/lib/rear/layout/disklayout.conf
Using guessed bootloader 'EFI' (found in first bytes on /dev/sda)
Verifying that the entries in /var/lib/rear/layout/disklayout.conf are correct …
Creating recovery system root filesystem skeleton layout
To log into the recovery system via ssh set up /root/.ssh/authorized_keys or specify SSH_ROOT_PASSWORD
Trying to find what to use as UEFI bootloader…
Trying to find a 'well known file' to be used as UEFI bootloader…
Using '/boot/efi/EFI/redhat/grubx64.efi' as UEFI bootloader file
Copying logfile /var/log/rear/rear-base1.log into initramfs as '/tmp/rear-base1-partial-2024-04-09T20:45:15+09:00.log'
Copying files and directories
Copying binaries and libraries
Copying all kernel modules in /lib/modules/4.18.0-477.10.1.el8_8.x86_64 (MODULES contains 'all_modules')
Copying all files in /lib*/firmware/
Broken symlink '/var/lib/rear/moved_away_after_backup_restore/boot/grub2/grubenv' in recovery system because 'readlink' cannot determine its link target
Testing that the recovery system in /tmp/rear.o4RsHneb4qSjDe5/rootfs contains a usable system
Creating recovery/rescue system initramfs/initrd initrd.cgz with gzip default compression
Created initrd.cgz with gzip default compression (537891068 bytes) in 66 seconds
Making backup (using backup method NETFS)
Creating tar archive '/tmp/rear.o4RsHneb4qSjDe5/tmp/isofs/backup/backup.tar.gz'
Preparing archive operationOK
Archived 931 MiB in 131 seconds [avg 7281 KiB/sec]
GRUB2 modules to load: fat part_gpt xfs
Did not find /boot/grub2/locale files (minor issue for UEFI ISO boot)
Making ISO image
Wrote ISO image: /var/lib/rear/output/rear-base1.iso (1.5G)
Copying resulting files to file location
Saving /var/log/rear/rear-base1.log as rear-base1.log to file location
Copying result files '/var/lib/rear/output/rear-base1.iso /tmp/rear.o4RsHneb4qSjDe5/tmp/VERSION /tmp/rear.o4RsHneb4qSjDe5/tmp/README /tmp/rear.o4RsHneb4qSjDe5/tmp/rear-base1.log' to /tmp/base1 at file location
Exiting rear mkbackup (PID 64544) and its descendant processes …
Running exit tasks

Running exit tasks が出力されればバックアップ終了です。出力の中に「error:」を含むメッセージがあったら、エラーが発生しています。
この例におけるバックアップ対象サーバのホスト名は base1 なので、/var/lib/rear/output/rear-base1.iso に 1.5GBのレスキューイメージを作成していることが分かります。バックアップのログは、/var/log/rear/rear-base1.log に記録されます。
バックアップの過程で、/tmp/rear.o4RsHneb4qSjDe5 という作業ディレクトリが作成されます。エラーなしで終了すれば、この作業ディレクトリは自動的に削除されます。

/var/lib/rear/output/ ディレクトリの中身を確認すると、レスキューイメージのISOファイルが作成されていることが分かります。ちなみにoutputというディレクトリはバックアップによって自動的に作成されます。

[root@base1 ~]# ls -al /var/lib/rear/output/
合計 1538988
drwxr-xr-x. 2 root root 28 4月 9 20:49 .
drwxr-xr-x. 7 root root 104 4月 9 20:45 ..
-rw-------. 1 root root 1575923712 4月 9 20:49 rear-base1.iso

/tmpにレスキューイメージを転送するように OUTPUT_URL を定義した場合は、/tmp/base1/ が作成されて、その下にレスキューイメージのISOファイルとログが格納されています。

[root@base1 ~]# ls -al /tmp/base1/
合計 1539664
drwxr-x---. 2 root root 79 4月 9 20:49 .
drwxrwxrwt. 3 root root 34 4月 9 20:49 ..
-rw-------. 1 root root 202 4月 9 20:49 README
-rw-------. 1 root root 269 4月 9 20:49 VERSION
-rw-------. 1 root root 1575923712 4月 9 20:49 rear-base1.iso
-rw-------. 1 root root 680383 4月 9 20:49 rear-base1.log

ちゃんとリカバリできるのか試してみるよ

上記のように作成されたrear-base1.isoをPCにダウンロードして、DVD-ROMに焼きます。その後、バックアップを行ったサーバ base1 にDVDドライブを接続して、そのDVD-ROMからシステムをリカバリしてみます。

ちなみにバックアップ・リカバリをテストしたサーバはGMKtecのミニパソコン NucBox3です。DVD-ROMからレスキューイメージを起動するので、BIOS画面で、boot順序の1番目をDVDドライブに設定しておくことを忘れないようにして下さい。

リカバリの手順は以下の図のイメージで進みます。

ReaRによるリカバリのフロー


サーバの電源を入れるとDVDのISOイメージから起動メニューが表示されるので「Relax-and-Recover (no Secure Boot)を選択します。これがレスキューイメージで、メモリ(RAM)上に最小限のシステムが展開されます。

ReaRのレスキューイメージの起動画面

レスキューイメージからカーネルとRAMイメージが読み込まれています。

ReaRのレスキューイメージの起動中

起動後にログインプロンプト「<ホスト名> login: 」が表示されるので、rootでログインします(ここで起動しているのはレスキューイメージでするので、パスワードは求められません)。

ReaRのレスキューイメージにログインしてリカバリー実行

ログインしたら以下のコマンドを実行します。

# rear recover

バックアップのサイズとDiskのサイズがチェックされます。yesを入力すると、そのままリカバリに進みますが、30秒待てばyesが選択されたものとみなされて、自動的にリカバリに進みます。

ReaRのリカバリー画面1

リカバリの処理が開始されると、処理の様子がログとして出力されます。
ディスクのパーティションが自動的に作成され、その後、backup.tar.gzからバックアップしたファイルシステムが展開されていることが確認できます。展開したファイルシステム(target system)は、/ ではなく /mnt/local/ の下に作られていることも確認できます。
Running exit tasks が表示されてプロンプトが戻ってきたらリカバリは終了です。

ReaRのリカバリー画面2

lsでファイルシステムを確認してみます。/ に展開されているのはレスキューイメージで、/mnt/local/ の下が、バックアップから復元されたファイルシステムです。

ReaRのリカバリーで復元されたシステム

リカバリが完了したので、DVDを外して、システムをrebootして下さい(ここでDVDを外しておかないと、またレスキューイメージが起動しちゃいます)。

reboot後に起動するシステムは、バックアップから復元したシステムですので、ログインプロンプトでは、バックアップ前のrootのパスワードを入力してログインして下さい。

ReaRのリカバリー後に再起動して確認

lsで確認すると、reboot前は /mnt/local/ 配下に見えていたディストリが、/ 配下に存在することが確認できましたので、バックアップ・リストアは成功したと言えるでしょう。

めでたし、めでたし

広告主へのリンク




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

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

コメント

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