[How-To] Apps2SD auf dem Milestone

  • 292 Antworten
  • Neuster Beitrag
mojo

mojo

Fortgeschrittenes Mitglied
Threadstarter
Howto Apps2SD auf Milestone 2.0/2.0.1/2.1

Bentötigt wird ein Milestone mit Speicherkarte, root Zugriff, funktionierendem adb und busybox (bei mir in /data/busybox).
Ich empfehle vorher ein nandroid Backup und Geduld bei den Befehlen.

1) Die Datei aus dem Anhang dieses Posts entpacken und zusammen mit der ext2.ko aus dem Anhang von newtons Post auf die Speicherkarte kopieren.
https://www.android-hilfe.de/forum/root-hacking-modding-fuer-motorola-milestone.60/speicherkarte-zum-auslagern-von-inhalten-aus-der-datenpartition-nutzen.15044-page-2.html#post-178776

2) Alle Dateien der Speicherkarte sichern (auch das nandroid-backup)
Speicherkarte vorbereiten, so dass nachher in /dev/block/mmcblk0p1 eine formatierte Fat Partition ist
und in /dev/block/mmcblk0p2 eine ebenfalls formatierte ext2. Wer das alleine kann, kann diesen Abschnitt überspringen,
ansonsten hier eine Anleitung für die man keinen Kartenleser braucht, dafür aber Linux (oder Cygwin...)

2.1) Milestone an den PC anschliessen, mit USB Modus "Verwaltung der Speicherkarte"
Speicherkarte unmounten, falls sie automatisch vom PC gemountet wurde.
Ich gehe im Folgenden davon aus, dass die Speicherkarte in /dev/sdb liegt.

Jetzt die Partitionen anlegen mit (am lokalen PC als root eingeben): fdisk /dev/sdb
Hier meine Befehle mit kurzen Erklärungen, immer mit Enter bestätigen:

(Alte Partition löschen)

d

(Neue Partition anlegen)
n
p
1
enter
+7000M (so groß wird nachher die normale SD Partition, wer eine 16 GB Karte hat, kann hier natürlich einen größeren Wert eingeben)

(Als FAT deklarieren)
t
b


(Neue Linux Partition anlegen (sie belegt den Rest der Karte), da liegen nachher die apps drauf)
n
p
2
enter
enter

Bei Problemen kann man sich mit m die Befehle ausgeben lassen.
Jetzt mit p die Partitionen anzeigen lassen, bei mir sieht das Ganze so aus:
Dann mit w schreiben und beenden

Code:
Command (m for help): p

Disk mmcblk0: 7948 MB, 7948206080 bytes
96 heads, 22 sectors/track, 7350 cylinders
Units = cylinders of 2112 * 512 = 1081344 bytes

   Device Boot      Start         End      Blocks  Id System
mmcblk0p1               1        7001     7393045   b Win95 FAT32
mmcblk0p2            7002        7350      368544  83 Linux
Jetzt muss alles Formatiert werden (auch am PC eingeben):

Code:
mkfs.msdos /dev/sdb1
mkfs.ext2 /dev/sdb2
tune2fs -c 0 /dev/sdb2
Soweit so gut, jetzt das Milestone wider auf USB Verbindung "Keine" stellen.
Am Milestone sollte die Speicherkarte wieder erkannt werden, ohne dass irgendwas formatiert werden muss.
Die SD ist leer, und etwas kleiner als vorher (ich hab jetzt 7485MB frei).

Jetzt können wir den Inhalt unserer Sicherung der SD wieder zurück spielen (auf dem PC nicht löschen, Backups sind immer gut)
Das können wir aber auch später machen.


3) [Jetzt gemacht wird: Linux Partition mounten, Programme verschieben, Symlinks setzten]
Ab jetzt werden alle Befehle auf dem Gerät ausgeführt.
Dafür am PC mit adb auf das Milestone verbinden und Root rechte erlangen:

Code:
adb shell
   su
Jetzt das ext2 Kernelmodul laden (natürlich vorher auf die SD kopieren, falls noch nicht alles zurück gespielt wurde),
dann einen neuen Ordner erstellen, und die Linux Partition dort hin mounten:

Code:
cp /sdcard/ext2.ko /data/ext2.ko
   insmod /data/ext2.ko
   mkdir /data/sdapp
   mount -t ext2 /dev/block/mmcblk0p2 /data/sdapp
Jetzt alle apps auf die neue Partiton kopieren und löschen.
Achtung: Es kann vorkommen, dass die Apps beim ersten Kopieren aus irgendeinem Grund nicht auf der SD Karte bleiben und nach einem Neustart weg sind.
Daher besser zusätzlich nochmal auf die FAT Partition der SD kopieren.

Code:
cp /data/app/* /data/sdapp/
mkdir /sdcard/sicherung
cp /data/app/* /sdcard/sicherung
   rm -r /data/app
Einmal aus und neu einhängen:
Code:
umount /data/sdapp   
   mount -t ext2 /dev/block/mmcblk0p2 /data/sdapp
Es sollten keine Programme mehr auf dem Milestone startbar sein.
Es kann sein, dass einige Programme auf dem Milestone crashen, das war zu erwarten.
Jetzt den Symlink setzen, vorher prüfen, ob die Apps auf der SD sind:
Code:
   ls /data/sdapp
   ln -s /data/sdapp /data/app
   chmod 644 /data/sdapp/*
   /data/busybox/chown -h 1000:1000 /data/app 
   /data/busybox/chown 1000:1000 /data/sdapp/*
   /data/busybox/chown 1000:1000 /data/sdapp
Testen und siehe da: alle Programme starten wieder. Von der SD.

Soweit so gut, jetzt könnte man es benutzen.
Wer das Milestone jetzt neu startet wird sehen, dass er bis zum Desktop kommt, da nach aber lauter Fehler sehen.
Das kann man auch ausprobieren, da passiert nix.

Damit alles wieder geht, müssen diese Befehle auf dem Gerät ausgeführt werden, die ab jetzt bei jedem Start ausgeführt werden müssen:
Code:
   insmod /data/ext2.ko
   mount -t ext2 /dev/block/mmcblk0p2 /data/sdapp
4) Die Befehle automatisch starten lassen.
Dafür /system beschreibbar machen, mot_boot_mode umbenennen, und das das Script aus dem Anhang dieses Posts
nach /system/bin kopieren (vorher natürlich auf die SD, Rechte vergeben:
Code:
   mount -o remount,rw     / /system
   mv /system/bin/mot_boot_mode /system/bin/mot_boot_mode.bin
   cp /sdcard/mot_boot_mode_script /system/bin/mot_boot_mode
   chmod 755 /system/bin/mot_boot_mode
6) Neustarten und ausprobieren.
Die Widgets werden anfangs nicht richtig laden, und auch das Startmenü braucht etwas länger.
Die fehlerhaften Widgets müssen entfernt und nochmal von Hand hinzugefügt werden,
ab dann gehen sie auch beim nächsten Start.
Programme können normal vom Market installiert oder gelöscht werden, sie landen auf der SD.
Wenn ihr ab jetzt den USB Modus auf "Verwaltung der Speicherkarte" stellt, könnten Apps crashen.

Apropos Crashen: Ein Paar Apps starten nicht mehr.
Nach meinen Erfahrungen alle, die GPS und/oder Internetzugriff brauchen.
Bis jetzt konnte ich das Problem bei allen Apps durch Löschen und Neuinstallieren beheben,
aber vielleicht kennt jemand von euch noch einen besseren Weg.


7) Wenn alle Programme auf einmal weg sind oder nicht mehr starten keine Angst,
wenn man einen normalen /data/app Ordner erstellt und die Apps wieder reinkopiert geht alles wieder.
Wer will, kann auch erstmal alles von /data/app auf die SD sichern und auf den PC kopieren.

Wenn das Milestone nicht mehr startet, arbeitet der Wrapper nicht richtig.
Dann entweder ein nandroid-backup zurückspielen und alles nochmal machen,
oder mittels ADBRecovery über adb auf das Gerät zugreifen, /system mounten,
den Wrapper /system/bin/mot_boot_mode löschen und die alte Datei zürck umbenennen:
mv /system/bin/mot_boot_mode.bin /system/bin/mot/boot_mode
Dann startet er wieder.

Ich bitte diejenigen, die die Befehle kennen und wissen was passiert,
das Howto auszuprobieren und mir Feedback zu geben.
Ich habe momentan nicht so viel Zeit, kann also bei Problemen nur bedingt helfen.

Für diejenigen, die hier noch keinen Account haben,
hier der Inhalt des Scripts aus dem Anhang:
Code:
#!/system/bin/sh
export PATH=/system/bin:$PATH
mot_boot_mode.bin
insmod /data/ext2.ko
mount -t ext2 /dev/block/mmcblk0p2 /data/sdapp
Übrigends:
nandroid-mobile.sh wird die apps-Partition auf der SD Karte nicht von alleine Backupen.
Um diese muss man sich also selbst kümmern.
Nach dem Ausführen von 'nandroid-mobile.sh --backup' kann man die apps-Partition so sichern:
Code:
mount /sdcard
dd if=/dev/block/mmcblk0p2 of=/sdcard/apps2sd.img
Damit wird die ganze Partition in eine Datei auf den normalen Bereich der SD kopiert,
diese kann man normal auf den PC kopieren, so wie den nandroid-Backup Ordner auch.
Das kann mehrere Minuten dauern und es muss auf der SD noch genup Platz für die apps-Partition sein, nicht nur für den dort belegten Speicher!
Zum Zurückspielen erst 'nandroid-mobile.sh --restore' und dann:
Code:
mount /sdcard
dd if=/sdcard/apps2sd.img of=/dev/block/mmcblk0p2
Achtung: der dd-Befehlt ist ziemlich 'grob'.
'if' ist das input-file und 'of' das output-file.
Das Output File wird einfach überschrieben, egal was da vorher war,
und egal ob da überhaupt genug Platz ist.
Es ist also nicht möglich, ein apps2sd.img wiederherzustellen,
wenn man nach dem Sichern die SD nochmal neu partitioniert und die Apps Partition verkleinert hat!


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Teil 2 - Apps2SD wider rückgängig machen.

Wer Apps2SD (zum Beispiel vor dem Update auf 2.1) wieder loswerden möchte,
kann dieser Anleitung folgen.
Ich gehe im Folgenden davon aus, dass Apps2SD mit den obigen Befehlen
eingerichtet wurde. Wer oben von der Anleitung abgewichen ist
muss auch jetzt seine Befehle anpassen.

1) Wrapper entfernen

Code:
adb shell
su
mount -o remount,rw / /system
cat /system/bin/mot_boot_mode
Jetzt muss das Shellscript angezeigt werden.
Wenn jetzt Datenmüll kommt nicht weitermachen!

Code:
rm /system/bin/mot_boot_mode
mv /system/bin/mot_boot_mode.bin /system/bin/mot_boot_mode
2) Apps wieder auf den internen Speicher kopieren:
Code:
ls -l /data/app
In der Zeile die jetzt erscheint muss sichtbar sein, dass /data/app ein Link ist.
Am Ende sollte also etwas in der Art "app -> /data/sdapp" stehen.
Wenn das nicht da steht nicht weitermachen!

Code:
rm /data/app
mkdir /data/app
Jetzt kontrollieren ob intern genug Platz frei ist.
Code:
df -h
In der Zeile für /data (Spalte: Mounted on) muss bei dem freien Speicher mindestens so viel Platz angzeigt werden,
wie auf der apps-Partition (auf der SD) belegt ist.
Wenn das erfüllt ist, geht es weiter, sonst müssen Programme gelöscht werden.
Also weiter:
Code:
cp /data/sdapp/* /data/app 
chmod 644 /data/app/*
/data/busybox/chown 1000:1000 /data/app/*
/data/busybox/chown 1000:1000 /data/app
Milestone neu starten.
Ab jetzt werden die Programme wieder vom internen Speicher geladen.
Dabei kann es wieder zu Abstürzen und Widget Problemen kommen,
neu Installation der betroffenen Apps behebt auch hier das Problem.

Da das System nicht mehr auf den /data/sdapp-Ordner zugreift,
können wir diesen der Ordnung halber löschen.
Nachfolgender Befehl sollte ohne Probleme gehen,
da die SD-Partition nicht mehr gemountet wird.
Wenn nicht, ist möglicherweise der Wrapper noch aktiv,
oder es wurden von Hand Dateien in den Ordner kopiert.
Code:
rmdir /data/sdapp
Jetzt könnten wir ein Update installieren und da nach, ohne die Speicherkarte neu
partitionieren zu müssen, Apps2SD wieder installieren.
Wer die SD wieder auf den alten Stand haben will,
kopiert erst alles auf den PC und geht dann auf
Einstellungen -> SD Karte -> SD-Karte entnehmen , SD-Karte formatieren.
Dabei wird meiner Erfahrung nach die ursprüngliche Partitionstabelle wieder angelegt.
 

Anhänge

  • mot_boot_mode_script.zip
    250 Bytes Aufrufe: 1.191
Zuletzt bearbeitet:
cooper1988

cooper1988

Fortgeschrittenes Mitglied
darf ich dich heiraten?
 
mojo

mojo

Fortgeschrittenes Mitglied
Threadstarter
Nicht so schnell ;)

Ich habe es selbst noch nicht lange installiert,
und kann nur schwer einschätzen,
ob die Programme so stabil und schnell wie vorher laufen.
 
N

newton

Fortgeschrittenes Mitglied
Man könnte auch anstelle die alte Partition löschen und zwei neue anlegen die bestehende mittels z.B. gnu parted (parted) verkleinern...

Die Daten sollte man natürlich sicherheitshalber trotzdem woanders sichern.
 
B

BigBoi

Neues Mitglied
Gute Arbeit, sehr ausgefeiltes Tutorial. *2 Thumbs Up*

Hoffentlich bekommen wir bald Feedback was Systemgeschwindigkeit und -stabilität angeht. Da ich bisher noch keinen mangelnden Speicherplatz hatte, werde ich es erst mal nicht probieren. Und mit ner Class2-Karte wird's sicher nicht schneller. :p
 
mojo

mojo

Fortgeschrittenes Mitglied
Threadstarter
Ursprünglich wollte ich nicht gleich alles auslagern,
sondern nur einzelne .apk Dateien.

Die Symlinks für einen ganzen Ordner akzeptiert das Milestone sofort,
und die Programme erscheinen wieder im Startmenü/Launcher.

Wenn ich Symlinks auf einzelne Dateien setze,
passiert leider nichts, er ignoriert den Link einfach.
 
B

Bavilo

Fortgeschrittenes Mitglied
Kannst du mir erklaeren wie ich dies hinbekomme?

Code:
/data/busybox/chown -h 1000:1000 /data/app 
   /data/busybox/chown 1000:1000 /data/sdapp/*
   /data/busybox/chown 1000:1000 /data/sdapp
Bei mir steht da als user -h existiert nicht, und user 1000:1000 existiert nicht... o.o
 
mojo

mojo

Fortgeschrittenes Mitglied
Threadstarter
Der Parameter geht nur mit der chown-Binary aus busybox.
Falls du bereits busybox hast, kann es an dem Busybox-build liegen.
Ob man die Rechte in der Form zwingend braucht,
und ob der Android-eigene chown Befehl das möglicherweise doch kann kann ich nicht sicher sagen.
 
B

Bavilo

Fortgeschrittenes Mitglied
mojo schrieb:
Der Parameter geht nur mit der chown-Binary aus busybox.
Falls du bereits busybox hast, kann es an dem Busybox-build liegen.
Ob man die Rechte in der Form zwingend braucht,
und ob der Android-eigene chown Befehl das möglicherweise doch kann kann ich nicht sicher sagen.
Hab das mit dem chown schon hin bekommen, jedoch werden die apps nicht geladen (die apps in /data/sdapp erscheinen überhaupt nicht mehr...Hmm, woran könnte es liegen?)
 
Zuletzt bearbeitet:
Reindl

Reindl

Erfahrenes Mitglied
Bavilo schrieb:
Hab das mit dem chown schon hin bekommen, jedoch werden die apps nicht geladen (die apps in /data/sdapp erscheinen überhaupt nicht mehr...Hmm, woran könnte es liegen?)
und wie kannst du es mir auch sagen?
 
mojo

mojo

Fortgeschrittenes Mitglied
Threadstarter
Das die Apps aus /data/sdapp auf einmal weg waren, hatte ich auch einmal. Als ich die Partition nochmal gemountet habe und sie wieder kopiert habe, blieben sie.

Deswegen diese beiden Zeilen,
ich dachte daran lag es,
das sie bei mir weg waren.

Code:
umount /data/sdapp   
   mount -t ext2 /dev/block/mmcblk0p2 /data/sdapp
 
B

Bavilo

Fortgeschrittenes Mitglied
Reindl schrieb:
und wie kannst du es mir auch sagen?
zu dem busybox problem?

habe einfach diesen syntax genommen:

Code:
busybox chown -h 1000:1000 /data/app
Aber die apps sind immer noch nicht im Launcher :( Keine Ahnung wieso...
 
Bluebrain

Bluebrain

Experte
versuch es mal so:

Code:
chown -h 1000.1000
(Punkt statt Doppelpunkt dazwischen)

oder getrennt mit chown und chgrp
 
mojo

mojo

Fortgeschrittenes Mitglied
Threadstarter
Bavilo schrieb:
Aber die apps sind immer noch nicht im Launcher :( Keine Ahnung wieso...
Wenn du "ls -l /data/app" machst, wer besitzt dann die .apks?
Es sollte überall system und nicht root stehen, möglicherweise liegt es daran.
 
Reindl

Reindl

Erfahrenes Mitglied
wie groß darf die ext2 partition eigentlich sein?
 
B

Bavilo

Fortgeschrittenes Mitglied
Reindl schrieb:
wie groß darf die ext2 partition eigentlich sein?
Reindl, hast du es schon komplett hin bekommen? Wenn ja, wie genau?

Ich arbeite noch daran es zum laufen zu bekommen :(
 
Reindl

Reindl

Erfahrenes Mitglied
nö ich fang gerade von vorn an - ich denke ich mach was beim partitionieren falsch :confused:
 
B

Bavilo

Fortgeschrittenes Mitglied
Also ne....

Mit dieser Anweisung geht es definitiv nicht. Habe alles probiert.
 
Reindl

Reindl

Erfahrenes Mitglied
kannst du mir sagen wie du die partitionen erstellt hast?
 
Oben Unten