スポンサーサイト

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

SH-12C 文鎮化からの復帰

何度か、SH-12Cの文鎮化より復帰は?と言うコメントを頂いたので、少しだけどその事について書いてみたいと思う。

文鎮化しないための条件とか


root取得記事にもほんの少し触れているんだけど、
文鎮SH-12Cは、boot領域にレスキュー(リカバリ)可能なbootイメージを焼いていないと、復旧はほぼ不可能と言っていい。
※ほぼと書いたのは、過去にバッテリー抜いたりしてたら治ったとかスレにあったのでw まあ、それは正しくは文鎮化していなかったと言う事なんだろうけど、そんな事もあるかも知れないってことで。。。w

この”boot領域に”って言うのが重要で、なぜrecovery領域に焼いている状況で文鎮化した時に復旧不可能かと言うと、、、

普通の再起動と言うのは基本的にboot領域から行われるもので、recovery領域から起動したい場合は、コマンドでreboot recoveryしないといけない(アプリでrecoveryから起動ってのも出来るけど結局は同じ事)。
又、SH-12Cは、ボタンコンボ(ボタンの同時押し)起動とかでrecovery領域からの起動は出来ない。
バッテリーを引っこ抜き再起動した場合もboot領域からの起動になり、それでも起動しない場合は、もうrecovery領域からの起動は出来ない。
つまり、boot領域からの起動に失敗すると、もうrecovery領域からの起動が不可能って事になるので、文鎮化確定。
よく、「boot領域に焼いた方が、文鎮のリスクが少ない」って見かけるのはその為。

って事。

ボタンコンボ等の方法でrecovery領域からの起動が不可能な機種では、rooted可能かつレスキュー(リカバリ)可能なbootイメージをboot領域に焼かないと意味がないと言う事なのです。

まとめると。。。。

SH-12Cでのrootedは
●rooted可能かつレスキュー(リカバリ)可能なbootイメージを、boot領域に焼かないと意味がない(断言)。
●recovery領域に焼くのは、テストの為だけで、テストが終わったら元のrecoveryイメージを焼き直す。
●出来る事なら、oobパッチの適用されたbootイメージを使い、各パーティションのバックアップは取っておく。



こうは言ったものの、上の方法でも文鎮化してしまう可能性が全くないっては言い切れない。
boot領域にカスタムイメージを焼くってことは、その行為自体失敗してしまうと即文鎮確定になる。
やはり、自己責任&しっかり理解をした上で行わなければいけないってことですね。


文鎮化してしまう原因とか


文鎮化してしまったと言っても、原因がそれぞれ違うわけで、その原因ってのを少し羅列してみたいと思う。
●起動に必要なsystemが壊れた
●止めてはいけないサービスを止めてしまった
●recovery領域にカスタムイメージを焼いていて、初期化操作をしてしまった
●boot領域へのflash(焼く行為)に失敗した
●いろいろ弄った状態でアップデートしてしまった。

・・・・これくらいしか思いつかないwww
flashの失敗は有無を言わさず文鎮確定。
アップデートも文鎮確定。
その他は条件によっては復旧可能となる
recovery領域にカスタムイメージを焼いていて初期化操作も文鎮確定だった。

その条件は、上でも言っている、boot領域にレスキュー(リカバリ)可能なイメージを焼いていること。


文鎮化からの復旧

簡単に復旧方法を書いてみる。
何度も言うが、boot領域にレスキュー可能なイメージを焼いていることが条件になる。
現在入手出来るrooted可能でレスキュー(リカバリ)可能なbootイメージはというと、

●goroh_kunが作ってくれた、起動時にadb接続可能なbootイメージ
●2chのSH-12Croot2スレで452さんが作ってくれたレスキューモード可能なイメージ

このどちらかをboot領域に焼いているってこと前提。
以下、レスキューモード(リカバリモード)に入っての作業。

1,起動時に必要なsystemが壊れ文鎮化した


復旧方法:adb接続にて、systemをマウントし、バックアップしてあるsystemと入れ替える。

これは、当然バックアップが無ければ復旧はむずかしい。
しかし、どのファイルを弄ったかがわかっていれば、そのファイルを正しく修正すればいい。
systemファイル弄るのに、バックアップを取らない人はいないと思うので、ここいら辺は問題ないはず。


2,止めてはいけないサービスを止めてしまった

復旧方法:adb接続にて、サービスを復旧する。

どのサービスを止めてはいけないのかは、ググればスグ見つかる。
ワンセグとか、SIM Toolkitとか。。。

