dump/restoreコマンドでデータのバックアップ・リストアをする

まとめ

  • dump/restoreコマンドでパーティションごとバックアップ/リストアができる
  • SDカードの中身を移行するのに便利
    • もちろんHDDでもいける
    • Windowsは基本的にSDカードの第一パーティションしか認識できない

SDカードのデータ移行がしたい

Androidに使っているMicroSDが速度面で不満が出てきたため、より早い物に入れ替えを行いました。

ですが、アプリのデータを入れていたりと、通常のMicroSDと使い方がだいぶ違うため、普通にコピペでバックアップ・リストアすると、権限周りやシンボリックリンク周りで問題が起きそうでした。
ASUS MeMO Pad 7 ME572CでLink2SDを動かす

そこで、dump/restoreコマンドを使い、ファイルシステムを丸ごとバックアップ・リストアしました。今回の対象はSDカードですが、対象のデバイスは関係ないため、 HDDを対象としたバックアップも同じ手順で可能です。

SDカードの第二パーティションのマウント

Link2SDを使っているため、SDカードの第二パーティションにバックアップ対象が保存されています。このパーティションをマウントし、dumpコマンドを利用してバックアップを行います。

なお、Windowsでは基本的にSDカードの第二パーティションはマウントできないため、Linux上で作業を行いました。

# 接続された位置をfdiskで調べる
sudo fdisk -l

# 以下のようにSDカードのパーティションの位置が表示される
# /dev/sdc1 42 42424242 4242424242 42 HPFS/NTFS/exFAT
# /dev/sdc2 4242 42424242 42424242 42 Linux

# ext3でフォーマットしているのでマウントする
# (どうフォーマットしているかはその人次第です)
sudo mount -t ext3 /dev/sdc2 /mnt/sd

dumpコマンドでバックアップ

dumpコマンドを使うことで、ファイルシステムがext2,ext3,ext4のものをバックアップできます。 差分バックアップもサポートしていますが、今回はデータ移行が目的なのでフルバックアップを行います。

# mount先の/mnt/sd以下をバックアップ
sudo dump -0 -f /data/sd.dump /mnt/sd

# -0でダンプレベル0(フルバックアップ)
# -fでバックアップしたデータのファイル名を指定

restoreコマンドでリストア

restoreコマンドを使うことで、dumpコマンドでバックアップしたデータをリストアできます。 バックアップが終わった時点でSDカードをフォーマット済みの新しい物に差し替え、 上記の手順で同じ場所にマウントしてあります。

なお、restoreコマンドはリストア先を指定できそうなオプションが存在します。 ですが何故か上手く動かず、デフォルトの挙動であるカレントディレクトリにリストアされてしまうため、 事前にマウント先に移動しています。

cd /mnt/sd
restore -r -f /data/sd.dump
# -rでデータをフルリストア
# -fでバックアップしたファイルを指定

時間がかかりますが、以上の手順でデータ移行が完了します。