debian の tar を使ったロールバックの方法

前にも書いたとおり、最近Thinkpaddebianを入れて楽しんでいるのですが、いろいろ入れているとたまにうまくインストールできないソフトがあります。そういう時には、その新しくインストールしたソフトを削除したりしてみるのですが、必要なものまで削除されてたり、必要ないものが残ってたりとなかなかうまくいきません。今まではそのたびにシステムの再インストールをしてました。

ただ、このThinkpadにはCDやDVDのドライブが付いていないため、いちいち外付けドライブをくっつけてインストールしていたのですが、いい加減面倒になってきました。なので、いちいち外からとりこまないでもロールバックできる方法を探して見ました。結論としては、普通のバックアップ&リストアの方法と同じことをすればよいのですね。真剣にバックアップをするならば、dumpやddといった方法もあるのですが、ここでは手軽に行いたいので tar を使ってやります。なお、以下の方法はパーティション単位になります。パーティションの構成は、sda1がシステム全般、sda3が/homeになっています。

前準備

まずは前準備です。外からつながないで、中だけでバックアップ&リストアを完結できるようにします。

そのためにメインのOSとは別のバックアップ復旧用のOSをインストールします。僕は面倒だったので、そのままdebianをもうひとつインストール。設定は最小構成で十分です。容量的にも1Gあればどうにかなると思いますが、念のため3Gぐらい確保しておきます。

バックアップ

今回は「確実に動く特定の時点」にロールバックすることが目的なので、その時点のスナップショット代わりに tar によるバックアップを取っておきます。念のためシングルユーザモードで。

# mount -t ext3 /mnt /dev/sda1
# tar zcvf /home/share/backup.tar.gz /mnt

ロールバック (リストア)

さて、ここからが本題のロールバックの方法です。まず試したのはシングルユーザモードで入って、tarファイルの解凍です。

# tar zxvf /home/share/backup.tar.gz

ただ、この方法だと、システムの状態は元に戻るのですが、新しくインストールした分のファイルなどはそのままで残ってしまいます。つまりごみファイルが大量に残ります。さすがにこれは、と思ったので別の方法を探します。とりあえず、システムファイルを一度全部消してしまえばいいのです。ただ、システムを消すと動かなくなってしまいます。そこで前準備でやったバックアップ復旧用のOSです。あらかじめ別のOSがインストールしてあるならば、そのOSに入って、復旧したいパーティションを初期化してから展開すればいいのです。

# mke2fs -j /dev/sda1
# mount -t ext3 /dev/sda1 /mnt
# mount -t ext3 /dev/sda3 /mnt2
# tar zxvf /mnt2/share/backup.tar.gz

これで復旧完了です。準備が面倒ですが、準備してしまえばあとは簡単にできます。