コマンドでの復旧になるけど、これもすぐ見つかるはず。


3,recovery領域にbootイメージを焼いた状態で初期化してしまった


復旧方法:adb接続にて、/cache/recoveryを削除

これでいけた様な気がするw
要は、初期化すると、/cache/recoveryに初期化しろと言う情報が書かれ、recoveryからの再起動がかかるんだけど、recovery領域にはbootイメージが焼かれているので、再びrecoveryから起動しろと命令が出て、ループして文鎮化って事なので、
そいつを消してやればいいって事。
まあ、やってみたことは無いので何とも言えないけど、復旧できるはず。


文鎮確定

boot領域にカスタムカーネルイメージ、recovery領域に正規recoveryイメージで初期化作業をしてみたら、
レスキューモードに移行する前にリカバリ作業が始まってしまった。
ってことは、initよりも/cache/recoveryの方が優先されるってことで、レスキューモードには入れなくなってしまうってこと。
ってことは、これまた文鎮確定ってことなんだ・・・。
勉強になった。^^:

<終わりに>
スレでも以前はたまに見かけたんだけど、
boot領域、bootイメージ、recovery領域、recoveryモード、recoveryイメージ、recovery領域からの起動
これらを混同している人が居るみたい。
簡単に説明すると(説明が適当すぎてごめんなさいw)、

boot領域:起動する時に必要な物が入っているパーティション
bootイメージ:起動情報等が書かれたイメージ
recovery領域:初期化に必要な物が入っているパーティション
recoveryモード:goroh_kunや452さんが作ってくれたイメージからの起動でのみ入れる特殊なモード
recoveryイメージ:初期化に必要な情報等が書かれたイメージ
recovery領域からの起動:recovery領域にbootイメージを焼いている人がそこから起動すること。

recoveryモードとrecovery領域からの起動を混同する人がいたってことで、452さんはレスキューモードと名前を変えてくれた。

何度も言うようだけど、root取得していろいろ弄りたいのなら、絶対boot領域にレスキュー(リカバリ)モードに入れるbootイメージを焼いておくほうがいいってことです。
boot領域へのflash時のリスクより、recovery領域にflashして使用し続けるリスクのほうが全然高いって事を理解して、楽しいrooted生活を送りましょう^^

スポンサーサイト

SH-12C CIFS

久しぶりの更新となるのだけど、どうにもSH-12Cでやること(弄ること)が無くなってきちゃって、普通に使っていて不便はさほど感じないのだけれど、なにかしたいぞ!と思ったのであった。。。w

それで思いついたのが、CIFS。

スマホは外に持って出る端末なので、ネットワークファイルをマウントするなんて必要はほとんど無いと思う。
しかし! やることがないから。。。w

現在452さんが作ってくれたカスタムカーネルイメージを使っているのだけど、CIFSは対応していない。
それなら、cifs.koを作ってやろう!

と言う訳で、あれこれ調べて、やっと動くモジュール達が出来たので、晒すことにした。

まずはじめに、CIFSとは何ぞ?

CIFSとは、ネットワーク上にある共有フォルダを、Windows以外でも使ってしまおうと言う物。
それを使うと、Android上にネットワーク共有フォルダをマウントできてしまう。
マウントするか、ネットワークファイルとして使うかの違いはと言うと。。。
マウントすると、あたかもそのファイル達が端末内にあるように見えるので、ネットワークファイルに対応していないアプリ等でそのファイルを開けたり使えたりする。
今のアプリはネットワークに対応しているものが多いので、使うメリットはそんなに無いんだけど、、、
でもでも、例えば1TBのHDDをマウントしたとすると、端末の容量が1TB以上になるって事!!!w
HDD内のあんな動画も、こんなマンガもSDに移動すること無く開くことが出来るってことだよね〜www

まあ、ネットワーク環境内に居ること前提になってしまうんだけど。。。ね。


説明がちょっと長くなったけど、とりあえずファイル。。。
SH-12C カーネルバージョン 2.6.35.7-perf  専用 CIFSに必要なファイル
cifs.zip

最近、4Sharedは、サインアップしないとDLできなくなってしまったみたい。
めんどくさいと思うけど我慢してください。。。ごめんなさいw

それでは、使い方。


導入

まず、ダウンロードしたzipファイルを好きな場所に解凍する。
ここでは、例として
C:\Android\cifs
と言う場所に解凍することにする。
その中には下の4つのファイルがあるはず。

slow-work.ko
cifs.ko
nls_utf8.ko
readme.txt

