やりたいこと
さくらのVPSで作成したサーバーのクローン(複製)を作りたい。
概要
さくらのVPSにはサーバーのクローンを作ったり、ディスクのバックアップやリストアを行う機能がありません。同じ構成のサーバーを複数作りたいときや、テスト用に今の環境をクローンして使いたい場合はちょっと不便です。
そこで ReaR (Relax-and-Recover) を使って、クローン対象のサーバーをバックアップして、クローン先にリストアを行います。ReaRは起動可能なISOファイルを作成できるので、OSをインストールする感覚でリストアが可能です。
使用環境
Rocky Linux 8.6
ReaRのインストール
# dnf install rear
ReaRの設定
/etc/rear/local.conf を以下のようにしました。生成されるISOファイルは /tmp に出力されます。/tmpはバックアップの対象外のはずなので、生成中のISOファイルがバックアップされることはありません。
OUTPUT=ISO
OUTPUT_URL=file:///tmp
BACKUP=NETFS
BACKUP_URL=iso:///backup/
バックアップの実行
# rear -v mkbackup
しばらくするとバックアップが完了するので、/tmpを見てみます。すると自分のホスト名のディレクトリの下に、.isoファイルが作成されています。
# ll /tmp/ホスト名/
-rw------- 1 root root 202 9月 7 09:57 README
-rw------- 1 root root 276 9月 7 09:57 VERSION
-rw------- 1 root root 1391476736 9月 7 09:57 rear-ホスト名.iso
-rw------- 1 root root 105196 9月 7 09:57 rear-ホスト名.log
クローン先のサーバーを用意する
さくらのVPSのコントロールパネルを開き、はじめにクローン先となる、新しいサーバーを作成します。たしか新規作成時はISOファイルからは作れなかったはずなので、まずは適当なサーバーを作成しておきます。
次にサーバーの「OS再インストール」を選択し、「OSインストール形式」は「ISOインストール」を選択、「ISOイメージの詳細」は「アップロードする」を選択すると、SFTPサーバーの情報が表示されます。ファイルはSFTPでアップロードを行います。
ISOファイルのアップロード
ISOファイルをPCにダウンロードしてからアップロードするか、もしくはサーバー上から直接アップロードします。以下は直接アップロードする手順です。
# sftp ユーザー名@ホスト名
cd iso
put /tmp/ホスト名/rear-ホスト名.iso
exit
ファイルはログインしたディレクトリの iso/ にアップロードします。アップロードすると、さくらのVPSのコントロールパネルにもファイルの情報が表示されます。
リストアを実行する
ISOファイルのアップロードが完了したら、コントロールパネルの指示通りに進みます。VNCコンソールを開くと、ReaRのメニューが表示されていますので、「Automatic Recover xxxx」を選択します。
しばらくするとリストアが終了するので 3) Reboot を選択します。電源がオフになるので、再度電源をオンにすると、クローンしたシステムが起動します。
リストア先の設定を修正する
クローン元のネットワーク設定のまま起動してしまうので、このままではネットワークに繋がりません。VNCコンソールからログインして、ネットワークの設定を変更します。設定に必要な情報は、コントロールパネルの上で確認できます。これで外部からsshでログインできるようになるので、その他必要な修正などを行います。
余談
さくらのVPSにディスクのクローンや、バックアップ、リストア機能が欲しいです!ConoHaのVPSにはその機能があって、簡単にクローンが作れるんですよね。さくらインターネットではさくらのクラウドにこれらの機能があるので、格安なVPSサービスとの差別化ということで、あえて実装してないのかもしれません。さくらのクラウドはサーバーとディスクを自由に組み替えたりできるので、実験用の環境を簡単に構築できて便利です。
追記: ISOイメージから起動できなかった場合
今までこの方法で問題なくリストアできていたのですが、なぜかRocky Linux 8.7ではISOイメージからの起動ができませんでした。ローカル環境で試したところ、512MBのメモリではエラーすら出ず、1GBでは起動中にエラーで止まってしまいます。メモリを2GBにすると正常に起動しました。かといってさくらのVPSではインストール時だけメモリを増やすなんてことはできません。そこで、初期OS上で無理矢理リストアすることにしました。
手順
- VPSで普通にOSをインストールして、sshでログインできる状態にする。 (以下、rootで実行することを想定)
- dnf install tar rsync
- VPSにログインして、 /backup を作成する
- PC上でReaRで作成したISOを開いて、backup/backup.tar.gz を取り出す
- backup.tar.gz をSFTPで /backup に転送する
- ファイルを展開する tar xfzp backup.tar.gz --numeric-owner
- 以下のスクリプトでクローンする
- 再起動する(shutdownコマンドか効かなかったので強制再起動)
- コンソールからnmtui等でネットワークの設定を行う
- 不要なファイル /bakup を削除する
CLONEDIR="bin boot dev etc home lib lib64 opt root run sbin srv usr var"
for cdir in $CLONEDIR
do
echo Clone: $cdir
#echo rsync -rtlzvogpHAX --delete --dry-run $cdir /
rsync -rtlzvogpHAX --delete $cdir /
done
稼働しているシステム上でファイルを書き換えるという、ちょっと乱暴なやり方でしたが、ひとまず復元はできました。コピーすべきではないファイルがある場合はrsyncの --exclude オプションで除外できます。これは正しくない、こうした方がいい、といった情報がございましたら、コメントで教えていただけると助かります。
追記;/etc/fstab は除外したほうがいいかも。たまたまUUIDが同じなだけで、元のインストールイメージが異なると別のUUIDになっている可能性があります。