Androidの読み取り専用ファイルシステム


212

私は最近私のDroid Xを応援しました、そしてすべてが完璧に働いているようです。に変更を加えたbuild.propところadb push build.prop /system/、次のエラーが発生しましたfailed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system

どうすれば修正できますか?


19
あなたは試しましたadb remountか、あなたは何を手に入れますか?
silverfox '19年

AndroidはGoogleのソフトウェアスタックです...開発者以外の質問については、android.stackexchange.comを
Selvin

2
この質問は、Android アプリケーションコードが読み取り専用のファイルシステムエラーで失敗する場合と混同しないでください。これは通常、場所を指定せずにファイルを書き込もうとした場合、つまりルートディレクトリに書き込もうとした場合に発生します。この質問は、ルート化/開発/エンジニアリングデバイスでのAndroid自体のインストールの変更についてのみです。
クリスストラットン

1
Androidエミュレータでこれを行う方法はありますか?これらのソリューションはどれも私のエミュレータでは機能しません。
MikeSchem 2016

回答:


388

すべての携帯電話とAndroidのバージョンに同じものがマウントされているわけではありません。
再マウント時にオプションを制限することをお勧めします。

単にrw(読み取り/書き込み)として再マウントします。

# mount -o rw,remount /system

変更が完了したら、roに再マウントします(読み取り専用)。

# mount -o ro,remount /system

29
PCでもこれを行うことができます。adb shell mount -o rw、remount / system
Matthias Weiler

8
と組み合わせて使用​​するとadb root、ファイルをプッシュするときにアクセス許可が拒否されます。
KrisWebDev 2013

1
@MikeHenke、あなたがそれを実行したときあなたはルートではなかったように聞こえます。
CurtisLeeBolin 2014

21
私にはBalazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
うまくいき

2
とにかくルートを持っていたので、ファイルを/ sdcardにコピーしてから使用しました(私の場合)mv hosts /system/etc/hosts
Lauri Elias

85
adb remount

私のために動作し、最も簡単な解決策のようです。


6
"adb remount-読み取り専用モードになっているために/ systemにファイルをプッシュしようとしてエラーが発生した場合、シェルに正しいルートがある場合、adb remountは/ systemを読み取り/書き込みモードに再マウントします---これにより、mount -o rw、remount / system(rootとして)などの長いコマンドを手動で入力する必要がなくなります。」(ソース)。root権限に問題がある場合は、前に「adb root」を試してください。
KrisWebDev 2014

4
持ってるよNot running as root. Try "adb root" first.。そしてadbd cannot run as root in production builds
Vadzim 2017

1
新しいデバイスでは$ adb disable-verity、実行する前にデバイスを再起動する必要があるようです$ adb remount
Nebel22

1
$ adb disable-verity give:disable-verityはuserdebugビルドでのみ機能します
William

3
動作しません:Not running as root. Try "adb root" first.。私が入っadb rootてから、再度adb remount、それでも同じエラー:Not running as root. Try "adb root" first.
user924

78

私が同じ質問をしたAndroidフォーラムからこれを手に入れました。これが誰かを助けることを願っています。

電話のターミナルエミュレータ:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

次に、cmdプロンプトで、 adb push


3
adb shell <command>コンピュータから使用できます(携帯電話にターミナルがない場合)
Fletcher91 '19

73

私の質問は実際のデバイスに関するものですが、エミュレーターで同様の問題が発生した場合、2017年2月の時点で最新のツールを使用して、コマンドラインからエミュレーターを起動する必要があります。

-writable-system

に書き込み可能なものは何でも/system。このフラグがないと、の組み合わせは、remountまたはmountへの書き込みを許可しません/system

そのフラグを使用してエミュレータを起動したadb remountadb rootは、1回のアフターで十分/systemです。

エミュレータを実行するために使用するコマンドラインの例を次に示します。

./emulator -writable-system -avd Nexus_5_API_25 -no-snapshot-load -qemu

-avdフラグの値は次のとおりです。

./emulator -list-avds

-writable-systemでエ​​ミュレータを起動した後、adb rootとadb remountを続行できなくなるまで、コマンドプロンプトが非常に遅くなります。
Beking Jk

29

私は最も安全な方法は/ systemを読み書き可能として再マウントすることだと思います:

mount -o remount,rw /system

完了したら、読み取り専用として再マウントします。

mount -o remount,ro /system

6
SOへようこそ!あなたの答えは技術的に有用ですが、本質的にはcurtlee2002の以前の答えの複製です。これは彼の回答に対するコメントとして、「読み書きモードで動き回った後、読み取り専用に切り替えるのが最も安全だと私は同意する」と言ったほうがいいかもしれません。何百万もの質問があるので、あなたが素晴らしい解決策または新鮮な視点を最初に持ってくる最初の質問は常にあります!
ジョナサンヴァンマトレ

1
これは、「、」をステートメントから削除して初めて機能しました。つまり、 "" mount -o
remount

@TechnikEmpire、彼は受け入れられた答えに言及していません。
Paschalis

16

私のSamsung Galaxy mini S5570(携帯電話でルートを取得した後):

拳、ルートとして、私は走った:

systemctl start adb

通常のユーザーとして:

adb shell 
su 

タッチスクリーンにroot権限を付与する

mount 

私たちが持っているすべてのマウントポイントを一覧表示すると、私の場合は/ dev / stl12が/ systemにro(ready only)としてマウントされていることがわかります。

mount -o rw,remount /dev/stl12 /system

この回答をありがとうございます。どういうわけか、ルート権限を付与するために携帯電話の画面を見ることはなく、何を試してもアクセスが拒否されていました。
グラハムミッチェル2013年

「-tでファイルシステムタイプを指定する必要があります。」と言って、これはどういう意味ですか
NehaK 2018年

私の例でext4ファイルシステムの種類を意味-t、-o RW、再マウント-t ext4のは/ dev /ブロック/ VDA /システムのマウント
セルジオ

11

コマンドプロンプトで次のことを試してください。

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk

それはadb root remount
tqjustc 2018年

10
adb disable-verity
adb reboot
adb root
adb remount

これは私にとっては機能し、最も簡単な解決策です。


7

ここに私のために働いたものがあります。エミュレートされたAndroid 7.1.1(Nougat)デバイスを実行していました。

端末で、次のコマンドを押しました。注目すべきことの1つは-writable-systemフラグです

./emulator -writable-system -avd Nexus_6_API_25  -partition-size 280

別のタブ

./adb shell
su
mount -o rw,remount -t ext4 /dev/block/vda /system

/ systemの内容に対して行ったすべての変更は、再起動後も維持されます。


4

エミュレータで確認したところ、以下のように動作しました。

  1. adbの再起動
  2. adb root && adb remount && adb push〜/ Desktop / hosts / system / etc / hosts

上記のように、シングルショットで2番目のステップを実行します。


3

電話でターミナルエミュレータを開きます。

adb shell

そのデーモンが起動した後

su
mount -o rw,remount /mnt/sdcard

次に、読み取り専用が読み取り/書き込みに変換されます。


2
mount -o rw,remount /dev/stl12 /system

私のために働く


2
This worked for me

#Mount as ReadOnly

su -c "mount -o rw,remount /system"
# Change Permission for file
su -c "chmod 777 /system/build.prop" 
#Edit the file to add the property
su -c "busybox vi /system/build.prop"
# Add now
service.adb.tcp.port=5678

# Reset old permissions
su -c "chmod 644 /system/build.prop"

# Mount as readonly again once done
su -c "mount -o ro,remount /system"

1

私はこの記事をgoogleから見つけ、Sony Xperia Z(4.2.2)で必要な手順を追加すると思いました。

ソニーには、/と/ system(これらは私が変更しようとしていた唯一のものです)およびおそらく他のユーザーでroをrwに変更したことを検出するウォッチドッグプロセスがあります。

以下は、達成しようとしていた変更を実行するために実行したものです。/ sbin / ricからの実行ビットの削除は、再起動を停止するためにすばやく実行する必要があるため、これらをウィンドウに貼り付けました。(試してみましたがstop ric、これは機能しません-電話のAndroidの以前のバージョンでは機能しましたが)。

pkill -9 ric; mount -o rw,remount -t rootfs /
chmod 640 /sbin/ric
mount -o rw,remount /system

ここでhostsファイルを変更したので、ここがファイルシステムに必要な変更を加える場所です。私たちが見つけた方法で物事を残すには、次のようにします。

mount -o ro,remount /system
chmod 750 /sbin/ric
mount -o ro,remount -t rootfs /

その時点で、ricは自動的に再起動します。(自動的に再起動しました。)


1

JanBergströmの回答にもう少し追加:AndroidはLinuxベースのシステムであり、Linuxのパスにはスラッシュ(../)が含まれているため、pushコマンドを使用するときは、「/」を使用してAndroidデバイスの宛先パスを定義します。

たとえば、コマンドは次のようになります。adb push C:\ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

AndroidはLinuxベースのシステムであるため、ここではバックスラッシュを使用してWindows PCからプッシュされるファイルのソースパスを定義し、フォワードスラッシュを使用して宛先パスを定義しています。このコマンドを使用するためにルートとして動作する必要はありません。また、本番デバイスでは完全に正常に動作します。


1

電話の宛先の場所が存在しないため、エラーが発生することがあります。たとえば、一部のAndroidフォンの外部ストレージの場所はではあり/storage/emulated/legacyません/storage/emulated/0


1

Sérgio氏、パラメータのない「mount」コマンドのアイデアに感謝します。私が作っに必要があると思いadb pushの中に/data/data/com.my.app/libいくつかのテストの問題のために、そして、「読み取り専用ファイルシステム」というメッセージが表示されます。

lsコマンドで表示されます:

root@android:/ # ls -l /data/data/com.my.app/
drwxrwx--x u0_a98 u0_a98 2016-05-06 09:16 cache drwxrwx--x u0_a98 u0_a98 2016-05-06 09:04 files lrwxrwxrwx system system 2016-05-06 11:43 lib -> /mnt/asec/com.my.app-1/lib

したがって、「lib」ディレクトリは他のアプリケーションディレクトリから分離されていることがわかります。

コマンド mount -o rw,remount /mnt/asec は「r / o fs」の問題を解決しませんでした。ディレクトリパラメータの前にデバイスパラメータが必要です。

"df"コマンドも役に立ちませんでしたが、私の/mnt/asec/com.my.app-1ディレクトリが別のマウントポイントにあることを示しています。

それから私は見てmount、ほらほら!

root@android:/ # mount ......... /dev/block/dm-4 /mnt/asec/com.my.app-1 ext4 ro,dirsync,relatime 0 0

次のステップはすでに上に説明されています:RWに再マウントし、ROにプッシュして再マウントします。


1

initrc.imgを抽出して再パックinitし、mount / systemのコードでファイルを編集する必要があります。


ところで。-writeable-systemオプションでavdを開始する必要があります
xsilen T

0

SDカードにファイルをコピーしますか?

さて、あなたは開発者のコ​​ンピュータからSDカードにデータをコピーしたいと思いますか?工夫を根付いて、対応する領域を利用可能にした可能性がありますか?)アプリケーション(Win7のAndroid Studio 1.3.2)のデータファイルをアップロードするのとほぼ同じ問題がありましたが。

  • 最初に、adbコマンドシェルを次のパスで見つける必要があります:PATH =%PATH%; C:\ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools(フォルダーAppDataは非表示なので、設定する必要があります隠されたファイルとそれを見つけるためのフォルダーを隠さないフォルダー設定、パスは関係なく動作します)
  • フォルダパスを正しく入力する必要があります。そうしないと、読み取り専用のエラーメッセージが表示されます。多くの場合、/ sdcardで始まるか、読み取り専用の領域です。問題なくファイルをエミュレーターにプッシュするとすぐに。

たとえば、adbコマンドは次のようになります。

adb push C:\ testdata \ t.txt /sdcard/download/t.txt


0

読み取り専用ファイルのコピーに失敗した場合は、ルートディレクトリで元のファイルを見つけて、ルートテキストエディター(できれば)RBテキストエディターで変更してください。ROMToolboxアプリに付属しています。


0

端末エミュレータでrootとしてこれを試してください:

restorecon -v -R /data/media

0

私の場合、コマンドadb pushを使用していました ~/Desktop/file.txt ~/sdcard/

私はそれを変更し~/Desktop/file.txt /sdcard/、それが機能しました。

電話を切断して再接続してください。


この質問の作成者は、/ systemを読み書き可能として再マウントすることについて質問します。あなたの答えは、ちょっとトピックから外れています
Metonymy

0

陳興が言及した最も簡単な方法は次のとおりです。

adb reboot

しかし、私にとっては最初に設定を変更する必要がありました。

設定→開発者オプション→ルートアクセス

ADBにルートアクセスがあることを確認します。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.