一つ前に書いた Linux(Puppy)の起動USBメモリのディスクイメージのバックアップについて。
結局、Windows上から Ext2/4パーティションを含む USBメモリのディスクイメージをバックアップするアプリはどれも某かの問題があって使えないことがわかった。Windows O/Sのバージョン(7/10/11 など)によっても違うと思われるが、Ext2/4フォーマットのパーティションの含まれる USBメモリを装着した途端 Windowsが「フォーマットしますか」と聞いてくることからも、O/S自体が Ext2/4フォーマットを扱えないという問題がある以上、完全対応は難しいだろうと諦めた。
そこで当初諦めた Linuxの DDコマンドによるバックアップを再度試してみた。最初 DDコマンドの説明を見た限り簡単にはバックアップ/リストアは難しいだろうと勝手に思いこんでいたが、いくつかの Webページ(
例)を辿ってみたところ コマンドを打ち込むことは必要だが、1行で済ませることも出来て意外と簡単だと分かったので自分用にそのメモ。
まずディスクイメージの圧縮バックアップは、/dev/sdc 上のイメージを /mnt/sda1/Linux-image/ というディレクトリに puppybackup.gzという名前で保存するには、ddコマンドの出力を gzipにパイプで渡して処理するため以下のように入力して Enterキーを押す。
# dd if=/dev/sdc bs=256k | gzip -c > /mnt/sda1/Linux-image/puppybackup.gz
圧縮しないと USBメモリの総容量と同じサイズのイメージファイルが生成されるが上記のように Gzipで圧縮したら 2.5GBほどになった。(Puppyをインストールして日本語化した直後)
このバックアップファイルを gunzipで伸長した結果をパイプで ddコマンドに入力して /dev/sddの USBメモリにリストアするには
# gunzip -c /mnt/sda1/Linux-image/puppybackup-2.gz | dd of=/dev/sdd bs=256k
と入力すれば良い。(bs=256k は一度に読み込むバッファサイズ)
ただし、バックアップした USBメモリのパーティションがディスク領域の最後まで使用しているとリストアの最後で書き込めないというエラー("No space left on device")が出て処理は完了しない。16GB>32GBのようにバックアップ元より大きな容量の USBメモリにリストアする場合などは問題にならないが、同じ容量の USBメモリにリストアする場合などを考慮して、バックアップ元の USBメモリの最後には ある程度の空き領域を確保しておくのがいいと思われる(32GB > 32GB で試したところ、空き領域 5MBではエラーが発生した。Gparted で最後のパーティションを 32MBほど減らして空き領域を増やして試したところエラーにならなかった)。
32GBの処理時間はバックアップが 8分~13分とばらついた。リストアは20分~40分弱だった。(USB3.0対応のメモリを対応ポートで試した場合)
リストアの画面は図の通りだが、1行で 解凍>USBメモリへの復元 まで連続して行われるが、その処理中は画面に何も変化がないので、アクセスLEDのない USBメモリでは一瞬「あれっ!?処理されていないかな?」と思わせられるが、そのまま待てば結果が表示される。