Ubuntu Weekly Recipe

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

この記事を読むのに必要な時間:およそ 3.5 分

パッケージ構成の復元

前回紹介した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で取得したバックアップデータをリストアすることで,バックアップ取得時の環境に復帰することができます。なおこの順番で作業しないと,設定ファイルに関する問い合わせがパッケージインストール時に頻繁に行われ,非常に煩雑になるので注意してください。

注2)
上記の例では"hold"されたパッケージも導入してしまっています。"hold"したものよりも新しいバージョンのパッケージがリリースされている場合は,この操作で導入されるのは想定と異なるもののはずです。この場合は"hold"した時と同じバージョンのパッケージを入手して導入する必要があります。
注3)

このようなことを行わなくても,dpkgが管理するインストール済みパッケージ一覧は/var/lib/dpkg/statusに保存されています(dpkg -lの出力に相当するものです)⁠このため,/var以下をバックアップしていれば cat /var/lib/dpkg/status | egrep '^Package: ' | awk '{print $2}' > ~/installedpackages で同じものを得ることもできます。

ただし,この/var/lib/dpkg/statusは,dpkgが利用するメタデータファイルで,システム上もっとも重要なファイルの一つです。誤って削除・上書きなどをしないよう,可能であれば別のファイルを生成して利用することをおすすめします。

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

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入