スポンサーサイト

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

Androidでのバックアップの取り方

コメントで、バックアップの取り方を探していると頂いたので、あんまり詳しくはないけど、Android(Linux)でのファイルやディレクトリ、パーティションのバックアップのとり方とかを書いてみたいと思う。

基本的に、AndroidはLinuxファイルシステムなので、Linuxでのバックアップ方法がそのまま使える。
いろんなバックアップ方法が用意されているけど、自分の好きなものを選んで使えばいいと思う。。。ので、
今回は、tarでバックアップ、リストアする方法を書いてみる。

※Sharp機では、tarでパーミッションをまるごとバックアップしても、普通にリストア出来ないので、パーミッションをまるごとリストアする場合のために、oobパッチを当てたカーネルを使用し、dump_oob_imageでバックアップを取っておきましょう。(リストア時は、flash_oob_imageを使用)
※しかし、tarでバックアップを取っておけば、一部データの取り出しには使えるので、それ目的にtarでもパーミッショ全体のバックアップを取っておくことをお勧めします。(dunpで取ったバックアップでは、中身のファイルを取り出すことはできないから)

注意! 長くなるので、下の方にまとめ作ったので、まとめだけ見たい人は下の方に直行でw
>>まとめへGO!

tarでファイルやディレクトリをバックアップ、リストア

Linux上で使用されるファイルやディレクトリはパーミッションがそれぞれに付いている。
普通に、PCにpullとかでコピーしてバックアップして、それをそのまま戻しても使えない場合がある。
それは、パーミッションを含めてバックアップできていないからで、PCにコピーした段階でパーミッションが変わってしまう事が原因。
なので普通にコピーしたファイルをリストアした場合は、パーミッションを元の状態に戻さなくてはならない。
ファイルが1つや2つなら、chmodで変えてやればいいんだけど、ディレクトリに何個も大量にファイルがあって、そのディレクトリごとバックアップ、リストアした場合に、一個一個chmodなんて非効率と言うか、無理。
大量のファイルの全てのパーミッションを覚えておくのも無理だし、何千個のファイルを一個一個chmodするなんて相当暇な人以外はむりw

そこで出番なのが tar でのバックアップ。
パーミッションもそのまま残したまま固めることが出来て、リストア時もそのパーミッションを保持したまま戻せる。
固めたファイルはPCに移動しようが、net上で保存しておいたり配ったりしても大丈夫。
なので、Linux上使用するでのファイルを配布したりする場合はtar.gzを使ってることが多い。
無意味(?)に説明が長くなったけど、以下手順w


●バックアップ方法

tar zcvf バックアップ先ファイル名 バックアップ元ファイル名(ディレクトリ名)

ちょっとわかりにくいけど、バックアップ先とバックアップ元の間にはスペースあり。

●リストア方法

tar xvzf バックアップファイル名

リストア時は、カレントディレクトリにファイルが展開されるので、
カレントがどこかを把握しておくこと。
※下の、もうひとつ注意・・・以下参照
※-Cオプションを使えば解凍ディレクトリ指定できるけど、面倒なので割愛w

他にもいろんなオプションあるけど、これだけ覚えておけば自分だけでの使用なら全く問題なし。
ちなみに、バックアップファイル名は自分で好きに決められるけど、tar.gzは付けておく。
付けておかないと、ずっと経ってからそのファイルを使いたくなって解凍したいけど、どう言う形式で圧縮されたファイルかわからなくて困るなんて事になるから。

もうひとつ注意なんだけど、
バックアップ、リストア時のカレントディレクトリ(現在自分がいる場所)を考える必要がある。
(まあ、中身を確認しながらリストアしていけばいい話しなんだけど。。。^^;)

ちょっとわかりにくい説明になるけど、例えば
/data/local 以下を ”data_local.tar.gz” とSDカードにバックアップを取る。
SD、dataがマウントされた状態で、コマンドプロンプト(ターミナル)でadb接続して、

#カレントディレクトリを移動
cd /data

#バックアップを取る
tar zcvf /mnt/sdcard/data_local.tar.gz local

すると、SDカードに、data_local.tar.gzってファイルができているはず。
中身を見ればわかるんだけど、localフォルダも含めてバックアップされているので、リストア時には

#カレントディレクトリを移動
cp /data

#リストアをする
tar xvzf /mnt/sdcard/data_local.tar.gz

としてやる必要がある。
バックアップしたディレクトリまで移動してからリストアするって事。

解りやすくするためにもう一個例を上げると、

#カレントディレクトリを / にして。。。
cd /
tar zcvf /mnt/sdcard/data_local.tar.gz /data/local

としてバックアップを取った場合は、/data/localフォルダが含まれてバックアップされているのでリストア時は

#カレントディレクトリを / にしてやって。。。
cd /
tar xvzf /mnt/sdcard/data_local.tar.gz

としてやらなければならない。
要はカレントディレクトリを意識してバックアップ、リストアをする必要があると言う事。
意識しないでバックアップ、リストアしてみると。。。

#これは悪い例です
cd /
tar zcvf /mnt/sdcard/data_local.tar.gz /data/local
cd /data
tar xvzf /mnt/sdcard/data_local.tar.gz

こんなふうにしちゃうと、/data/data/local/以下 が作成されちゃって、おかしなことになってしまうって事ですw
WindowsでネットからzipファイルとかDLしてきて、デスクトップに解凍してみたら、フォルダが含まれていないzipファイルで、デスクトップが大変なことになっちゃった!なんて事誰でも経験あるのではないかな?と思うwww
それと同じ事。

まあ、一番簡単な方法は、バックアップしたいディレクトリに移動してフォルダを含めずにバックアップを取るってことかな。。。

#バックアップ時
cd /data/local
tar zcvf /mnt/sdcard/data_local.tar.gz *

#リストア時
cd /data/local
tar xvzf /mnt/sdcard/data_local.tar.gz

バックアップ時の、バックアップ元ファイルの所に、”*”を指定すればカレントディレクトリの全てをtar.gzで固められる。
(↑解りやすく全角で*って書いたけど、本当は半角の*ね。。。w)
この方法だと、フォルダは含まれずファイルのみの圧縮になるので、とりあえず解凍したいディレクトリまで移動して解凍すればいいってことになる。

とりあえず、リストア時は、中身を確認して、どこからtarしたのか確認してからにしましょう。
中身の確認の仕方は、

tar tf ファイル名

これで中身を見ることが出来るので、どこでリストアすればいいのか確認できる。

ついでに、tarの中身の1個だけ出したい時は、

tar xvzf バックアップファイル名 取り出したいファイル名


例:(今回は表示を解りやすくするために、$も付けて書いてみる)

#バックアップ
$cd /data/local
$tar zcvf /mnt/sdcard/data_local.tar.gz *

#中身確認($が付いていない部分は自動で表示される中身)
$tar tf /mnt/sdcard/data_local.tar.gz
abc.sh
def
ghijk.apk

#中身のabc.shだけリストア
$cd /data/local
$tar xvzf /mnt/sdcard/data_local.tar.gz abc.sh

やってみれば割と簡単に出来る。
パーティションまるごともバックアップ出来るし、取り出したいファイルを選んでリストアも出来るし、速度は遅いみたいだけど自分はこれが楽な気が。。。する。。。

他には、ddを使ったバックアップもある。
ddは、まるごとバックアップ・リストアする場合は便利だけど、中身の1つを取り出すとかできないから、端末いじくり回す目的での使用ならtarの方が便利。
まあ、オプションの使い方がいまいち解ってないのでtarの方を使っちゃうってのもあるんだけどw


そんな訳で、かなり長くなってわかりにくいから、まとめ・・・w

●tarを使ったバックアップ基本

tar zcvf バックアップ先ファイル名 バックアップ元ファイル名(ディレクトリ名)

※バックアップ先ファイル名には、拡張子 .tar.gz を付けておくこと推奨。
※バックアップ元ファイル名に*を指定してやれば、カレントディレクトリにあるファイル全てをカレントディレクトリフォルダを含めず固めることが出来る。
※バックアップ元にディレクトリを指定してやると、そのフォルダも含めて固められる。


●ディレクトリの中の特定のファイルのみ固める(複数可)

tar zcvf バックアップ先ファイル名 バックアップ元ファイル名1 バックアップファイル名2

※ディレクトリ内の複数のファイルを固めたい時は、バックアップ元ファイル名をスペースを開けて並べていく。


●tarで作ったファイルをリストアする基本

tar xvzf バックアップファイル名

※カレントディレクトリに tar.gz 内の全てのファイルが展開される。
※リストア時はバックアップファイルの中身のディレクトリ構成を確認して解凍すること。


●固めたtar.gzファイルの特定ファイルの抜き取り

tar xvzf バックアップファイル名 取り出したいファイル名

※取り出したいファイル名に指定したファイルは、カレントディレクトリに展開される。
※複数取り出したい場合は、スペースを開けて並べて書いていく。
※当然のことながら、tar.gz内に一つしかファイルが入っていない場合はファイル名を指定する必要はない。


●tarで作ったファイルの中身の確認

tar tf ファイル名

※ここで、 ○○○/ って入ってればフォルダが含まれているし(○○○はフォルダ名)、ファイル名だけだったらフォルダは含まれていない。




う〜〜ん、まとめてもわかりにくいな〜〜www
でも、自分で実際にやってみるとこう言う事か!とわかると思うw

以上tarを使ったバックアップ方法でしたw
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

tozionsdoor

Author:tozionsdoor
ただ書くだけ。スクショとか取るの面倒。貼るのも面倒w

検索フォーム
FC2カウンター
最新記事 5件
最新コメント
月別アーカイブ
カテゴリ
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。