Смартфоны, кажется, умирают после двух лет использования, как будто они знали, что вы только что заплатили последний взнос.
Распространенной причиной, по-видимому, является выход из строя внутренней памяти.
Я отчаянно пытаюсь спасти свой телефон от этой жестокой судьбы.
Идея, которая у меня изначально была, казалась простой, но Интернет, похоже, не разделял моего оптимизма.
Идея такая:
- создать ext4 разделы на sd карте
- монтировать при загрузке разделы sdcard в /data
и /cache
(а может быть /preload
и /efs
если они когда-нибудь будут записаны)
Я хотел бы знать, что не так с этой идеей и почему она не работает, но главный вопрос:
можно ли навсегда перестать писать во внутреннюю память?
Я видел все приложения (app2sd, link2sd, DirecoryBind, s2e, вы называете это), и все они, кажется, перемещают подкаталоги, а не main /data
.
Любая помощь будет высоко оценена.
Спасибо!
Эврика!
Вот как я это сделал:
Не зная, какие разделы я мог бы переместить, я решил воссоздать свою SD-карту с точно такой же компоновкой внутренней памяти моего Samsung Galaxy S III.
USERDATA
это последний раздел, и для этого есть веская причина:
размер моей SD-карты больше, чем внутренняя память, и лучшим вариантом было расширение USERDATA
до самого дальнего сектора.
На моем Linux-компьютере была проделана следующая работа:
parted /dev/sdb mklabel gpt \
mkpart BOTA0 ext2 8192s 16383s \
mkpart BOTA1 ext2 16384s 24575s \
mkpart EFS ext2 24576s 65535s \
mkpart PARAM ext2 65536s 81919s \
mkpart BOOT ext2 81920s 98303s \
mkpart RECOVERY ext2 98304s 114687s \
mkpart RADIO ext2 114688s 180223s \
mkpart CACHE ext2 180224s 2277375s \
mkpart SYSTEM ext2 2277376s 5423103s \
mkpart HIDDEN ext2 5423104s 6569983s \
mkpart OTA ext2 6569984s 6586367s \
mkpart USERDATA ext2 6586368s 60749824s
Хорошо, разделы созданы.
Теперь, все еще имитируя свое Android-устройство, я соответствующим образом форматирую разделы:
# /efs
mkfs.ext4 /dev/sdb3 -E root_owner=1001:1000
# /system
mkfs.ext4 /dev/sdb9 -E root_owner=0:0 -L system
# /cache
mkfs.ext4 /dev/sdb8 -E root_owner=1000:2001
# /preload
mkfs.ext4 /dev/sdb10 -E root_owner=0:0
# /data
mkfs.ext4 /dev/sdb12 -E root_owner=1000:1000
SD-карта готова, теперь я могу «резервировать» файлы из emmc в соответствующий раздел SD-карты, заботясь о сохранении атрибутов файлов.
fstab
В не слишком старых версиях Android fstab
файл всегда находится по адресу /
.
Файлы /
хранятся в BOOT
разделе ( boot.img
);
пришло время научиться редактировать файл boot.img
.
Вот два очень полезных руководства, которые помогут вам начать работу:
HOWTO: Распаковать, отредактировать и переупаковать загрузочные образы Работа с
boot.img Android
небольшая подсказка:
Отредактируйте виртуальный диск на вашем Android-устройстве.
Я провел три дня в отчаянии, пытаясь сделать это на своем компьютере, я думаю, это вопрос «порядка байтов».
При редактировании виртуального диска выполните сортировку name-list
(стандартный ввод) для cpio
.
Я провел три года, разочаровываясь в случайных повторяющихся неудачах.
Мое fstab
до:
/dev/block/mmcblk0p3 /efs ext4 noatime,nosuid,nodev,journal_async_commit,errors=panic wait
/dev/block/mmcblk0p9 /system ext4 ro,noatime wait
/dev/block/mmcblk0p8 /cache ext4 noatime,nosuid,nodev,journal_async_commit,errors=panic wait
/dev/block/mmcblk0p10 /preload ext4 noatime,nosuid,nodev,journal_async_commit wait
/dev/block/mmcblk0p12 /data ext4 noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic wait,check,encryptable=footer
Мое fstab
после:
/dev/block/mmcblk0p3 /efs ext4 noatime,nosuid,nodev,journal_async_commit,errors=panic wait
/dev/block/mmcblk1p9 /system ext4 ro,noatime wait
/dev/block/mmcblk1p8 /cache ext4 noatime,nosuid,nodev,journal_async_commit,errors=panic wait
/dev/block/mmcblk1p10 /preload ext4 noatime,nosuid,nodev,journal_async_commit wait
/dev/block/mmcblk1p12 /data ext4 noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic wait,check,encryptable=footer
Все, что я изменил, это номер блока (от 0 до 1).
Я еще не мог осмелиться переехать EFS
, кто-то сказал, что как-то вы можете заблокировать устройство, играя с этим, все еще изучая тему; Я знаю, что Android продолжает писать EFS
(я слежу за этим).
Вот как я переместил большую часть данных из внутренней памяти на внешнюю SD-карту.
Как и ожидалось, все работает немного вяло, но Android, кажется, в идеальном рабочем состоянии;
Я всегда могу инвестировать в более быструю SD-карту в будущем.
Я сделал все это со своим стандартным ПЗУ Samsung Galaxy S III, вам, очевидно, придется адаптироваться к вашим обстоятельствам.
Когда я, наконец, установил CyanogenMod 13 (нам не нужна стандартная прошивка, не так ли!?), все было немного по-другому.
С вайпом /data
CM тратит некоторое время на загрузку /data
и в определенный момент просто сдается, перезагружается и переходит в режим восстановления.
После нескольких попыток я сдался и переместил /system
во внутреннюю память, теперь все нормально.
я знаю это/system
монтируется только для чтения, но я заметил, что срок службы emmc определяется как количество циклов чтения/записи, возможно, предполагая, что, в отличие от жестких дисков, чтение так же вредно, как и запись.
Если это так, я был бы очень признателен, если бы кто-нибудь мог сказать мне, почему в CM я не могу успешно переместить файлы /system
.
@Клаудио, ты поднял очень хорошую проблему. Имея некоторые встроенные знания, я могу дать некоторое представление об этом:
Когда вы включаете устройство, оно запрограммировано на загрузку из определенного места в памяти. Эта ячейка памяти жестко привязана к внутренней памяти.
Обычно в демонстрационных встроенных устройствах у нас есть небольшой переключатель, который мы можем использовать для переключения между различными загрузочными устройствами - это может быть внутренний, внешний или даже последовательный порт.
Но в производственных или коммерческих устройствах этот переключатель будет удален.
Таким образом, загрузиться напрямую с внешней памяти практически невозможно.
Я бы хотел, чтобы некоторые компании могли предоставить опцию (например, переключатель) для загрузки с внешней памяти, даже если внутренняя память выходит из строя.
boot.img
другое место, кроме EMMC.Мне удалось успешно загрузиться с SD-карты на QMobile Z8:
parted
иfdisk
dd
boot.img
) и файлов recovery.fstab и eventd.rc в рекавери TWRP, чтобы инициировать монтирование и загрузку с SDCard вместо внутренней памятиЭто удалось после некоторых экспериментов. Я думаю, что этот метод должен быть применим к любому устройству с аналогичной конфигурацией. Однако редактируемые файлы могут отличаться от устройства к устройству.
Если вы хотите поместить на SD-карту только внешние данные приложений, а не весь раздел, вы можете отредактировать fstab в boot.img и список хранения в framework-res.apk на Android 5 и старше.
Подробнее: [КАК] ЗАГРУЗИТЬ С SD-КАРТЫ [УСПЕШНО] на QMobile Z8 с BRICKED/DEAD eMMC
Иззи
Клаудио
LJD200
Иззи
Клаудио
Иззи
/data
к какому-то месту на внешней карте, и то же самое для/cache
. Все остальное в основном только для чтения.Клаудио
Иззи
Клаудио
Иззи
Клаудио