プリインストール済のディスクをバックアップ2007年08月27日 13時02分19秒

新規でも中古でも、PC を手にいれたら Windows だけが動くことなどない。しかし、ディスクは既に Windows に占拠されているのである。そうなるとディスクの要領を FreeBSD 用に空ける必要がある。そして、パーティションの大きさを変更する前に、バックアップは欠かせない。

経験上未使用のハードディスクを読み出すと、全てがゼロで埋まっている。これが、偶然なのか、工場で全てこの様に初期化して出荷しているのかは知らない。何はともあれ、未使用の領域が多いと、dd で読み出したものを圧縮すると、圧縮率がとてもたかい。

それに加えて、MBR や複数のパーティションをもろとものバックアップを取ることもある。

そのため、新しく手元に来た PC のハードディスクは dd でバックアップを取るのが恒例の行事になっている。


# dd if=/dev/ad2 bs=1MB | buffer -m20M | gzip -9 | split -b2048m - XXX-ad2.dd.gzip.

流石に、512 バイト毎に読み出すと時間が掛かって仕方がないので、bs で大きくする。最近は、ディスクの末尾はほとんど使われていない場合が多いので、あまり考えずに 1MB と指定することも多い。

gzip を使うか、bzip2 を使うかは、CPU と IO の性能で臨機応変に変える。buffer を使うと、余計な IO 待ちが減るので、早くなる。

経験上、split は絶対いれておいた方がいい。ふと、fat 領域に書き込んで、2 GB の壁にぶつかり泣いたことが何度かある。古い Linux では、2 GB 以上のファイルを作れなかった事もある。

普段 split と 圧縮を組み合わせる時は、split したものを圧縮する。aa.bz2 などとなるわけだ。こうした方が、特定のバイトの範囲を指定するときに便利だったからだ。しかし、ディスク全体の dd の場合は、圧縮したものを split している。bz2.aa などとなる。一ファイルあたり、2 GB ものゼロを書き、圧縮し直すのが無駄だからだ。

次回

コメント

_ 名無子 ― 2009年01月19日 14時10分14秒

逆の作業。
ディクスに書き戻す方法を教えてください。

_ uyota ― 2009年01月20日 12時29分55秒

XXX-ad2.dd.gzip.aa、XXX-ad2.dd.gzip.ab、XXX-ad2.dd.gzip.ac といったファイルが作られていきます。それらを全て繋げたファイルが、正しい gzip ファイルなので、それを cat などで繋げてから展開すればできます。ad2 に書き戻すとしたら、以下のような例になります。

cat XXX-ad2.dd.gzip.* | gzip -d | dd of=/dev/ad2 bs=1M

_ 名無子 ― 2009年01月22日 13時28分10秒

ありがとうございました。

重ねての質問で申し訳ないのですが、
書き戻す時はbufferは不要なのでしょうか?

_ uyota ― 2009年01月22日 18時32分10秒

buffer はあっても無くても結果自体は変わりません。buffer は IO の待ち時間を均等化するのに役に立つので、若干処理が速くなります。

ただ、この dd の使い方は OS やデータを上書きする使い方のなので、各コマンドで何が起きているのか正しく理解が出来ていないようでしたら、この作業は勧めません。

間違えると起動すらしなくなる事があります。

_ 名無子 ― 2009年01月24日 11時26分27秒

なるほど、回答ありがとうございました。
無事に、環境を移行することができました。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/08/27/1754481/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。