ここ迄いったら、SH-12CをPCに繋ぐ。
そしてコマンドプロンプト(又はターミナル)より、(#部分はコメントなので打つ必要なし)

#ディレクトリ移動
cd C:\Android\cifs

#必要モジュールを端末に移動
adb push slow-work.ko /data/local
adb push cifs.ko /data/local
adb push nls_utf8.ko /data/local

#adb shellに入りsuする
adb shell
su

#systemが読み取り専用なので、読み書き可能にする
mount -o rw,remount /system

#モジュールをコピーする(mvで移動でもOK)
cp /data/local/slow-work.ko /system/lib/modules
cp /data/local/cifs.ko /system/lib/modules
cp /data/local/nls_utf8.ko /system/lib/modules

#パーミッションを変更
chmod 644 /system/lib/modules/slow-work.ko
chmod 644 /system/lib/modules/cifs.ko
chmod 644 /system/lib/modules/nls_utf8.ko

#なんか嫌なので、読み取り専用に戻す
mount -o ro,remount /system

#マウントポイントを作る※1
#/mnt以下にフォルダを作りたいからrwでリマウントし、作成、roに戻す
mount -o rw,remount /
mkdir -p /mnt/cifs/ShareFolder   #※2
mount -o ro,remount /

#モジュールをロードする※3
insmod /system/lib/modules/slow-work.ko
insmod /system/lib/modules/cifs.ko
insmod /system/lib/modules/nls_utf8.ko

あとは、マウントするだけ。

※1 マウントポイントとは、マウント先のフォルダとなるもの。
   例えば、/mnt/cifs/ShareFolderにマウントしたら、そこにネットワーク上のファイル達が展開されて見える。

※2 例として ShareFolder と言う名前のフォルダを作ったけど、好きな名前でOK。
   ネットワーク共有フォルダ名が Documents だったら、 /mnt/cifs/Documents とかにする。
   複数の共有フォルダをマウントしたい場合は、その数ぶんフォルダを作成する。

※3 insmodの順番は、この通りにする事推奨。とりあえず、一番最初はslow-work.koで。



マウント

マウントする方法は、大きく分けて2つある。
①コマンドによるマウント
②アプリを使用してマウント


①コマンドによるマウント
コマンドプロンプト(又はターミナル)より、adb shellに入り、suした上で、

mount -t cifs -o username=USERNAME,password=USERPASS,iocharset=utf8 //192.168.*.*/ShareFolder /mnt/cifs/ShareFolder

改行は入らないで1行。
USERNAME、USERPASS、IPアドレス、ShareFolderの部分は自分の環境に合わせて。

②アプリを使用してマウント

GooglePlayからインストール出来るアプリ
CifsManager とか MountManager とかを使う。

この2つを使ってみたけど、一長一短。
MountManagerは、必要モジュールを登録して、自動でinsmodしてくれたりするんだけど、
読み込み専用のところにあるマウントポイントにはマウントできないし。。。
CifsManagerは、cifs.koしか登録できないので、自分でモジュールをinsmodしないといけない。

自分の中で面倒だけどこれでいいかな。。。と思った使用方法は、

MountManagerにモジュールを登録しておいて、自動でinsmodさせて、
マウント自体はCifsManagerでする

って事かな。

(再起動すると、モジュールのロード(insmod)を再びやらなければならない。)
(MountManagerでモジュールロードは1回やれば再起動しなければやらなくて良い)

アプリは英語だけど、調べる必要もなく簡単(だと思う)ので、自分で弄ってみてください(手抜きw)。



アンマウント

umount /mnt/cifs/ShareFolder

当然のことながら、ShareFolder部分は、マウントポイント名で。
アプリでアンマウントなら、コマンド打つ必要はなし。



ネットワーク環境から外れる時、もしくはWiFiを切るときには、アンマウントすることをおすすめする。
自分はそれでちょっとおかしな状態になったことがあるので。(アプリ側で)


後書き

上にもちょろっと書いたけど、再起動するとモジュールはもう一度ロードし直さなければならない(insmod)。

やっぱり、再起動のたびにコマンドで insmod とか、 mount / umount するのはかなり面倒なので、
アプリを使ってやってもらうのがおすすめ。。。

readmeには、autoexec.shにinsmod部分を書けばとか書いたけど、
上でちょろっと書いた方法(MountManagerでinsmodをやってもらい、CifsManagerでmount)を実行すれば、
モジュールロードは再起動後1回やればいい(自動化も出来る)ことだし、
わざわざautoexec.shに書く必要なんか無いなって思ってきたw

と言う訳で、今更cifs楽しんで〜^^w

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。