1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

[How-To] Apps2SD auf dem Milestone

Dieses Thema im Forum "Anleitungen für Motorola Milestone" wurde erstellt von mojo, 15.02.2010.

  1. mojo, 15.02.2010 #1
    mojo

    mojo Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    61
    Registriert seit:
    17.01.2010
    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.
    http://www.android-hilfe.de/root-ha...15044-apps2sd-auf-milestone-3.html#post178776

    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:

    Zuletzt bearbeitet: 12.04.2010
    frichter, bemymonkey, smog und 17 andere haben sich bedankt.
  2. cooper1988, 15.02.2010 #2
    cooper1988

    cooper1988 Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    21
    Registriert seit:
    17.11.2009
    Phone:
    HTC Sensation
    darf ich dich heiraten?
     
  3. mojo, 15.02.2010 #3
    mojo

    mojo Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    61
    Registriert seit:
    17.01.2010
    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.
     
  4. newton, 15.02.2010 #4
    newton

    newton Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    55
    Registriert seit:
    14.01.2010
    Phone:
    Oneplus 2
    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.
     
  5. BigBoi, 15.02.2010 #5
    BigBoi

    BigBoi Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    14
    Registriert seit:
    21.01.2010
    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
     
  6. mojo, 15.02.2010 #6
    mojo

    mojo Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    61
    Registriert seit:
    17.01.2010
    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.
     
  7. Bavilo, 15.02.2010 #7
    Bavilo

    Bavilo Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    43
    Registriert seit:
    07.02.2010
    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
     
  8. mojo, 15.02.2010 #8
    mojo

    mojo Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    61
    Registriert seit:
    17.01.2010
    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.
     
    Bavilo bedankt sich.
  9. Bavilo, 15.02.2010 #9
    Bavilo

    Bavilo Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    43
    Registriert seit:
    07.02.2010
    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: 15.02.2010
  10. Reindl, 15.02.2010 #10
    Reindl

    Reindl Fortgeschrittenes Mitglied

    Beiträge:
    355
    Erhaltene Danke:
    35
    Registriert seit:
    16.12.2009
    und wie kannst du es mir auch sagen?
     
  11. mojo, 15.02.2010 #11
    mojo

    mojo Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    61
    Registriert seit:
    17.01.2010
    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
     
  12. Bavilo, 15.02.2010 #12
    Bavilo

    Bavilo Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    43
    Registriert seit:
    07.02.2010
    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...
     
    Reindl bedankt sich.
  13. Bluebrain, 15.02.2010 #13
    Bluebrain

    Bluebrain Android-Guru

    Beiträge:
    2,513
    Erhaltene Danke:
    811
    Registriert seit:
    20.01.2010
    Phone:
    Galaxy S6
    versuch es mal so:

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

    oder getrennt mit chown und chgrp
     
    Reindl bedankt sich.
  14. mojo, 15.02.2010 #14
    mojo

    mojo Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    61
    Registriert seit:
    17.01.2010
    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.
     
  15. Reindl, 15.02.2010 #15
    Reindl

    Reindl Fortgeschrittenes Mitglied

    Beiträge:
    355
    Erhaltene Danke:
    35
    Registriert seit:
    16.12.2009
    wie groß darf die ext2 partition eigentlich sein?
     
  16. Bavilo, 15.02.2010 #16
    Bavilo

    Bavilo Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    43
    Registriert seit:
    07.02.2010
    Reindl, hast du es schon komplett hin bekommen? Wenn ja, wie genau?

    Ich arbeite noch daran es zum laufen zu bekommen :(
     
  17. Reindl, 15.02.2010 #17
    Reindl

    Reindl Fortgeschrittenes Mitglied

    Beiträge:
    355
    Erhaltene Danke:
    35
    Registriert seit:
    16.12.2009
    nö ich fang gerade von vorn an - ich denke ich mach was beim partitionieren falsch :confused:
     
  18. Bavilo, 15.02.2010 #18
    Bavilo

    Bavilo Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    43
    Registriert seit:
    07.02.2010
    Also ne....

    Mit dieser Anweisung geht es definitiv nicht. Habe alles probiert.
     
  19. Reindl, 15.02.2010 #19
    Reindl

    Reindl Fortgeschrittenes Mitglied

    Beiträge:
    355
    Erhaltene Danke:
    35
    Registriert seit:
    16.12.2009
    kannst du mir sagen wie du die partitionen erstellt hast?
     
  20. Bavilo, 15.02.2010 #20
    Bavilo

    Bavilo Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    43
    Registriert seit:
    07.02.2010
    Mit gParted
     

Diese Seite empfehlen