ディスクの内容をイメージ化するコマンド
例えば、/dev/sdaの内容をイメージ化する場合、外付けのUSBメモリや、USBハードディスクをマウントさせて、実行させます。
mount -a /dev/sdb1 /mnt/usb
dd if=/dev/sda of=/mnt/usb/sysback.img
※ddコマンドに対して、大きな問題があります。
ddコマンドは便利だけれども、進捗状況を表示する事ができない
下記に示すコマンドを、別のコンソール等から入力することにより、ddを実行しているコンソールに進捗状況を表示させることが出きるようになります。
ps -ef|grep dd
root 4227 1985 8 16:38 pts/0 00:00:03 dd if=/dev/sda of=/mnt/usbmem/sysbk.img
kill -SIGUSR1 4227
上記killコマンドを実行すると、ddを実行しているコンソール上に、下記のメッセージが表示されます。
CentOS の場合は、下記のように表示されます。
1100476928 bytes (1.1 GB) copied, 115.53 s, 9.5 MB/s
Ubuntu の場合は、下記のように表示されます。
1189601+0 レコード入力
1189600+0 レコード出力
609075200 バイト (609 MB) コピーされました、 232.584 秒、 2.6 MB/秒
ReadHat 系と、Debian 系で、表示の仕方などが若干違うようです。
この方法を用いるときには、コマンドの入力は別のコンソールで行い、コマンドの実行結果はすでに dd を実行中のコンソールに
表示されるため、非常に効率が悪いです。
そこで、下記のようにしてみてください。
while true; do kill -SIGUSR1 4227; sleep 2;done
※このコマンドは無限ループで実行されます。該当する dd コマンドが終了したら、CTRL + C を押下して終了させてください。
ただし、上記の方法だと、ddを実行する度に、プロセス番号を取得してコマンドを実行しなければならないため、正直面倒です。
※下記に示す方法は、CentOS などRedHat系のLinuxでしか動作しません。
Debian / Ubuntuなどでは期待通りに動作してくれませんでした。
何か他の方法があるのだと思います。
そこで、プロセス番号の取得をしないで、しかも任意の時間ごとに進捗状況を表示させることができるコマンドがコレです。
例では、2秒ごとに進捗状況を表示させています。
※この方法も、CentOS など、RedHat 系のディストリビューションでしか動作しないと思います。
while true;do killall -USR1 dd;sleep 2;done
このコマンドの唯一の問題点は、ddが実行終了すると、プロセス番号が消失してしまうため、
dd: どのプロセスもkillされませんでした
この様に表示されます。
このときには、CTRL + C キーを押下して、強制終了させてください。