Ubuntu Weekly Recipe

第5回Ubuntuのバックアップ(2):パッケージ構成の復元とリモートバックアップ・ddの利用

前回のSBackupに引き続き、Ubuntuでバックアップを行う手法を紹介します。今回のレシピは、SBackupでは充分でない場合や、リモートバックアップが必要な場合が対象です。

SBackupによるリモートバックアップ

前回SBackupの"Destination"でSSH/FTPサーバにリモートバックアップすることができる、とお伝えしましたが、この機能の詳細を見てみましょう。

図1 SBackupの"Destination"
図1 SBackupの

これはSBackupが作成するバックアップファイルを、リモートマシンに作成する、という機能です。

UbuntuのDesktop CDからインストールしたシステムが相手の場合、標準ではSSH serverとしての機能はインストールされていませんので、Synapticで"openssh-server"パッケージをインストールしてください。

図2 Synapticによるopenssh-serverのインストール
図2 Synapticによるopenssh-serverのインストール

もしくは、次のようにしてSSH serverをインストールしてください。

$ sudo apt-get update
$ sudo apt-get install openssh-server

なお、Ubuntu以外のLinux, *BSD, Solaris, Windows+SUA/SFUな ど、SSHサーバ機能を提供するマシンであれば、相手側は何でもか まいません。

相手側の準備ができたら、SBackupの設定を行 います。

たとえば、192.168.200.102というマシンに「fyos hida」というアカウントに「ubuntu」というパスワードでSSH ログ インでき、⁠/data/backup」というディレクトリにデータを転送す る場合は、以下のようにします。

図3 SSHによるバックアップの入力例
図3 SSHによるバックアップの入力例

このように設定し、[Test]を押すと、次のようなダイアログが表示されるはずです。このダイアログは、相手が「なりすました別のマシン」でないかを確認するためのものです。

図4 SSHのホストキーの識別子確認
図4 SSHのホストキーの識別子確認

この鍵が正しいかどうかは、次の手順で確認できます。まず、⁠相手側」のコンピュータにログインし、端末を開きます(Ubuntuであれば[アプリケーション⁠⁠→⁠アクセサリ⁠⁠→⁠端末⁠⁠。

ここで、次のようにlocalhostに対して接続を試みます。ここでRSA key fingerprint is ************** といった形で、文字列が表示されるはずです。

$ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 24:94:b2:58:b1:9a:76:0a:f6:83:3f:69:51:50:bc:c1.
Are you sure you want to continue connecting (yes/no)? 

この文字列と完全に同じものが(上記の例であれば24:94:b2:58:b1:9a:76:0a:f6:83:3f:69:51:50:bc:c1が⁠⁠、SBackupからのアクセス時にも表示されることを確認してください。この状態であれば「とにかくログイン」を押しても問題ありません。

また、十分に安全であることが確信できる場合は、文字列の確認を行わずに「とにかくログイン」しても良いかもしれません(が、これは危険な習慣ですので、おすすめしません⁠⁠。この後、対象ディレクトリにデータを書き込めるかどうかのテストが行われ、問題がなければ次のような画面になります。

図5 テストに成功した画面
図5 テストに成功した画面

この状態で"Backup Now!"を行うことで、ローカルに作成されるのと同様のバックアップを別のマシンに取得することができます。まれにSSH接続が途中で切断されてしまい、バックアップに失敗することがあるので注意してください。この方法により、ノートPCのデータをデスクトップPCへ(あるいはその逆⁠⁠、といったバックアップを取得できます。

また、FTPサーバへのバックアップも可能となっていますが、安全なネットワーク(たとえば家庭内LANで、無線LAN機器は一切なく、絶対に第三者が接続していないと断言できる場合)でない限り、おすすめしません。

この方法によるバックアップの注意として、転送先でバックアップファイルを展開することで、バックアップされたファイルを閲覧することができますので、他人のPCなどに転送することは避けた方がよいでしょう。

また、SSH/FTPともに、この欄にパスワードを直接入力して保存することは、セキュリティ的にはまったく望ましくありません。⁠保存]などを行って定期的なバックアップとしては登録するようなことは行わず、必要に応じてManual Backupを用う(パスワードは都度入力する⁠⁠、という運用を強くお勧めします[1]⁠。

パッケージ構成の復元

前回紹介したSBackupは、デフォルトでは/home, /etc, /usr/local, /varのみを保存する動作になっていました。これらは主にユーザが作成・設定したデータが格納されているディレクトリです。では逆に、ユーザが作成・設定したのではないデータ、つまり/usr以下にある、デスクトップ環境や各種実行ファイルはどのようにバックアップすべきでしょうか?

1つの回答は、⁠導入されているパッケージ一覧を保存しておく」ことです。主に/usr以下はパッケージによってインストールされたファイルですし、変更することは通常はありません。これらのファイルは別途バックアップせずとも、パッケージから再導入することで問題なく利用することができます。

前回触れましたが、SBackupによるバックアップには、packagesという名前のファイルに「バックアップを取得した時点でインストールされていたパッケージの一覧」が取得されています。

antares$ ls -al /var/backup/2008-02-03_02.43.32.109733.antares.ful
total 1896
drwxr-x--- 2 root admin    4096 Feb  3 03:32 ./
drwxr-x--- 3 root admin    4096 Feb  3 03:33 ../
-rw-r----- 1 root admin     221 Feb  3 03:32 excludes
-rw-r----- 1 root admin 1852237 Feb  3 03:32 files.tgz
-rw-r----- 1 root admin   16917 Feb  3 03:32 flist
-rw-r----- 1 root admin    7260 Feb  3 03:32 fprops
-rw-r----- 1 root admin   35248 Feb  3 03:32 packages  ←パッケージ一覧が格納されたファイル
-rw-r----- 1 root admin       4 Feb  3 03:32 ver

次の操作を行うことで、このファイルを用いてパッケージ構成を復元することができます[2]⁠。

$ cat packages | egrep '[[:space:]](install|hold)$'| awk '{print $1}' > ~/installedpackages
$ sudo apt-get update 
$ sudo apt-get install `cat ~/installedpackages`

また、このpackagesファイルはdpkg --get-selectionsの出力ですから、SBackupを使わずとも、cronに以下のような登録をしておくことで自動的にパッケージ構成を保持することができます[3]⁠。

#m   h    dom   mon   dow   command
00   00   *     *      *    /usr/bin/dpkg --get-selections > ~/packages/packages.list.`/bin/date +%F`

もしバージョン情報が必要であれば、dpkg -lの出力を保存しておくのが良いでしょう。

#m   h    dom   mon   dow   command
00   00   *     *      *    /usr/bin/dpkg -l > ~/packages/dpkg.list.`/bin/date +%F`

この方法を用いる場合のレストアは、次のように行います。

まず、HDDクラッシュなどに見舞われた後、新しいPCにUbuntuを新規インストールします。その後、packagesを元にしたパッケージ構成の復元を最初に行います。

この時点で設定とユーザデータ以外は復元できます。ここからSBackupで取得したバックアップデータをリストアすることで、バックアップ取得時の環境に復帰することができます。なおこの順番で作業しないと、設定ファイルに関する問い合わせがパッケージインストール時に頻繁に行われ、非常に煩雑になるので注意してください。

ddによるHDDイメージの取得

SBackupを補完する単純なバックアップ方法として、Desktop CDを用いてHDDイメージをddで取得する方法を紹介します。

この方法はUSB HDDなど、システムをインストールするHDD以外の保存先がある場合に有効です。

この方法で取得するバックアップは、HDDの中身を「そのまま」コピーしたものであるため、パーティション構造・ファイルシステムなどを元通りに復元できます。また、OS(=ファイルシステム)を問わずバックアップすることができるため、デュアルブートなどでも容易に復元することができます。

実際の手順は単純です。

Desktop CDでシステムを起動し、バックアップ先となるUSB HDDを接続した状態で「端末」を開き、次のコマンドを入力するだけです。

$ sudo dd if=/dev/sda of=/media/disk/sda.zero

これにより、HDDの中身が完全に/media/disk/sda.zeroに複写されます(もし複数のHDDがある場合は、/dev/sdb, /dev/sdc...とします。また、拡張カードを経由してHDDを利用している古いマシンの場合は、/dev/hdaとする必要があるかもしれません⁠⁠。

また、この複写したイメージをHDDに書き出す場合は、次のようにします。

$ sudo dd if=/media/disk/sda.zero of=/dev/sda 

この操作により、もともとのHDDイメージが復元されます。もともと存在していたHDDのデータは失われますので、誤って操作しないように注意してください(バックアップを取ろうとしてコマンドを間違える、というのがよくある展開です⁠⁠。

他に注意するべきこととしては、⁠Desktop CDなど、通常利用しているOSとは別のもの」から取得作業を行うことです。稼働中のOSから取得したddのイメージは、そのまま利用できるものではありません(ファイルシステムの整合性が取れない状態です⁠⁠。

もう一つの弱点としては、HDDを「そのまま」バックアップしますので、バックアップ先で消費する容量もHDD「そのまま」です。すなわち、300GBのHDDをバックアップすると、300GBの容量が必要になります(SBackupによるバックアップでは「その時点で使っているもの」だけをバックアップしますので、300GBのうち50GBしか使っていなければ、50GBの容量で済みます。さらにSBackupは圧縮を行いますので、実際にはさらに容量差が開きます⁠⁠。

このため、USB HDDの方が容量が大きい必要があります。

ですが現在は1~2万円弱で500GB HDDが入手できますので、初期セットアップを行ったイメージのバックアップ(=メーカー製PCについてくる、いわゆる「レストアCD」的なもの)を構築したい場合は検討してみてください。

参考になるドキュメント
第4回の「参考になるドキュメント」を見てください。
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0004?page=3

おすすめ記事

記事・ニュース一覧