S
sessions
Stamm-User
- 152
Ich habe mir schon sehr lange Gedanken über das Umpartitionieren des internen Speichers meines Xperia U gemacht, da das Gerät 2GB für Apps (/data) hat und nur 4GB für Userdaten (/sdcard) vorweist.
Nach langem probieren (siehe Link) habe ich dann einen Weg gefunden, wie man die Aufteilung der Partitionen ändern kann :victory:
In diesem Tutorial beschreibe ich den Ablauf um die Partitionsaufteilung zu ändern.
Achtung!
Das Ändern der Partitionierung eines Gerätes stellt einen massiven Eingriff in das System dar!
Ich und Android-Hilfe.de können keine Verantwortung für auftretende Schäden, verlorende Daten oder zerstörte Geräte übernehmen.
Es werden dabei ALLE Daten am Handy gelöscht, das Android- System (/system) sollte im Normalfall aber drauf bleiben!
Also bitte vorher alles sichern.
Führt dieses Tutorial nur aus, wenn ihr euch sicher seid, was ihr macht.
Ein Paar Worte vorweg:
Ich habe es nicht geschafft, die Größe von /system zu verändern. Der Hintergrund ist (vermutlich!), dass auch das Recovery auf /system zugreift, nämlich dann, wenn man über adb auf das Handy zugreifen will. Adb verwendet die Shell (/system/bin/sh), die halt auf /system liegt...
Diese Tutorial liest sich sehr umfangreich, da ich alle Informationen die ich habe hineinpacke. Dies dient der Orientierung und in manchen Fällen vielleicht zur Klarstellung. Der ganze Ablauf ist in Wirklichkeit in wenigen Minuten erledigt.
Bei meinen Versuchen ist es auch passiert, dass das Handy gar nicht mehr gestartet hat. CWM hat noch gestartet, hat aber keine Partition ansprechen können. adb Zugriff war auch weg. In diesem Fall habe ich mit Flashtool die "Partitions" aus der Stock ROM geflashed - also alles "exclude" angehakt, außer "Partitions". Dadurch wurde die Originalpartitionierung wiederhergestellt.
Ich gehe davon aus, das der vorliegende Ablauf auf allen Xperia Handys funktioniert, zumindest jedenfalls sinngemäß.
Dieses Tutorial hat nichts mit Flashmode, Fastboot, Bootloader unlock oder einer Custom Rom zu tun.
Benötigt
Handy mit Recovery (CWM oder TWRP) und natürlich root
adb shell
Gehrinhirn
evtl. Taschenrechner
Ablauf
Der hier abgebildete Ablauf entspricht allen Kommandozeileneingaben, die ich beim Umpartitionieren meines Xperia U hatte. Ich habe diesen Ablauf zwei mal durchgespielt, es hat jedes mal funktioniert. Die von mir eingegebenen Befehle werden in blau dargestellt.
Das Handy wird ins recovery gestartet, /data, /cache und /sdcard müssen unmounted werden. Im CWM/TWRP dazu auf mounts and storages -> unmount
Das Handy mit dem PC verbinden und in die adb shell einsteigen. Ich setze hier vorraus, das die nötigen Treiber installiert sind. Ich habe das über eine Ubuntu Live CD gemacht, da sind alle nötigen Treiber schon dabei, da ich es unter Windows einfach nicht geschafft habe die richtigen Treiber zu installieren.
Über adb arbeitet man jetzt also am Handy. Als erstes als Superuser anmelden. Über das Tool "fdisk" mit dem Befehl "p" kann man die Partitionsdaten anzeigen lassen.
Die Paratitionen sind beim Xperia U folgendermaßen verteilt:
/dev/block/mmcblk0p10 = /system (1,04GB)
/dev/block/mmcblk0p11 = /data (2,5G0B)
/dev/block/mmcblk0p12 = /cache (256MB)
/dev/block/mmcblk0p13 = ?????
/dev/block/mmcblk0p14 = /sdcard (4,17GB)
Achtung! Ich weiß nicht, was mmcblk0p13 ist! Diese Partition ist sehr klein, ist aber "am Anfang" des Speichers (Cylinder 1345 - 1856). Sie musste mitgelöscht werden, da ansonsten die Reihenfolge der Partitionen nicht mehr stimmt. Beim neuanlegen wird sie wieder genau gleich erstellt. Bei meinem Xperia U hatte das keine Auswirkungen.
Mit der Abfage oben ist zu sehen, wieviele Datenblöcke zu der jeweiligen Partition gehören.
In meinem Beispiel sind das z.B. 2097152 Blöcke bei mmcblk0p11 (=/data), was also 2,09GB entspricht.
Diese Datenblöcke werden in der Partitionstabelle über die Start und End-Blöcke definiert.
Um also die Größe einer Partition zu verändern muss man den Start- und End Block neu festlegen. Das erreicht man, indem man alle Partitionen danach (also hier 11, 12, 13 und 14) löscht, und mit neuer Aufteilung neu anlegt.
Die Partitionen 11 bis 14 löschen:
Jetzt kann man daran gehen, die Partitionen der Reihe nach neu anzulegen. Man muss dabei unbedingt die Reihenfolge einhalten, da das System die Mountpoints ansonsten nicht korrekt setzen kann. Als Startcylinder muss man immer den Endcylinder der vorhergegangenen Partition "+1" vergeben. Mit "p" kann man sich immer die aktuelle Partitionierung anzeigen lassen.
Für den neuen Endcylinder muss man rechnen, da die Cylinder eine Größe von 32kB haben:
Größe der Partition = (Endcylinder - Startcylinder) x 32kB
Also in meinem Beispiel die neue Größe für /data: 62825 - 42625 = 20200 x 32kB = 646400kB = ~650MB
Übere den Befehl "p" kann man die neu erstellte Partitionstabelle nun kontrollieren:
Wenn nun alles passt, die Partitionsgrößen und die Start und End- Zylinder in Ordnung sind, kann man mit "w" Speichern und Beenden
Die Partitionen sind jetzt also neu erstellt, aber noch nicht formatiert!
Alle Partitionen müssen nun einzeln formatiert werden:
Wichtig:
Die mir unbekannte Partition #13 wird nicht angegriffen.
Ich habe es nicht geschafft, /data mit FAT32 bzw vfat zu formatieren. Es wurden nur Fehler ausgegeben. Stattdessen wird ext2 verwendet. Keine Sorge - Beim ersten Systemstart wird die Partition dann durch das Android System erkannt und richtig neu formatiert
Zusammengefasst:
Es wurden die einzelnen Partitionen gelöscht und mit geänderten Größen neu erstellt. Danach wurden sie formatiert.
Ob das alles funktioniert hat, kann man im Recovery testen, indem man unter "Mounts" alle Bereiche mounted. Wenn das funktioniert, dann sieht das schon sehr gut aus. Wenn hier Probleme auftreten muss man die Partitionierung (fdisk) und die Formatierung nochmals überprüfen.
Wenn das nun alles funktioniert, kann man die adb shell verlassen und das Handy neu starten.
Der erste Neustart wird länger dauern, da das Handy einen kompletten Werksreset erlebt hat.
Der interne Speicher (/sdcard) wird dann erkannnt, man wird gefragt ob man ihn formatieren will. Natürlich mit JA beantworten.
Das System läuft nun wieder, mit den geänderten Dateisystemgrößen.
Nach langem probieren (siehe Link) habe ich dann einen Weg gefunden, wie man die Aufteilung der Partitionen ändern kann :victory:
In diesem Tutorial beschreibe ich den Ablauf um die Partitionsaufteilung zu ändern.
Achtung!
Das Ändern der Partitionierung eines Gerätes stellt einen massiven Eingriff in das System dar!
Ich und Android-Hilfe.de können keine Verantwortung für auftretende Schäden, verlorende Daten oder zerstörte Geräte übernehmen.
Es werden dabei ALLE Daten am Handy gelöscht, das Android- System (/system) sollte im Normalfall aber drauf bleiben!
Also bitte vorher alles sichern.
Führt dieses Tutorial nur aus, wenn ihr euch sicher seid, was ihr macht.
Ein Paar Worte vorweg:
Ich habe es nicht geschafft, die Größe von /system zu verändern. Der Hintergrund ist (vermutlich!), dass auch das Recovery auf /system zugreift, nämlich dann, wenn man über adb auf das Handy zugreifen will. Adb verwendet die Shell (/system/bin/sh), die halt auf /system liegt...
Diese Tutorial liest sich sehr umfangreich, da ich alle Informationen die ich habe hineinpacke. Dies dient der Orientierung und in manchen Fällen vielleicht zur Klarstellung. Der ganze Ablauf ist in Wirklichkeit in wenigen Minuten erledigt.
Bei meinen Versuchen ist es auch passiert, dass das Handy gar nicht mehr gestartet hat. CWM hat noch gestartet, hat aber keine Partition ansprechen können. adb Zugriff war auch weg. In diesem Fall habe ich mit Flashtool die "Partitions" aus der Stock ROM geflashed - also alles "exclude" angehakt, außer "Partitions". Dadurch wurde die Originalpartitionierung wiederhergestellt.
Ich gehe davon aus, das der vorliegende Ablauf auf allen Xperia Handys funktioniert, zumindest jedenfalls sinngemäß.
Dieses Tutorial hat nichts mit Flashmode, Fastboot, Bootloader unlock oder einer Custom Rom zu tun.
Benötigt
Handy mit Recovery (CWM oder TWRP) und natürlich root
adb shell
Gehrinhirn
evtl. Taschenrechner
Ablauf
Der hier abgebildete Ablauf entspricht allen Kommandozeileneingaben, die ich beim Umpartitionieren meines Xperia U hatte. Ich habe diesen Ablauf zwei mal durchgespielt, es hat jedes mal funktioniert. Die von mir eingegebenen Befehle werden in blau dargestellt.
Das Handy wird ins recovery gestartet, /data, /cache und /sdcard müssen unmounted werden. Im CWM/TWRP dazu auf mounts and storages -> unmount
Das Handy mit dem PC verbinden und in die adb shell einsteigen. Ich setze hier vorraus, das die nötigen Treiber installiert sind. Ich habe das über eine Ubuntu Live CD gemacht, da sind alle nötigen Treiber schon dabei, da ich es unter Windows einfach nicht geschafft habe die richtigen Treiber zu installieren.
Code:
root@ubuntu:/tmp# ./adb shell
Über adb arbeitet man jetzt also am Handy. Als erstes als Superuser anmelden. Über das Tool "fdisk" mit dem Befehl "p" kann man die Partitionsdaten anzeigen lassen.
Code:
root@ubuntu:/tmp# [color=blue] ./adb shell [/color]
shell@android:/ $ [color=blue]su [/color]
root@android:/ # [color=blue]fdisk /dev/block/mmcblk0 [/color]
The number of cylinders for this disk is set to 238592.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): [color=blue]p[/color]
Disk /dev/block/mmcblk0: 7818 MB, 7818182656 bytes
4 heads, 16 sectors/track, 238592 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/block/mmcblk0p1 1 32 1023+ 0 Empty
Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2 37 52 512 f0 Linux/PA-RISC boot
Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3 33 36 128 f0 Linux/PA-RISC boot
Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4 53 238592 7633280 5 Extended
Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5 65 320 8192 4a Unknown
/dev/block/mmcblk0p6 321 416 3072 83 Linux
/dev/block/mmcblk0p7 417 576 5120 70 Unknown
/dev/block/mmcblk0p8 577 832 8192 83 Linux
/dev/block/mmcblk0p9 833 1344 16384 48 Unknown
/dev/block/mmcblk0p10 1857 34624 1048576 83 Linux
/dev/block/mmcblk0p11 42625 108160 [color=green]2097152[/color] 83 Linux
/dev/block/mmcblk0p12 34625 42624 [color=green]256000[/color] 83 Linux
/dev/block/mmcblk0p13 1345 1856 16384 48 Unknown
/dev/block/mmcblk0p14 108161 238592 [color=green]4173824[/color] c Win95 FAT32 (LBA)
Partition table entries are not in disk order
Command (m for help):
Die Paratitionen sind beim Xperia U folgendermaßen verteilt:
/dev/block/mmcblk0p10 = /system (1,04GB)
/dev/block/mmcblk0p11 = /data (2,5G0B)
/dev/block/mmcblk0p12 = /cache (256MB)
/dev/block/mmcblk0p13 = ?????
/dev/block/mmcblk0p14 = /sdcard (4,17GB)
Achtung! Ich weiß nicht, was mmcblk0p13 ist! Diese Partition ist sehr klein, ist aber "am Anfang" des Speichers (Cylinder 1345 - 1856). Sie musste mitgelöscht werden, da ansonsten die Reihenfolge der Partitionen nicht mehr stimmt. Beim neuanlegen wird sie wieder genau gleich erstellt. Bei meinem Xperia U hatte das keine Auswirkungen.
Mit der Abfage oben ist zu sehen, wieviele Datenblöcke zu der jeweiligen Partition gehören.
In meinem Beispiel sind das z.B. 2097152 Blöcke bei mmcblk0p11 (=/data), was also 2,09GB entspricht.
Code:
/dev/block/mmcblk0p11 42625 108160 [color=green]2097152[/color] 83 Linux
Diese Datenblöcke werden in der Partitionstabelle über die Start und End-Blöcke definiert.
Um also die Größe einer Partition zu verändern muss man den Start- und End Block neu festlegen. Das erreicht man, indem man alle Partitionen danach (also hier 11, 12, 13 und 14) löscht, und mit neuer Aufteilung neu anlegt.
Die Partitionen 11 bis 14 löschen:
Code:
Command (m for help): [color=blue]d[/color]
Partition number (1-14): [color=blue]14[/color]
Command (m for help): [color=blue]d[/color]
Partition number (1-13): [color=blue]13[/color]
Command (m for help): [color=blue]d[/color]
Partition number (1-12): [color=blue]12[/color]
Command (m for help): [color=blue]d[/color]
Partition number (1-11): [color=blue]11[/color]
Jetzt kann man daran gehen, die Partitionen der Reihe nach neu anzulegen. Man muss dabei unbedingt die Reihenfolge einhalten, da das System die Mountpoints ansonsten nicht korrekt setzen kann. Als Startcylinder muss man immer den Endcylinder der vorhergegangenen Partition "+1" vergeben. Mit "p" kann man sich immer die aktuelle Partitionierung anzeigen lassen.
Für den neuen Endcylinder muss man rechnen, da die Cylinder eine Größe von 32kB haben:
Größe der Partition = (Endcylinder - Startcylinder) x 32kB
Also in meinem Beispiel die neue Größe für /data: 62825 - 42625 = 20200 x 32kB = 646400kB = ~650MB
Code:
Command (m for help): [color=blue]n[/color]
Command action
l logical (5 or over)
p primary partition (1-4)
[color=blue]l[/color]
First cylinder (53-238592, default 53): [color=blue]42625[/color]
Last cylinder or +size or +sizeM or +sizeK (42625-238592, default 238592): [color=blue]62825[/color]
[i][color=Orange]Die neue Größe für /data ist ~640MB[/color][/i]
Command (m for help): [color=blue]n[/color]
Command action
l logical (5 or over)
p primary partition (1-4)
[color=blue]l[/color]
First cylinder (53-238592, default 53): [color=blue]62826[/color]
Last cylinder or +size or +sizeM or +sizeK (62826-238592, default 238592): [color=blue]67825[/color]
[i][color=Orange]Die neue Größe für /cache ist ~160MB[/color][/i]
Command (m for help): [color=blue]n[/color]
Command action
l logical (5 or over)
p primary partition (1-4)
[color=blue]l[/color]
First cylinder (53-238592, default 53): [color=blue]1345[/color]
Last cylinder or +size or +sizeM or +sizeK (1345-1856, default 1856): [color=blue]1856[/color]
[i][color=Orange]Diesen Bereich habe ich genau gleich wieder angelegt, wie er schon zuvor war[/color][/i]
Command (m for help): [color=blue]n[/color]
Command action
l logical (5 or over)
p primary partition (1-4)
[color=blue]l[/color]
First cylinder (53-238592, default 53): [color=blue]67826[/color]
Last cylinder or +size or +sizeM or +sizeK (67826-238592, default 238592): [color=blue]238592[/color]
[i][color=Orange]Die neue Größe für /data ist ~5,464GB[/color][/i]
Übere den Befehl "p" kann man die neu erstellte Partitionstabelle nun kontrollieren:
Code:
Command (m for help): [color=blue]p[/color]
Disk /dev/block/mmcblk0: 7818 MB, 7818182656 bytes
4 heads, 16 sectors/track, 238592 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/block/mmcblk0p1 1 32 1023+ 0 Empty
Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2 37 52 512 f0 Linux/PA-RISC boot
Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3 33 36 128 f0 Linux/PA-RISC boot
Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4 53 238592 7633280 5 Extended
Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5 65 320 8192 4a Unknown
/dev/block/mmcblk0p6 321 416 3072 83 Linux
/dev/block/mmcblk0p7 417 576 5120 70 Unknown
/dev/block/mmcblk0p8 577 832 8192 83 Linux
/dev/block/mmcblk0p9 833 1344 16384 48 Unknown
/dev/block/mmcblk0p10 1857 34624 1048576 83 Linux
/dev/block/mmcblk0p11 42625 62825 646432 83 Linux
/dev/block/mmcblk0p12 62826 67825 159992 83 Linux
/dev/block/mmcblk0p13 1345 1856 16376 83 Linux
/dev/block/mmcblk0p14 67826 238592 5464536 83 Linux
Partition table entries are not in disk order
Wenn nun alles passt, die Partitionsgrößen und die Start und End- Zylinder in Ordnung sind, kann man mit "w" Speichern und Beenden
Code:
Command (m for help): [color=blue]w[/color]
The partition table has been altered.
Calling ioctl() to re-read partition table
fdisk: WARNING: rereading partition table failed, kernel still uses old table: Device or resource busy
Die Partitionen sind jetzt also neu erstellt, aber noch nicht formatiert!
Alle Partitionen müssen nun einzeln formatiert werden:
Wichtig:
Die mir unbekannte Partition #13 wird nicht angegriffen.
Ich habe es nicht geschafft, /data mit FAT32 bzw vfat zu formatieren. Es wurden nur Fehler ausgegeben. Stattdessen wird ext2 verwendet. Keine Sorge - Beim ersten Systemstart wird die Partition dann durch das Android System erkannt und richtig neu formatiert
Code:
[i][color=Orange]Hier wird /data formatiert:[/color][/i]
127|root@android:/ # [color=blue]mke2fs /dev/block/mmcblk0p11[/color]
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
40480 inodes, 161608 blocks
8080 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=167772160
5 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks:
32768, 98304
Writing inode tables: done and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[i][color=Orange]Hier wird /cache formatiert:[/color][/i]
root@android:/ # [color=blue]mke2fs /dev/block/mmcblk0p12[/color]
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
40000 inodes, 159992 blocks
7999 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
20 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[i][color=Orange]Hier wird /sdcard formatiert:[/color][/i]
root@android:/ # [color=blue]mke2fs /dev/block/mmcblk0p14[/color]
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
261120 inodes, 1043456 blocks
52172 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1069547520
32 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
Zusammengefasst:
Es wurden die einzelnen Partitionen gelöscht und mit geänderten Größen neu erstellt. Danach wurden sie formatiert.
Ob das alles funktioniert hat, kann man im Recovery testen, indem man unter "Mounts" alle Bereiche mounted. Wenn das funktioniert, dann sieht das schon sehr gut aus. Wenn hier Probleme auftreten muss man die Partitionierung (fdisk) und die Formatierung nochmals überprüfen.
Wenn das nun alles funktioniert, kann man die adb shell verlassen und das Handy neu starten.
Code:
root@android:/ # [color=blue]reboot[/color]
Der erste Neustart wird länger dauern, da das Handy einen kompletten Werksreset erlebt hat.
Der interne Speicher (/sdcard) wird dann erkannnt, man wird gefragt ob man ihn formatieren will. Natürlich mit JA beantworten.
Das System läuft nun wieder, mit den geänderten Dateisystemgrößen.
Zuletzt bearbeitet: