Smartphones scheinen nach zwei Jahren Nutzung zu sterben, als wüssten sie, dass man gerade die letzte Rate bezahlt hat.
Der häufigste Grund scheint der Ausfall des internen Speichers zu sein.
Ich versuche verzweifelt, mein Telefon diesem grausamen Schicksal zu entziehen.
Die Idee, die ich anfangs hatte, schien einfach, aber das Internet schien meinen Optimismus nicht zu teilen.
Das ist die Idee:
- erstelle ext4-Partitionen auf der SD-Karte
- mounte beim Booten SD-Karten-Partitionen auf /data
und /cache
(und vielleicht /preload
und /efs
falls sie jemals geschrieben werden)
Ich würde gerne wissen, was an dieser Idee falsch ist und warum sie nicht funktionieren kann, aber die Hauptfrage ist:
Kann ich endgültig aufhören, in den internen Speicher zu schreiben?
Ich habe alle Apps da draußen gesehen (app2sd, link2sd, DirecoryBind, s2e , wie Sie es nennen) und alle scheinen Unterverzeichnisse zu verschieben, niemals das Hauptverzeichnis /data
.
Jede Hilfe wird sehr geschätzt.
Danke schön!
Eureka!
So habe ich es gemacht:
Unsicher, welche Partitionen ich hätte verschieben können, entschied ich mich, meine SD-Karte mit genau dem gleichen Layout wie der interne Speicher meines Samsung Galaxy S III neu zu erstellen.
USERDATA
ist die letzte partition und dafür gibt es einen guten grund:
meine sd-kartengröße ist größer als der interne speicher und die beste option war es, USERDATA
bis zum möglichen weitesten sektor zu erweitern.
Folgende Arbeiten wurden in meinem Linux-PC durchgeführt:
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
Gut, Partitionen erstellt.
Jetzt imitiere ich immer noch mein Android-Gerät und formatiere Partitionen entsprechend:
# /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
Die SD-Karte ist bereit, jetzt kann ich Dateien von emmc auf die entsprechende SD-Kartenpartition "sichern", wobei ich darauf achte, die Dateiattribute beizubehalten.
fstab
In den nicht allzu alten Versionen von Android fstab
scheint sich die Datei immer unter zu befinden /
.
Dateien in /
werden in der BOOT
Partition ( boot.img
) gespeichert;
Es ist an der Zeit zu lernen, die boot.img
.
Hier sind zwei sehr hilfreiche Tutorials, die Ihnen den Einstieg erleichtern:
HOWTO: Boot-Images entpacken, bearbeiten und neu
packen Android boot.img-Manipulation
ein kleiner Hinweis:
Bearbeiten Sie die Ramdisk in Ihrem Android-Gerät.
Ich habe drei Tage frustriert damit verbracht, dies in meinem PC zu versuchen, ich denke, es ist eine Frage der "Endianness".
Sortieren Sie beim Bearbeiten der Ramdisk name-list
(Standardeingabe) nach cpio
.
Ich verbrachte drei Jahre damit, zufällig wiederkehrende Fehler zu frustrieren.
Mein fstab
Vorher:
/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
Mein fstab
danach:
/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
Ich habe nur die Blocknummer geändert (von 0 auf 1).
Ich konnte mich noch nicht trauen, umzuziehen EFS
, jemand sagte, dass Sie das Gerät irgendwie mauern könnten, indem Sie damit herumspielen und das Thema noch studieren; Ich weiß, dass Android weiter schreibt EFS
(ich überwache es).
Auf diese Weise habe ich die meisten meiner internen Speicherdaten auf meine externe SD-Karte verschoben.
Die Dinge sind erwartungsgemäß etwas träge, aber Android scheint perfekt zu funktionieren;
Ich kann in Zukunft immer in eine schnellere SD-Karte investieren.
Ich habe das alles mit meinem Samsung Galaxy S III Stock ROM gemacht, Sie müssen sich natürlich an Ihre Umstände anpassen.
Als ich schließlich CyanogenMod 13 installierte (wir wollen doch keine Stock-Firmware, oder!?), war das ein bisschen anders.
Mit einem Wiped /data
verbringt CM einige Zeit mit dem Auffüllen des Bootvorgangs /data
und an einem bestimmten Punkt gibt es einfach auf, startet neu und wechselt in den Wiederherstellungsmodus.
Nach mehreren Versuchen habe ich aufgegeben und /system
in den internen Speicher verschoben, jetzt ist alles in Ordnung.
Ich weiß das/system
ist als schreibgeschützt gemountet, aber mir ist aufgefallen, dass die emmc-Lebensdauer als Anzahl der Lese-/Schreibzyklen definiert ist, was möglicherweise darauf hindeutet, dass das Lesen im Gegensatz zu Festplatten genauso schädlich ist wie das Schreiben.
Wenn das der Fall ist, wäre ich sehr dankbar, wenn mir jemand sagen könnte, warum ich in CM nicht erfolgreich umziehen kann /system
.
@Claudio Sie haben ein sehr gutes Anliegen geäußert. Mit etwas eingebettetem Wissen kann ich eine Vorstellung davon geben:
Wenn Sie ein Gerät einschalten, wird es so programmiert, dass es von einem bestimmten Speicherort startet. Dieser Speicherplatz ist mit dem internen Speicher fest verdrahtet .
Normalerweise haben wir in Demo- Embedded-Geräten einen kleinen Schalter, mit dem wir zwischen verschiedenen BOOT-Geräten umschalten können - es kann sich um einen internen, externen oder sogar seriellen Anschluss handeln.
In Produktions- oder kommerziellen Geräten wird dieser Schalter jedoch entfernt.
Es ist also nahezu unmöglich, direkt von einem externen Speicher zu booten.
Ich wünschte, einige Unternehmen könnten eine Option (wie einen Schalter) bereitstellen, um von einem externen Speicher zu booten, selbst wenn der interne Speicher schief geht.
boot.img
Vielleicht war es in meiner Beschreibung nicht offensichtlich, aber ich wollte nie an einem anderen Ort als dem emmc
suchenIch konnte erfolgreich von der SD-Karte auf QMobile Z8 booten durch:
parted
undfdisk
dd
boot.img
) und der Dateien recovery.fstab und evenetd.rc in der TWRP-Wiederherstellung, um das Mounten und Booten von der SD-Karte anstelle des internen Speichers zu initiierenEs war nach einigen Versuchen erfolgreich. Ich denke, diese Methode sollte auf jedes Gerät mit ähnlicher Konfiguration anwendbar sein. Die zu bearbeitenden Dateien können jedoch von Gerät zu Gerät variieren.
Wenn Sie nur die externen Daten von Apps auf die SD-Karte und nicht die gesamte Partition übertragen möchten, können Sie fstab in boot.img und die Speicherliste in framework-res.apk unter Android 5 und älter bearbeiten.
Weitere Einzelheiten: [ERFOLGREICH] BOOTEN VON SD-KARTE auf QMobile Z8 mit BRICKED/DEAD eMMC
Izzy
Claudio
LJD200
Izzy
Claudio
Izzy
/data
irgendwo auf der externen Karte bedeuten, und das gleiche für/cache
. Alles andere ist meist schreibgeschützt.Claudio
Izzy
Claudio
Izzy
Claudio