Файловая система только для чтения на Android

177

Недавно я основал свой Droid X, и все, кажется, работает отлично. Я внес некоторые изменения в build.prop, и когда я делаю adb push build.prop /system/, я получаю следующую ошибку: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Как я могу это исправить?

  • 16
    Вы пробовали adb remount , что вы получаете?
  • 0
    Android - это программный стек Google ... По вопросам, не связанным с разработчиком, см. Android.stackexchange.com
Показать ещё 2 комментария
Теги:

21 ответ

73
Лучший ответ

Получил это от форума Android, на котором я задал тот же вопрос. Надеюсь, это поможет кому-то еще.

В терминальном эмуляторе по телефону:

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

Затем в командной строке введите adb push

  • 3
    adb shell <command> может использоваться с компьютера (если у вас нет терминала на телефоне)
348

Не все телефоны и версии Android имеют все то же самое.
Ограничение параметров при пересоединении было бы лучше.

Просто перемонтируйте как rw (Чтение/Запись):

# mount -o rw,remount /system

Как только вы закончите внесение изменений, перемонтируйте ro (только для чтения):

# mount -o ro,remount /system
  • 26
    Вы можете сделать это на вашем компьютере тоже. Оболочка adb -o rw, remount / system
  • 0
    Благодаря тонну {:-)
Показать ещё 17 комментариев
76
adb remount

работает для меня и, кажется, является самым простым решением.

  • 5
    "adb remount - если у вас возникли ошибки при попытке отправить файлы в / system из-за того, что он находится в режиме только для чтения, adb remount перемонтирует / system в режим чтения-записи - при условии, что у оболочки правильный корень разрешения для этого. Это заменяет необходимость ввода более длинной команды вручную, такой как mount -o rw, remount / system (как root) или что-то в этом роде. " ( источник ). Если у вас есть какие-либо проблемы с правами root, попробуйте «adb root» раньше.
  • 2
    У меня Not running as root. Try "adb root" first. , И тогда adbd cannot run as root in production builds .
Показать ещё 1 комментарий
49

Пока я знаю, что вопрос касается реального устройства, если кто-то попал сюда с подобной проблемой в эмуляторе, с любыми инструментами, имеющими последнее значение с февраля 2017 года, эмулятор должен быть запущен из командной строки с помощью

-writable-system

Чтобы что-либо было доступно для записи в /system. Без этого флага никакая комбинация remount или mount не позволяет записать на /system.

После запуска эмулятора с этим флагом, один adb remount после adb root достаточно, чтобы получить разрешения для нажатия на /system.

Вот пример командной строки, которую я использую для запуска моего эмулятора:

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

Значение для флагов -avd происходит от:

./emulator -list-avds
  • 5
    Ты спас мой день!
  • 0
    моя командная строка становится очень медленной, пока не может продолжить работу с adb root и adb remount после запуска эмулятора с -writable-system, кто-нибудь может помочь?
29

Я думаю, что самый безопасный способ - перемонтировать /system как read-write, используя:

mount -o remount,rw /system

и, когда это будет сделано, перемонтируйте его как только для чтения:

mount -o remount,ro /system
  • 6
    Добро пожаловать на ТАК! Ваш ответ технически полезен, но по сути является копией предыдущего ответа curtlee2002. Это могло бы быть лучше, если бы в комментарии к его ответу говорилось: «Я согласен, что наиболее безопасно переключиться обратно в режим« только чтение »после того, как в режиме чтения и записи он переключился». У нас есть миллионы вопросов, поэтому всегда будет другой вопрос, когда вы будете первым, кто предложит вам отличное решение или новую перспективу!
  • 1
    это сработало только для меня, как только я удалил «,» из заявления. т.е. "" mount -o remount rw / system ""
Показать ещё 1 комментарий
15

На моей галактике Samsung mini S5570 (после того, как он получил корень на сотовом телефоне):

Кулак, как root, я побежал:

systemctl start adb

как обычный пользователь:

adb shell 
su 

Предоставить права доступа root на сенсорном экране

mount 

укажите все точки монтирования, которые у нас есть, и мы можем видеть, в моем случае, что /dev/stl 12 был установлен в /system как ro (только готовый), поэтому нам просто нужно:

mount -o rw,remount /dev/stl12 /system
  • 0
    Спасибо за этот ответ. По какой-то причине я никогда не смотрел на экран своего телефона, чтобы предоставить права root, и получал отказ в доступе, что бы я ни пытался.
  • 0
    говоря «Вы должны указать тип файловой системы с -t.», что это значит?
Показать ещё 1 комментарий
11

В командной строке выполните следующие действия:

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk
  • 0
    Это должен быть adb root remount
6

Вот что сработало для меня. Я запускал эмулятор Android 7.1.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

Все изменения, внесенные в/содержимое системы, сохранятся при перезапуске.

4
adb disable-verity
adb reboot
adb root
adb remount

Это работает для меня и является самым простым решением.

  • 0
    Самая крутая вещь :) Спасибо большое за то, что поделились @byInduction
3

Открыть эмулятор терминала на телефоне: затем

adb shell

после запуска этого демона

su
mount -o rw,remount /mnt/sdcard

тогда чтение только преобразуется в read-Write.

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

работает для меня

  • 0
    приятно спасибо !!! :)
1

В моем случае я использовал команду adb push ~/Desktop/file.txt ~/sdcard/

Я изменил его на ~/Desktop/file.txt/sdcard/ а затем он сработал.

Обязательно отключите и снова подключите телефон.

1
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

it sames, который должен извлечь и переупаковать initrc.img и отредактировать файл init с кодом mount/system

  • 0
    Кстати. Вы должны запустить AVD с опциями -writeable-system
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" отделен от других каталогов приложений.

Command mount -o rw,remount /mnt/asec не решила проблему "r/o fs", она хочет параметр устройства перед параметром каталога.

Команда

"df" также не помогла, но показывает, что мой каталог /mnt/asec/com.my.app-1 находится в отдельной точке монтирования.

Затем я смотрю на mount и voila!

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

Следующие шаги уже описаны вверх: перемонтируйте RW, нажмите и верните обратно в RO.

1

Иногда вы получаете ошибку, потому что место назначения в телефоне не существует. Например, какое-то местоположение внешнего хранилища телефона Android < <20 > вместо /storage/emulated/0.

1

Добавляя немного больше ответа Янга Бергстрема: потому что Android - это система на базе Linux, а в Linux в Linux содержатся косые черты (../) при использовании команды push, используйте "/" для определения пути назначения в Android-устройство.

Например, команда: adb push C:\Users\admin\Desktop\1.JPG sdcard/pictures/

Обратите внимание, что здесь обратные косые черты используются для определения пути к исходному файлу файла, который должен быть вытолкнут с Windows PC, и косые черты используются для определения пути назначения, потому что Android - это система на основе Linux. Вам не нужно действовать как root, чтобы использовать эту команду, а также отлично работает на производственных устройствах.

1

Я нашел эту статью из Google и подумал, что добавлю шаги, необходимые для Sony Xperia Z (4.2.2).

В Sony есть сторожевой процесс, который обнаруживает, когда вы изменили ro на rw в/и/system (это единственные, которые я пытался изменить) и, возможно, другие.

Следующее было тем, что я выполнял для выполнения изменений, которые я пытался достичь. Я вложил их в окно, потому что удаление бит выполнения из /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 должен автоматически перезагрузиться. (Он автоматически перезагрузился для меня.)

0

Попробуйте это в терминальном эмуляторе как root:

restorecon -v -R /data/media
0

Если произошел сбой при копировании файла, доступного только для чтения, вы можете попробовать найти исходный файл в корневом каталоге и изменить его с помощью текстового редактора корневого текста (желательно) RB, он поставляется с приложением ROM Toolbox.

0

Скопировать файлы на SD-карту?

Ну, я полагаю, вам нравится копировать данные на Sd-карту с компьютера разработчиков? Возможно, вы укоренились в разработке и сделали доступную область доступной?) У меня была проблема с загрузкой файлов данных для моего приложения (Android Studio 1.3.2 в Win7), но.

  • Сначала команда-команда adb должна быть найдена в пути: PATH =% PATH%; C:\Users\XXXXX\AppData\Local\Android\sdk\platform-tools (папка AppData скрыта, поэтому вам нужно установить настройку папки, не скрывая скрытые файлы и папку, чтобы найти ее, Path работает независимо)
  • Вам нужно указать путь к папке вправо или получить сообщение об ошибке только для чтения, скорее всего, оно должно начинаться с /sdcard или это область только для чтения. Как только я не сделал никаких проблем, нажав файл на эмулятор.

Итак, например, команда adb может выглядеть так:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню