仕事じゃLinux、Solaris、Ciscoなど。 趣味じゃProToolsLEなど。 愛車はkawasaki 250TRナリよ。


スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


Windows の起動ディスクをdd コマンドで複製する
自宅のパソコンはほとんどUbuntu な私なわけですが、1台だけWindows7 なマシンがあります。
BDなど視聴するためのマシン(Home Theater PC)です。
使っているうちに、しょーもないソフトを入れてしまったり消したりなんかして、「あー、OSからクリーンインストールしたい。」と思ってしまうわけですが、それはけっこうめんどくさい作業でもあります。
せっかくWindows をクリーンインストールしたら、その状態を複製しておいて、いざとなったらその状態に戻せるといいなーと思いますよね。
そういう用のソフトとかも売っているわけですが、ここはシンプルに、
●「起動ディスク(2.5インチSSD)を取り出し、一時的に、USB外付けケースに入れてUbuntu マシンに接続し、ddコマンドでもう1台用意した別のSSDに複製してしまう」
というのをやってみました。
もう1台のSSDに複製するのではなく、イメージ化して圧縮して置いておく、という風にしてもいいと思います。
あと、起動ディスクが取り出せない場合でも、USBメモリからUbuntu を起動して、さらにUSB外付けHDD を接続して、起動ディスクをUSB外付けHDD に複製/バックアップしてしまう、というのもいいかもしれません。

さてやり方。
1.まず、Ubuntu マシンに、USB外付けケースに入れた、空のディスク(複製先)と、Windows が入っているディスク(複製元)を接続した状態で、ディスクを確認。
 $ df -h
これをみると、私の手元の例では、
 /dev/sdc が空のディスク(複製先)
 /dev/sdd がWindows が入っているディスク(複製元)
となっています。
補足しますと、もともとのUbuntu マシンの環境がSSD とHDD という構成であり、起動ディスクSSD が /dev/sda 、データ領域ディスクHDD が /dev/sdb となっています。
したがって、2台のUSB外付けSSD は、どちらかが /dev/sdc でどちらかが /dev/sdd になるわけですが、どちらがどちらなのかを確認しています。
/dev/sdc のほうはパーティションが /dev/sdc1 しかありませんが、 /dev/sdd のほうは /dev/sdd1 と /dev/sdd2 の2つあります。
これは、システム予約領域と、OS領域で、すなわち、 /dev/sdc のほうが空のディスク(複製先)、 /dev/sdd のほうがWindows が入っているディスク(複製元)である、ということがわかります。
Screenshot_from_2013-08-17 23:12:14

2.それでは、dd コマンドで複製します。
 $ sudo dd if=/dev/sdd of=/dev/sdc bs=1M
よく分からなくなってしまいがちですが、
 if= で指定するのがWindows が入っているディスク(複製元)
 of= で指定するのが空のディスク(複製先)
です。
数十分かかる処理だと思います。
しかし、うんともすんとも言わないので、ちょっと不安になります。
Screenshot_from_2013-08-18 00:01:36


3.そこで、進捗を表示させてみます。
別の端末をたちあげて、ps コマンドでdd コマンドのPID を調べて、kill コマンドでSIGUSR1 シグナルを送ってやると、進捗が表示されます。
 $ ps -aux | grep bs=1M
 $ sudo kill -USR1 "ddコマンドのPID"
進捗が表示されます。
何分かおきに実行すると、あとどれぐらいで終了するか、おおよその見込みがたちます。
なお、最終的にdd コマンドが終了した時にも、同じフォーマットで情報が表示されます。
補足として、grep するときに、「dd」を検索語にしてしまうと、関係ないものがいろいろヒットしてしまいます。
ここでは「bs=1M」を検索語としましたが、「if=/dev/sdd」とか「of=/dev/sdc」とかを検索語としてもいいかもしれません。
Screenshot_from_2013-08-17 23:23:21

こうして複製したSSD を、外付けUSBケースから取り出しマシンに組戻してみますと、ちゃんと起動して動作しました。
便利ですねぇ。

4.別のSSDに複製するのではなく、イメージ化して圧縮して置いておく
コマンドとしてはこんな感じ。
 $ sudo dd if=/dev/sdd | gzip -c > /home/hogehoge/win7.img.gz
if=/dev/sdd とか of=/dev/sdc とかは、よく確認してから。
/home/hogehoge/win7.img.gz の「hogehoge」部分は、自分のログインユーザー名ということで。
「win7.img.gz」は任意の名前で。
なお、ここではbs指定をしていません。
するとすれば、パイプの前、
 $ sudo dd if=/dev/sdd bs=4M | gzip -c > /home/hogehoge/win7.img.gz
なのですが、試しに bs=4M や bs=1M と指定してみたところ、かえって遅くなりました。
これは指定しなくてもよいかもしれません。
Screenshot_from_2013-08-22 22:54:28

復元する場合はこんな感じ。
 $ sudo gzip -dc < /home/hogehoge/win7.img.gz | sudo dd of=/dev/sdc
Screenshot_from_2013-08-22 23:32:07


進捗の確認は、こんな方法もあるみたい。
別の端末をたちあげて、
 $ sudo killall -USR1 dd
Screenshot_from_2013-08-22 22:54:42


へぇ・・・便利だ。

スポンサーサイト


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。