今回は、Mondo Rescue を使って バックアップとリストア(復元)をやってみたいと思います。
いまだに、さくらのVPSは、バックアップ機能がないので、
VPSでもしもの時にどうするかとういのは、非常に重要な問題になってきています。
もちろん、バックアップサーバとしての格安プランを契約しておけば、何も問題ないのかもしれませんが、
少しでも安くランニングコストを抑えたい当方としましては、何とかオープンソースで自前で何とかできないものか?
もちろん、データベースやプログラムソースコードなどは、事前にバックアップしているものの
システムの再構築を行うには、やっぱり、面倒なことも多いので、
バックアップとっておいて、リストアで簡単復元できれば良いよね、という安易な考えのもと、やってみました。
ConoHa VPS は、できるけどサーバを止めないといけないので、
とりあえず、止めなくても(本当は、シングルモードぐらいにはした方が良いのではないかと思いつつ)
バックアップがとれる点では、試す価値有りかなぁという思いでやってみました。
今回は、VPS にのっている Deabin 8 (なので、Ubuntu もほぼ同じやり方でOKのはず) を、Mondo Rescue を使って バックアップし、
自PC内でVMWare を使って仮想マシン上へリストアしてみました。
- 目次
- 履歴
2017.08.23 初版
Mondo Rescue を使って バックアップする
Mondo Rescue を使って バックアップしてみます。
ここでは、使っていたVPSにのっているOSが Debianだったので 今回は、Debianで実施してみます。
Debianなので、Ubuntu も ほぼ同じように作業が行えると思います。また、わかる範囲で CentOSでの対応について記載していますので、
概ね、何かの役には立つのかなぁとは思います。
では、早速、インストールからやってみます。
Mondo Rescueをインストールする
ここでは、 最低限の他のパッケージ(ソフトウェア)をインストール、 リポジトリの登録、 Mondo Rescueをインストールしていきます。
- システムを最新にする
まずは、システムを最新の状態にします。 これは、古いシステムでは問題を含んでいるかもしれないからです。 できるだけ新しい方が、確率的にも問題は少ないはずなので、ここでは、最新にしておきます。
# リポジトリの更新を行います。 $ apt-get update ... # まずは、バージョンにひきずられずに安全に更新します。 $ apt-get upgrade ... # 現メジャーバージョンの最新へ更新します。 $ apt-get dist-upgrade ...
- SysLinuxをインストールする
Mondo Rescueを利用するには、最低限、SysLinuxは必須です。
$ apt-get -y install isolinux ...
CentOSでは、syslinux というそのままの名前ですから、yumでインストールできると思います。
もし、SysLinuxがインストールされていなかった場合は、インストールの後に、リブートすることをおすすめします。 それは、FileSystem系のパッケージがインストールされるため?、正しくモジュールなどが読めていない場合があるようです。
- 圧縮速度が速い lzop をインストールする
Mondo Rescueは、デフォルトで bezip2 を利用します。 しかし、圧縮速度が速い lzop を利用することもできます。 そこで、今回は、lzop を使えるようにしてみます。 (それほどの高速化が図られた感じもありませんでしたので、これは、あくまでお好みで良いと思います。)
$ apt-get -y install lzop ...
CentOSでは、lzo, lzop という2つをインストールする必要があるみたいです。 同様に、yumでインストールできると思います。
- mondo をインストールする
mondoパッケージは、Mondo Rescue 一式になります。 このパッケージをインストールすると、Mondo Rescue で必要なソフトウェアがインストールされます。
# Mondo Rescue のリポジトリを追加します。 $ vi /etc/apt/sources.list ... Debian 8 # mondorescue deb ftp://ftp.project-builder.org/debian 8 contrib deb-src ftp://ftp.project-builder.org/debian 8 contrib Ubuntu 14.04 # mondorescue deb ftp://ftp.project-builder.org/ubuntu 14.04 contrib deb-src ftp://ftp.project-builder.org/ubuntu 14.04 contrib # リポジトリ情報を更新する $ apt-get update ... # mondo をインストールする $ apt-get -y install mondo ... WARNING: The following packages cannot be authenticated! afio libprojectbuilder-perl libmondorescue-perl mindi-busybox mindi mondo Install these packages without verification? [y/N] y ... # mindiのバージョンをチェックしてみます。 # -- ここでエラー出力されなければ、とりあえずインストールはOKです。 $ mindi -V Mindi v3.0.2-r3578
インストール中に以下の画面が表示されることがありますが、デフォルトのまま(all) 了解 で次へ進みます。
また、CentOS 7 のリポジトリは、以下のような設定になります。
[mondorescue] name=centos 7 x86_64 - mondorescue Vanilla Packages baseurl=ftp://ftp.mondorescue.org/centos/7/x86_64 enabled=1 gpgcheck=1 gpgkey=ftp://ftp.mondorescue.org/centos/7/x86_64/mondorescue.pubkey
Mondo Rescueでバックアップする
ここでは、 リストア時に必要となる情報を最低限ダンプした上で、 Mondo Rescueにてバックアップをしていきます。
- ネットワーク情報を出力しておく
リストア時にネットワーク系が正しく動作しないことがあります。
その際は、
MACアドレスを使った設定を行っている場合、
固定IPアドレスの設定に起因している場合
がほとんどです。
ここでは、必ず、その元情報を出力し、リストアのトラブルシューティングに役立てましょう。# IPアドレス、MACアドレスをチェックしておきます。 $ ifconfig ... ifconfig eth0 Link encap:Ethernet HWaddr 01:02:03:04:05:06 inet addr:192.168.1.128 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::1:85ff:fe82:59a9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:845787735 errors:0 dropped:22807 overruns:0 frame:0 TX packets:35584149 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:117117464188 (109.0 GiB) TX bytes:28845818997 (26.8 GiB) eth1 Link encap:Ethernet HWaddr 06:05:04:03:02:01 inet addr:192.168.2.128 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fee2:941b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:559130987 errors:0 dropped:0 overruns:0 frame:0 TX packets:311623718 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:172945970791 (161.0 GiB) TX bytes:980553566364 (913.2 GiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:3685131 errors:0 dropped:0 overruns:0 frame:0 TX packets:3685131 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:9045355539 (8.4 GiB) TX bytes:9045355539 (8.4 GiB) # IPアドレスが固定か否かをチェックしておきます。 # ここでは、固定になっているのでリストアする時に # ネットワークは修正する必要があるかもしれません。 $ cat /etc/network/interfaces ... # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface #auto eth0 #iface eth0 inet6 dhcp #accept_ra 1 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.1.128 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 auto eth1 iface eth1 inet static address 192.168.2.128 network 192.168.2.0 netmask 255.255.255.0 broadcast 192.168.2.255
- ディスク情報を出力しておく
リストア時にディスクのパーティション作成に失敗したり、起動できなくなる場合があります。
その際は、
パーティションに問題がある場合
UUIDの設定に問題がある場合、
がほとんどです。
ここでは、必ず、その元情報を出力し、リストアのトラブルシューティングに役立てましょう。# ディスク構成とパーティション情報を出力しておきます。 $ fdisk -l Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xfca073c1 Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 100665343 100663296 48G 83 Linux /dev/vda2 100667390 104855551 4188162 2G 5 Extended /dev/vda5 100667392 104855551 4188160 2G 82 Linux swap / Solaris
- バックアップに含めるディレクトリ、含めないディレクトリを選別する
バックアップは、最終的にISO形式のファイルにしてしまいます。 ある意味、DVDに落とし込めるようにするためでもありますが、VPSへアップロードする際にISO形式が扱いやすいからです。
その際、できるだけ小さい方が良いに決まっています。
ここでのバックアップは、システムの設定をバックアップしたいのであってデータではないことに注意したいところです。
ここでは、どのディレクトリが容量を使っているか確認し、単純なコピーで大丈夫なものは、このバックアップに含めないようにします。# どのディレクトリが容量を使っているか、簡単に確認してみます。 $ du -s /* ... 9020 /bin ... 44 /home ... 1068880 /usr 52953350 /var ... # ここでは /var が一番容量を使っているので、さらに詳細を確認してみます。 root@d111:~# du -s /var/* ... 86588 /var/cache 419900 /var/lib ... 52423338 /var/www ...
ここでは、
/var/lib
は、データベースのmysqlで消費している
/var/www
は、ウェブサーバのnginx/apache で消費している
ディレクトリなので、単純にコピーできる/var/www
は、バックアップに含めないようにします。
du
コマンドは、ブロック数を出力しますから、通常であれば、1ブロック = 512 バイトとなり、 上記の/var/www
は、512バイトなら52423338 x 512 = 26,840,749,056 → ざっくり 27GB
です。
ファイルシステムによっては、デフォルト 1ブロック = 1024 バイト で出力する場合もあるので、もし、不安なら -k オプションを付けて KB出力すると良いと思います。
- Mondo Rescueでバックアップする
# バックアップファイルを作成するディレクトリを作成します。 $ mkdir /backup # Mondo Rescueでバックアップします。 # -O バックアップを行う。 # -i ISO形式で出力する。 # -L lzoで圧縮する。 # -N マウントされているネットワークドライブを除外する。 # -s 4500m ISOファイルサイズは最大4500MBとする。 # -d /backup 出力先は /backup とする。 # -E "/backup|/var/www" 除外ディレクトリは、/backup, /var/www とする。 $ mondoarchive -O -i -L -N -s 4500m -d /backup -E "/backup|/var/www" ...
以下に全パラメータの各意味を解説しておきます。
- 必須オプション(-O or -V)
-O ファイルシステムを CD, tape,ISO あるいは NFS へバックアップします。 必要なら、リストアするためのブートメディア あるいは ブートCD を作成することもできます。 -V ファイルシステムとバックアップを比較チェックします。 このオプションは、バックアップを作成した後にチェックするために -O と一緒に使うこともできます。 また、-V のみを指定した場合、既に作成されたバックアップの作成日時以降に何か更新したか否かをファイルシステムとの比較で確認することができます。 - メディアオプション
-c speed バックアップ先としてCD-R ドライブを使い、 書き込み速度を指定します。 -w speed バックアップ先としてCD-RW ドライブを使い、 書き込み速度を指定します。 Mondo 書き込む前に 初期化します。 -r バックアップ先としてDVDドライブを使い、そのディスクをバックアップメディアとして使用します。 書き込み速度は、growisofsにて最適な速度が自動的に決定されます。 growisofsがこれをサポートしていない場合、 DVDに書き込むときにsudoを使って mondoarchive を呼び出すと失敗することに注意してください – 詳細についてはgrowisofsのマンページを参照してください。 -C speed バックアップ先としてCD-R ドライブを使い、 書き込み速度を指定します。これは、実験的なもので、テープデバイスのようにCD-Rを使います。 -p prefix 指定したプレフィックスを使用してISOイメージの名前を生成します。 デフォルトでは、mondorescue-1.iso、mondorescue-2.iso、… となります。(数字はファイル順(ディスク番号)に相当します。) -p hogehoge を指定すると、hogehoge-1.iso、hogehoge-2.iso、という名前になります。 -i ISOファイル(CDイメージ)をバックアップメディアとして使用します。 これは、別のハードドライブにシステムをバックアップするのに適しています。 リモートファイルシステムからリストアする予定がある場合、 -n オプションを使うと便利です。 -n mount 共有ドライブ(ディレクトリ)をバックアップメディアとして使用する。 パラメータのmountは、リモートのマウントポイントを指定します。 例えば、ファイルサーバーの場合は ‘nfs://192.168.1.3/home/nfs’ のようになります。 マウントされていない場合、mondoarchiveが自動的にマウントします。 指定した NFSサーバーが バックアップユーザーからの書き込みのみを受け入れる場合は、 ‘nfs://user@machine/mount/path’ という構文でユーザを指定しなければいけません。 mondoarchiveはサポートするために最善を尽くします。 他のプロトコルも利用できます。 たとえば、 ‘sshfs://user@192.168.1.3/home/nfs’ のように指定して fuse ベースの sshfs ( SSHベースのファイルシステムマウント ) や ( SaMBa や Windowsベースのファイルシステムマウント ) smbfs(別名cifs)も同じように利用できます。 -t テープストリーマーをバックアップメディアとして使用し、磁気テープへバックアップします。 -U USBドライブをバックアップメディアとして使用します。 USBキーやUSBディスクへバックアップし、ブートドライブとして作成したい場合は、このオプションを使います。 USBデバイスは、事前に接続の上、-d オプションで そのデバイス名を指定する必要があります。 パーティション名を使用しないで、rawデバイス名( 例えば /dev/sda )を使用してください。
警告:指定されたデバイスのすべてのデータが削除されます。-u 一般的なストリーミングデバイスをバックアップデバイスとして使用します。 mondoarchiveによって直接サポートされていないデバイスにバックアップを書きたい場合は、これを使用します。 これにより、データが生のデバイスに直接送信されます。 このオプションは、経験豊富な理解できるユーザーのみ使用してください。 - メジャーオプション
-D 差分バックアップを作成する:ファイルシステムを調べて、最後のフルバックアップが実行されてから変更されたファイルを探します。 これらのファイルのみをバックアップします。 -E “dir|…” dirで指定されたディレクトリをバックアップから除外します。
dirはパイプで区切られ、クォーテーション(引用符)で囲まれている必要があります。 これは、部分的なアーカイブを実行するときに推奨されるオプションです。 mondoはリムーバブルメディア( /mnt/floppy, /mnt/cdrom, /proc, /sys, /run, /tmp )を自動的に除外します。 たとえば、NFSマウントにバックアップしているが、バックアップの内容をマウントに含めたくない場合は、 このスイッチでローカルマウントポイントを除外します。 マウントリストに表示されることを主張する独特のSCSI zipドライブを持っているならば、 /dev/sdd4 のようなパーティションでも動作します。
(注意書きの訳は怪しいかもです。もし気になる方は本文をご覧ください。)
注意:/dev/sdd4 を除外すると、マウントリストエントリが表示されなくても、/dev エントリ自体は引き続きバックアップされます。
注意:最後に / を付加してディレクトリを指定すると、その前までのディレクトリはアーカイブされますので、期待どおりに動作しません。 -E “/dev/sda|/dev/cciss/c0d0” のように、このオプションにフルディスクデバイスを指定することもできます。
注意:たとえば、/dev/mapper/vgsan-lvdir が /mnt 上にマウントされている場合、 /dev/mapper/vgsan-lvdir を除外するように指定すると、 リストア時に mondorestoreが このデバイスのLVM構造に触れるのを防ぎます。(pv|vg|lvcreate は 発生しません) ただし、マウントポイントである /mnt を除外すると、復元時にLVM構造体が再作成されます。 すべてのデータはこのデバイスで失われます。 構成に必要なものを使用してください。-I “dir|…” dirで指定されたディレクトリをバックアップから含めます。
dirはパイプで区切られ、クォーテーション(引用符)で囲まれている必要があります。 このオプションは、主に、アーカイブ操作にかかる時間を短縮するためにテストを実行するために使用されます。 デフォルトのバックアップディレクトリは “/” ですが、代わりに -I “/home|/etc” などのオプションを指定して、 それを上書きすることもできます。-I “/dev/sda|/dev/cciss/c0d0” のようにこのオプションにフルディスクデバイスを指定することもできます。
注意: このオプションを -E オプションとともに使用する場合、 -E オプションで指定されるものは、-Iで指定されているものが優先され、その サブディレクトリ を指定すべきです。-J file バックアップに含めるファイルまたはディレクトリを1行に1つの項目づつ書き込んだプレーンテキストファイルを指定します。 このファイルに書かれたディレクトリは、-I オプションを使って行われたこととは逆に再帰的に管理されないことに注意してください。 -N マウントされているすべてのネットワークファイルシステムを除外します。 これは現在、NFS, SMB, Coda, MVFS, AFS OCFS および Netware を意味します。 つまり、ローカルハードディスクのみをバックアップします。 -d dev|dir バックアップデバイス (CD/tape/USB) または ディレクトリ (NFS/ISO) を指定します。 CD-R [W]ドライブの場合、これはドライブが見つかるSCSIノードです(例:’0,1,0’)。 テープユーザの場合、これはテープストリーマ /dev エントリです(例:’/dev/st0’)。 USBユーザーの場合、これはキーまたは外部ディスクのデバイス名です。 ISOユーザの場合、これはISOイメージが格納されているディレクトリです。 NFSユーザの場合、これはバックアップが格納されているNFSマウントの下のサブディレクトリです。 ISOとNFSのデフォルトは ‘/var/cache/mondo’ です。 -g このオプションを指定した場合、GUIモードで実行します。
デフォルトでの mondoarchive の画面出力は テキスト出力で、特別なやりとりを必要としない定期的な処理に適しており、 cron ジョブ で 夜間にバックアップすることができます。-k path 使用するカーネルのフルパス名を指定します。 一般的には、ネイティブカーネルは、自動で検出され、適切に動作するはずです。 しかし、このオプションを使用して別のものを指定することができます。 例えば ’-k /boot/myvmlinuz’ などのようにです。 -m 手動(自己復帰式ではない)CDトレイは、しばしばラップトップにあります。 ラップトップユーザーの場合、CDバーナー(CDを焼く技術)に BurnProof技術が搭載されている場合や、 mondoに問題が発生した場合は、mondoarchiveに このオプションを指定してください。 -o OBDR(One Button Disaster Recovery)タイプのテープを使用します。 デフォルトでは、テープは起動できません。 このフラグを使用すると、テープはOBDR形式に従ってブート可能になります。 -s size バックアップメディアの容量を指定します。
数字の最後に ‘m’ (MB) や ‘g’ (GB) を使用することができます。 たとえば、大容量 CD-R の場合は ‘700m’です。 テープにバックアップする場合は、カートリッジのサイズを指定する必要がなくなりました。-x ‘dev …’ バックアップするLinux以外のパーティションを指定します(NTFSやBeOSなど)。 - マイナーオプション
-[0-9] 圧縮レベルを指定します。
デフォルトは3です。圧縮しない場合は、0です。-A command ここで指定した command は、各CD/NFS/ISOファイルが書き込まれた後に呼び出されます。
これは、ISOを作成した後にISOを使って何かをしたい場合、 たとえば非標準コマンドを使ってCD-R[RW] に書き込みたい場合に便利です。 -A は、2つのトークン( _ISO_ と _CD#_ )を認識します。 これらのトークンは、ISOのファイル名とそのインデックス番号(1, 2, …)にそれぞれ変換されます。 そのため、-A ‘foobackup _ISO_; rm -f _ISO_’ のように使うことで、 それぞれのISOファイルを 独自の foobackup というシェルまたはプログラム へ通知し、 独自の処理を施し、その後 rm -f _ISO_ で ISOファイルを削除する・・・ということもできます。-B command ここで指定した command は、各CD/NFS/ISOファイルが書き込まれる前に呼び出されます。
詳細については、 -Aを参照してください。-F このオプションを指定すると コマンドが失敗したときに再試行せずに終了します。
これは、cronから起動される自動モードに便利です。-G bzip2ではなく、標準で高速なLinux圧縮エンジンgzipを使用します。
(正直、gzipが速いのか?という疑問もありますが、一応、そのまま記載しておきます。)-H テープ/CD から起動する時、ハードドライブが消去され、アーカイブが復元されます。 このオプションを指定した場合、テープ/CD から起動することに同意したとみなされます。 それ以上の許可は求められません。 慎重に使用してください。 -L bzip2ではなく、lzo(高速圧縮エンジン)を使用します。
MondoのウェブサイトまたはFreshMeatでlzoを見つけることができます。 警告! LZOの一部のバージョンは不安定です。 (正直、lzoがそんなに速いのか?という疑問もありますが、一応、そのまま記載しておきます。正直、無理して使う必要もないかもしれません。)-M max-size 大容量ファイルの最大サイズを指定します(デフォルトは64 MBです)。 値はkBで指定する必要があります。 例では、-M 128000 を使用して、128 MBを超えるものを作成します。 -Y bzip2ではなく、より高速で最適化された新しいLinux圧縮エンジンlzmaを使用します。 -R Star は afioの代わりです。 afioのライセンスが 完全な free ではないことを考慮して、配布する際に役立つことがあります。 Starはafioと比較して sparseファイル のサポートにもよりよく活用できます。 また、starはネイティブのPOSIX ACLをサポートしていますが、afioは特別な追加ハンドリングが必要です。 -P tarball post-nuke の tarball を指定します。 Nuke Modeで起動し、すべてが正常に復元された場合は、先のtarball が見つかった場合、post-nukeスクリプトが実行されます。 これは、復元後のカスタマイズに便利です。 tarball (.tar.gz 形式) には、 post-nuke スクリプト(またはバイナリなど)だけでなく、必要なファイルも含まれているものとします。 -S path scratchdir (作業用ディレクトリ)のフルパス名、つまりISOイメージがアーカイブされる前に構築されているディレクトリを指定します。 たくさんのRAMがあり、scratch space にRAMディスクを使用する場合は、ここでそのパスを指定してください。 -T path tempdir (テンポラリディレクトリ)のフルパス名、temporary ファイル(アセンブルされているISOイメージ以外)が格納されているディレクトリを指定します。 -Sを参照 -W バックアップを自己起動させないようにします。(bootableにしないということ)
これを指定することは、自前で ブートさせるということです。 さらに、リストアをする場合は、 Mindi を手動で起動することになります。 このオプションは、十分な知識がある人以外は、使わないでください。-b テープ・ドライブが使用する内部ブロック・サイズを指定します。
これは通常32Kですが、ドライブの中にはそれでうまくいかないものもあります。 ほとんどの場合、うまくいくはずですが、どうしてもうまく行かない場合は、512または16384を試してください。-e バックアップ時にCDまたはテープを取り出さないようにします。 -f device マスターブートレコードが存在するドライブを指定します。
通常、これは自動的に検出されます。 ソフトウェアRAIDを行っている場合などは、このオプションでうまくいく場合があります。-l GRUB|LILO|ELILO|RAW ブートローダを GRUB|LILO|ELILO|RAW から指定します。
デフォルトでは、現在の環境が調べられ、通常ブートローダが検出されます。
RAWを指定すると、MBRはバックアップされ、解析なしでバイトごとに復元されます。 また、-f <dev> を使用して起動デバイスを指定する必要がある可能性があります。
ELILOはIA64マシンでは必須です。
UEFIシステムではGRUBが必須です。
-Q ブートローダに関するより詳細な情報を提供します。 -K loglevel ログレベルを指定します。 完全なデバッグには99を使用します。 標準のデバッグレベルは4です。 -v mondoarchiveバージョンを提供します。 -z 各ファイルに拡張属性とaclを使用し、それらをバックアップメディアに格納します。
SElinuxを使用している場合はこのオプションを使用しますが、もちろんバックアップやリストアの時間が遅くなります。
- 必須オプション(-O or -V)
Mondo Rescue で作成したバックアップからリストアする
先に作成した Mondo Rescue で作成したバックアップ(ISOファイル)からVMWare Player を使ってPC上にリストアしてみます。
VMWare Player にて仮想マシンを作成する
- VMWare Player を起動し、”新規可能マシンの作成” をクリックします。
- CD/DVDのディスクに、先にバックアップしたISOファイルを指定し、”次へ” をクリックします。
- ゲストOSは、ここでは汎用的に”Linux” と “他の Linux 3.x カーネル … ” を指定し、”次へ” をクリックします。
- 仮想マシン名、保存先を設定し、”次へ” をクリックします。
- ディスク容量は、バックアップ元に合わせておき、”次へ” をクリックします。
バックアップしたデータ容量が展開できるだけの容量があれば 小さくでもOKです。
- 最後にメモリ量を、バックアップ元に合わせておきたいのでカスタマイズします。
バックアップ元に合わせておきます。
設定を終えたら、”完了” をクリックし終了です。
VMWare Player へリストアする
- 先に作成した仮想マシンを起動します。
- mondorestoreを “expert” で起動します。
boot: expert ...
少なくともVMWare への展開では、”auto” で実行しても失敗します。
また、ディスクのデバイス名、マウントポジション、パーティション、grub で それぞれ失敗します。
そのため、ここでは、 “expert” で事前に対応できるものは対応していきます。
- mondorestore のシェル画面で止まるので、そこで、mountlist.txt を編集します。
sh-4.3$ vi /tmp/mountlist.txt ... # デバイス名を変更、UUIDを削除する。 #/dev/vda1 / ext4 1234567 12345678-1234-1234-123456789012 #/dev/vda5 swap swap 1234567 87654321-4321-4321-210987654321 /dev/sda1 / ext4 1234567 /dev/sda5 swap swap 234567
- パーティションを作成し、初期化します。
# fdisk を使ってパーティションを作成します。 sh-4.3$ fdisk /dev/sda ... # /dev/sda1 のメインパーティションを作成します。 # -- ここのディスク容量は、いっぱいいっぱいを使わずに、少し余裕を持たせた設定をしています。 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-104857599, default 2048): Last sector, +sectors or +size{K,M,G} (2048-104857599, default 41943039): +46G Created a new partition 1 of type 'Linux' and size 46GiB. # /dev/sda2 の拡張パーティションを作成します。 # -- ここのディスク容量は、スワップ領域となります。 Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e Partition number (2-4, default 2): Using default value 2 First sector (96471040-104857599, default 96471040): Last sector, +sectors or +size{K,M,G} (96471040-104857599, default 104857599): +2G Created a new partition 2 of type 'Extended' and size 2GiB. # /dev/sda5 の論理パーティションを作成します。 # -- ここのディスク容量は、スワップ領域となります。 Command (m for help): n Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) Select (default p): l adding logical partition 5 Using default value 2 First sector (96473088-100665343, default 96473088): Last sector, +sectors or +size{K,M,G} (96473088-100665343, default 100665343): Created a new partition 5 of type 'Linux' and size 2GiB. # /dev/sda5 のパーティションタイプをスワップにします。 Command (m for help): t Partition number (1,2,5, default 5): 5 Hex code (type L to list all codes): 82 Created type of partition 'Linux' to Linux swa / Solaris'. # /dev/sda1 のパーティションに boot フラグを設定します。 Command (m for help): a Partition number (1,2,5, default 5): 1 The bootable flag on partition 1 is enalbled now. # 最後にパーティション情報を書き込みます。 Command (m for help): w The partition table has been altered. Calling ioctl() to re-read pertition table. Syncing disks. ... # /dev/sda1 を ext4 として初期化します。 sh-4.3$ mkfs.ext4 /dev/sda1 ... Filesystem UUID: 12345678-1234-1234-123456789012 ... # /dev/sda5 をスワップとして初期化します。 sh-4.3$ mkswap /dev/sda5 ... no label, UUID: 87654321-4321-4321-210987654321 sh-4.3$
ここでは、fdisk を使用していますが、parted も使えます。 お好きな方で良いかと思います。入力は、fdiskが楽です。
- mondorestore を起動します。
sh-4.3$ mondorestore ...
上記の画面が表示されたら、’Interactively’ を選択、Enterを押下します。
- バックアップとリストア先を指定します。
上記画面では、バックアップ元を指定します。ここでは、”DVD Disks” を選択、Enterを押下します。
上記画面では、リストア先のパーティション構成を設定します。
ここでは、”/dev/sda1″ , “/dev/sda2” をぞれぞれ、先のパーティションで作成したサイズに設定します。
設定を終えたら、”OK” を選択、Enterを押下します。
パーティションを更新します・・・という画面ですから、”OK” を選択、Enterを押下します。
- パーティションの作成と初期化を回避します。
上記画面では、ディスクの初期化を行うか?の確認です。ここでは既にフォーマットまで行っているので、”No” を選択、Enterを押下します。
上記画面では、パーティションのフォーマットを行うか?の確認です。ここでは既にフォーマットまで行っているので、”No” を選択、Enterを押下します。
- リストア(バックデータのコピー)を実行します。
上記画面では、リストアの確認です。ここでは、”Yes” を選択、Enterを押下します。
上記の画面のようにデータをコピーし始めます。
容量によりますが、5GB程度の展開なら、10分もあれば終わります。
また、ISOファイルが複数に分割されている場合は、次のディスクの挿入を促されますので、指示にしたがい作業を進めてください。
- ブートローダーの初期化を行います。
上記画面では、ブートローダーの初期化の確認です。ここでは、”Yes” を選択、Enterを押下します。
上記の画面では、”mkinitramfs” を実行してイメージを再作成するための確認になります。ここでは、”Yes” を選択、Enterを押下します。
さらに、”mkinitramfs” を実行しなさい・・というメッセージが表示されますので、こちらも “OK” をを選択、Enterを押下します。
すると、シェルが表示されますので、以下のように行っていきます。# ここで、fstab などの 必要な設定を全て編集します。 # mkinitramfsは、最後のに実行します。 # まず、fstab を編集します。 sh-4.3$ vi /etc/fstab ... # -- 以下のように UUID 指定となっていたので、 # -- ここでは、デバイス名で設定するようにしました。 #UUID=968f0715-b5e1-4d4f-b406-9de8923ce560 / ext4 errors=remount-ro 0 1 /dev/sda1 / ext4 errors=remount-ro 0 1 # swap was on /dev/vda5 during installation #UUID=b1cddbcc-a5a4-4195-853f-7f6a90d926d4 none swap sw 0 0 /dev/sda5 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 # fstab を保存し、 # 次に mtab を編集します。 sh-4.3$ vi /etc/mtab ... # ここの設定の中に /dev/vda.. の設定があるか確認します。 # もしあれば、/dev/sda.. へ変更します。 # --- 今回の設定には、変更箇所がありませんでしたので、次へ。 rootfs / rootfs rw 0 0 /proc /proc proc rw,relatime 0 0 /sys /sys sysfs rw,relatime 0 0 none /dev devtmpfs rw,relatime,size=496124k,nr_inodes=124031,mode=755 0 0 none /dev/shm tmpfs rw,relatime 0 0 /dev/shm /tmp tmpfs rw,relatime,size=262144k 0 0 /dev/sda1 / ext4 rw,relatime,data=ordered 0 0 /proc /proc proc rw,relatime 0 0 /sys /sys sysfs rw,relatime 0 0 /dev/scd0 /mnt/cdrom iso9660 ro,relatime 0 0 # raid関連ファイルがある場合は、VM上では使わないので、削除しておきます。 sh-4.3$ ls /etc/raid* ls: cannot access /etc/raid*: No such file or directory # --- ここでは、mdadmの設定ファイルが存在したので、名前を変えてこれを退避させます。 sh-4.3$ ls /etc/mda* mdadm.conf $ mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old # ここまで終えたら、イメージファイルの再作成を実施してみます。 # 仮想環境では、不要らしいですが、備忘録としてもやり方を記載しておきます。 # /bootディレクトリに対象となるイメージファイルがあるので確認する。 sh-4.3$ cd /boot sh-4.3$ ls ... initrd.img-3.16.0-4-amd64 ... # mkinitramfsを実行して、再作成してみる。 sh-4.3$ mkinitramfs -o initrd.img-3.16.0-4-amd64 ... W: .... ... # -- 結構な警告メッセージが出力されましたが、一応、できたみたいです。 # 本来は、ここで grubの再インストールもできるようなのですが、 # 残念ながら失敗しました。 sh-4.3$ grub-install /dev/sda ... Installing for i386-pc platform. grub-install: error: failed to get canonical path of '/dev/sda1'. # もし、 grubの再インストールがうまくいったら、設定ファイル(grub.cfg)をアップデートします。 sh-4.3$ grub-mkconfig -o /boot/grub/grub.cfg ... # 最後に処理を抜けます。 sh-4.3$ exit
色々とやってはみたのですが、grubはうまく行きませんでした。
とりあえず、リストアを終えたら、Debianのレスキューで grub を再インストールすることで回避します。
- ブートローダーの関連ファイルの確認を行います。
先のシェル画面を終了すると、上記の mountlist の編集を行うかの確認画面が表示されます。
“Yes” を選択、Enterを押下します。
次に、Bootデバイスを指定します。ここでは、/dev/sda を指定し、”OK”選択、Enterを押下します。 先の編集内容を確認し、内容に誤りがなければ、Ctrl + X で終了します。
次に、先のシェルで編集を行った以下のファイルを順番に nano で表示しますので、 特に内容に誤りがなければ、Ctrl + X で終了します。
- /etc/fstab
- /etc/mtab
- /boot/grub/grub.cfg
grub については、ここでは何も編集せずに、この後、再インストールします。
上記のすべての編集確認を終えたら、GRUB を自動的にインストールします。 すると、上画面のように”GRUBが正しくインストールされた”と表示されますが、 なぜか、うまくインストールできません。
とりあえず、ここでは、”OK”選択、Enterを押下します。
- 最終確認を行います。
パーティションのラベルの確認画面です。
ここでは、特にラベルを使用していないので、”No” を選択し、Enterを押下します。
最後にシェル画面が表示されます。
ここで、”exit” を入力するとシステムリブートし、mondorestore の作業は終了となります。
- Debian レスキューにて GRUB の再インストールを行います。
ここでは、VM にバックアップの元のOSである Debian のインストールDVD(あるいはISOファイル)をセットし、リブートします。 もちろん、CD/DVD ドライブから起動するようにします。
起動すると以下のようにインストール画面が表示されます。
ここでは、Advanced options を選択します。
次に、Rescue mode を選択します。
すると、Debian のレスキューモードが立ち上がり始めます。
上記は、レスキューモードのデフォルト言語、場所、キーボードの言語の設定です。
ここでは、全て”日本語”を選択しました。
次に、レスキューモードのネットワークのホスト、ドメインの設定を行います。
ここでは、全てデフォルトのままで”続ける”を選択しました。
次に表示された上画面は、ルートドライブにどのドライブを使用するかの画面です。
ここでは、/dev/sda1 (先にリストアした際に / にマウントしたデバイス名になります)を選択します。
ここでようやく Debian のレスキュー画面が表示れます。
ここでは、GRUB ブートローダの再インストール を選択します。
GRUB ブートローダの再インストール先のデバイスを指定します。
ここでは、/dev/sda を指定し、”続ける”を選択します。
GRUB ブートローダの再インストールを終えたら、再度、Debian のレスキュー画面が表示れます。
ここでは、システムの再起動 を選択し、終了です。
リストアしたVMを起動してみる
先の作業でリストアしたVMを起動してみます。
リストアしたVMを起動してみる
先の作業でリストアしたVMから、CD/DVDドライブからディスクあるいはISOファイルのマウントを解除し、VMを起動してみます。
GRUBが正しく再インストールできていれば、
上画面のように GRUB 画面がすぐに表示されるはずです。
上記のようにログインプロンプトが表示されれば、とりあえず、リストア完了ですね。
これは、VMWare のBIOS 設定画面にて、フロッピードライブを無効にすると出力されなくなります。
最低限の環境設定を行う
一応、ここから先は、バックアップ元の環境をそのままでは使えないので、
VMWare上で使用できるようにネットワーク環境だけは、整えてみます。
|
VMへリストアできたら、サーバを移る時も楽にできるのでは・・・と思ったのですが、 さすがに、リストアは、面倒ですね。
当たり前ですが、ハードウェアの環境が異なるのにリストアすることにかなり無理があるのが、よくわかった記事となりました。
Mondo Rescueは、そもそもバックアップであってVMを作ってくれるものではありませんから、 同じサーバのバックアップおよびリストアには、それほど手間はかかりません。
サーバをまるまる移すことなど考えなければ、普通に使える便利なツールです。 リストアも “Auto restore” の機能で、十分に対応できるはずです。
もし、Mondo Rescue を使ってデバッグ環境などを作りたい方がいらっしゃれば、多少の参考にはなるかと思います。 その際の参考になれば幸いです。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :