Лише файлова система для читання на 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, що ви отримуєте?
сріблофокс

Android - це стек програмного забезпечення Google ... Щодо питань, що не стосуються
Селвін

2
Зауважте, що це питання не слід плутати з випадком, коли код програми Android не вдається з помилкою файлової системи лише для читання. Це, як правило, викликається спробою написати файл без вказівки місця, тобто спробою записати в кореневий каталог. Це питання стосується лише модифікації самого Android на корінних / розробних / інженерних пристроях.
Кріс Страттон

1
Чи є спосіб це зробити за допомогою емулятора андроїда ?? Жодне з цих рішень не працює для мого емулятора.
MikeSchem

Відповіді:


388

Не у всіх телефонах та версіях Android встановлені однакові речі.
Обмеження варіантів при переплануванні було б найкращим.

Просто перерахуйте як rw (Read / Write):

# mount -o rw,remount /system

Після завершення внесення змін перейдіть до ro (лише для читання):

# mount -o ro,remount /system

30
Це можна зробити і на вашому ПК. adb shell mount -o rw, remount / system
Matthias Weiler

8
Використовуйте спільно з adb rootабо ви отримаєте дозвіл відхилений при натисканні файлу.
KrisWebDev

1
@MikeHenke, це здається, що ви не виконали корінь під час його виконання.
CurtisLeeBolin

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 - Якщо у вас виникли помилки при спробі натискання файлів на / систему через те, що він перебуває в режимі лише для читання, adb remount перезавантажить / система перетворить у режим читання-запису --- за умови, що оболонка має правильний корінь дозволу на це. Це замінює необхідність вводити довші команди вручну, такі як mount -o rw, remount / system (як root) або щось таке. " ( джерело ). Якщо у вас виникли проблеми з кореневими дозволами, спробуйте "adb root" раніше.
KrisWebDev

4
У мене є Not running as root. Try "adb root" first.. А потім adbd cannot run as root in production builds.
Вадим

1
На нових пристроях схоже, що нам також потрібно, $ adb disable-verityа потім перезавантажити пристрій, перш ніж ми зможемо запустити$ adb remount
Nebel22

1
$ adb disabled-verity give: enable-verity працює лише для побудови користувачів, що відлаштовують помилки
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

73

Хоча я знаю, що питання стосується справжнього пристрою, якщо хтось потрапив сюди з подібною проблемою в емуляторі, і будь-які інструменти є останніми на лютий 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

мій командний рядок стає надзвичайно повільним, поки не вдасться продовжувати корект adb та adb reount після запуску емулятора за допомогою -writable-system, хто може допомогти?
Beeing Jk

29

Я думаю, що найбезпечнішим способом є перерахування / системи як читання-запису, використовуючи:

mount -o remount,rw /system

і закінчивши, перерахуйте його як лише для читання:

mount -o remount,ro /system

6
Ласкаво просимо до SO! Ваша відповідь технічно корисна, але по суті є дублікатом попередньої відповіді curtlee2002. Це, можливо, було б краще, як коментар до його відповіді: "Я погоджуюся, що найбезпечніше повернутися до режиму читання лише після маніпулювання в режимі читання-запису". У нас є мільйони запитань, тому завжди буде інше питання, де ви вперше приїдете із чудовим рішенням чи новою перспективою!
Джонатан Ван Матре

1
це спрацювало для мене лише після того, як я видалив "" "із заяви. тобто "" mount -o remount rw / system ""
propjk007

@TechnikEmpire, він не посилається на прийняту відповідь.
Пашаліс

16

На моїй галактиці mini S5570 від Samsung (після отримання корінця на мобільний телефон):

Кулак, як корінь, я побіг:

systemctl start adb

як звичайний користувач:

adb shell 
su 

Надайте права доступу на сенсорний екран

mount 

перерахуємо всі точки монтажу, які ми маємо, і в моєму випадку ми можемо побачити, що / dev / stl12 був встановлений на / system як ro (тільки готовий), тому нам просто потрібно зробити:

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

Дякую за цю відповідь. Чомусь я ніколи не дивився на екран свого телефону, щоб надати права доступу до root, і мені не було дозволено доступ, незалежно від того, що я намагався.
Грем Мітчелл

кажучи: "Ви повинні вказати тип файлової системи з -t.", що це означає?
NehaK

mount -o rw, reount -t ext4 / dev / block / vda / system, -t означає тип файлової системи в моєму прикладі ext4
Серхіо

11

Спробуйте наступне в командному рядку:

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

Має бутиadb root remount
tqjustc


7

Ось що для мене спрацювало. Я працював на емульованому пристрої Android 7.1.1 (Nougat).

На терміналі я натиснув таку команду. Одне, що слід помітити, - прапор системи, що записується

./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

Я перевірив емулятор і далі працював.

  1. adb перезавантаження
  2. adb root && adb remount && adb push ~ / Настільний / хости / система / тощо / хости

Як вже було сказано вище, виконайте другий крок в одиночному пострілі.


3

Відкрийте емулятор терміналу на телефоні: потім

adb shell

після цього запускається демон

su
mount -o rw,remount /mnt/sdcard

то лише читання перетворюється на режим читання-запису.



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).

У Sony є сторожовий процес, який виявляє, коли ви змінили 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

Я змінив тут файл хостів, тому це місце, де ви вносите необхідні зміни до файлової системи. Щоб залишити речі так, як ми їх знайшли, зробіть це:

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

Після цього річ повинен автоматично перезапуститись. (Для мене він перезапустився автоматично.)


1

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

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

Зверніть увагу, що тут зворотні косої риси використовуються для визначення шляху вихідного файлу до файлу, що витісняється з Windows PC, а косої риски вперед використовуються для визначення шляху призначення, оскільки Android - це система на базі Linux. Вам не потрібно діяти як корінь, щоб використовувати цю команду, а також вона прекрасно працює на виробничих пристроях.


1

Іноді ви отримуєте помилку, оскільки місця призначення у телефоні не існує. Наприклад, /storage/emulated/legacyзамість цього знаходиться місце зовнішнього сховища для Android телефонів /storage/emulated/0.


1

Дякую, Сержіо , за команду "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


btw. ви повинні почати avd з -writeable-системними параметрами
xsilen T

0

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

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

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

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

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


0

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


0

Спробуйте це в термінальному емуляторі як корінь:

restorecon -v -R /data/media

0

У моєму випадку я використовував команду adb push ~/Desktop/file.txt ~/sdcard/

Я змінив його, ~/Desktop/file.txt /sdcard/а потім це спрацювало.

Обов’язково відключіть і підключіть телефон.


Автор цього запитання запитує про те, як перерахувати / систему як "читання-запис", ваша відповідь є якось поза темою
Метонімія

0

Як згадував Ченсін, найпростішим способом є:

adb reboot

Але мені довелося спочатку змінити налаштування:

Установки → Параметри розробника → Кореневий доступ

Переконайтеся, що в ADB є кореневий доступ:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.