[Anleitung] Swap-Partition auf externer SD-Card erstellen

  • 39 Antworten
  • Letztes Antwortdatum
sunra

sunra

Dauer-User
551
Auf XDA gibt es eine Anleitung wie man eine Swap-Partition
auf der exernen SD-Karte unseres SGS erstellen kann.

Das ganze funktioniert nur mit Kernel die das unterstützen!

Post 1 - Übersetzung der originalen Anleitung
Post 2 - CWM Package von mir




Post 1 - Übersetzung der originalen Anleitung

1. Ihr benötigt wie gesagt einen Kernel der swap Partitionen unterstützt.
Den bekommt ihr hier:
xda-developers - View Single Post - [Kernel][ICS] Devil2_0.72 [19/04/12] - i9000 and i9000B

Danke an derTeufel!


2. Es muss eine /swap Partition auf der externen SD-Karte erstellt werden. Dazu muss man vorher alle darauf befindlichen Daten sichern und dann eine /swap Partition anlegen (512mb wären mehr als genug) und dann denn restlichen Speicher wieder mit FAT32 formatieren.

Unter Windows geht das mit diesem Programm:
SD card partitioning - XDA-Developers

Unter Linux z.B. mit gparted und auf einem Mac angeblich mit iPartition (kenn ich nicht hab keinen Mac).


3. Nun die SD Karte wieder ins SGS geben. Die folgenden Befehle können per ADB-Shell ausgeführt werden oder direkt mit einem Terminal Emulator am SGS.

3.1 Um die nummer der Swap-Partition festzustellen folgenden Befehl eingeben:

Code:
fdisk -l dev/block/mmcblk1
Es sollte in etwa so etwas angezeigt werden:

Code:
/dev/block/mmcblk[COLOR=Red]1p2[/COLOR]            1861        1924      514080  82 Linux swap
Merkt oder notiert euch die Nummer der Partition (rot markiert).

Nun gebt folgendes ein:

Code:
swapon /dev/block/mmcblk[COLOR=Red]1pX[/COLOR]
X steht führ die Nummer die ihr angezeigt bekommt!

Wenn ihr nun den Befehl "free" eingebt, seht ihr ob die Swap-Partition aktiviert ist.


3.2 Swap-Partition dauerhaft aktivieren damit es auch nach einem Reboot automatisch funktioniert.

Nun muss ein Textfile erstellt werden. Dies kann man mit folgendem Befehl machen, also über den VI Editor oder man macht es direkt am SGS, oder auch mit einem anderen Editor:

Code:
vi /system/etc/init.d/05userinit
Das File muss folgendes beinhalten:

Code:
#Activate swap at boot  
#!/system/bin/sh  
swapon -a
Nun muss das File noch ausführbar gemacht werden mit folgendem Befehl:

Code:
chmod 750 /system/etc/init.d/05userinit
Nun muss ein fstab File erzeugt werden damit der Kernel die Swap Partition findet:

Code:
vi /system/etc/fstab
... mit folgendem Inhalt:

Code:
/dev/block/mmcblk[COLOR=Red]1pX[/COLOR] swap swap
X steht hier wieder für eure Partitionsnummer.Zum Schluss geben wir noch den Swap-Wert ein.
Auf XDA könnt ihr euch da bezüglich feinheiten erkundigen. Ich gebe jetzt mal den Empfohlenen Wert an und wie man den dauerhaft aktiviert:

Code:
echo 60 > /proc/sys/vm/swappiness
Am Ende sollte es nach Eingabe des Befehls "free" so aussehen:

Code:
shell@android:/ # free
                                total         used         free       shared      buffers
 Mem:                385772       376352         9420            0        26420
 -/+ buffers:      349932        35840 
Swap:               514076            0       514076
Im zweiten Post hänge ich ein .zip File an mit welchem bis auf die Partitionierung alles automatisch geht.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Boeing747, magic.dave, PJF16 und 2 andere
Post 2 - CWM Package von mir


Ich habe ein cwm-Paket erstellt um das ganze automatisch ablaufen zu lassen.

1. Lest euch die Originalanleitung ordentlich durch!
2. Erstellt eine Swap-Partition auf eurer externen SD-Card /emmc (512mb sollten mehr als genug sein)
3. Es funktioniert nur mit folgender Partitionsnummer!!!

Code:
     /dev/block/mmcblk[COLOR=Red]1p2[/COLOR]
4. Flasht das Packet via cwm.

5. Nach dem Reboot könnt ihr im Terminal mit dem Befehl "free" überprüfen ob es funktioniert hat.

6. Fertig

Wenn eure Swap-Partition eine andere Nummer hat ändert das in folgenden Skripten im .zip Paket mit Notepad++ oder einem beliebigen Linuxeditor.

1. \systm\etc\fstab


Wenn ihr nicht wisst wovon ich rede flasht es NICHT!!!

Ich bin kein Profi und hab das für mich selber erstellt. Vielleicht ist es für euch aber auch nützlich ...

Macht vorher ein Nadroidbackup und teilt mir mit ob es funktioniert hat bei euch.
 

Anhänge

  • sunra-swap-Devil2_0.73_swap_i9000_CFS_BLN_CMC_20120420.zip
    4,9 MB · Aufrufe: 850
Zuletzt bearbeitet:
  • Danke
Reaktionen: DerTeufel
sunra schrieb:
...Zum Schluss geben wir noch den Swap-Wert ein.
Auf XDA könnt ihr euch da bezüglich feinheiten erkundigen. Ich gebe jetzt mal den Empfohlenen Wert an und wie man den dauerhaft aktiviert:

Code:
echo vm.swappiness=60 >> /system/etc/sysctl.conf
Am Ende sollte es nach Eingabe des Befehls "free" so aussehen:

...

Funktioniert das bei dir? (Gib mal cat /proc/sys/vm/swappiness ein)
Ich hab gestern schon ein bisschen damit rumgespielt...

Bei mir war das ohne Wirkung (der Wert bleibt bei 0).
Ich hab daher diese Zeile
Code:
echo 60 > /proc/sys/vm/swappiness
in die 05userinit reingepackt, die sieht dann so aus:
Code:
#!/system/bin/sh

swapon -a
echo 60 > /proc/sys/vm/swappiness
 
  • Danke
Reaktionen: sunra
Ja du hast Recht. Ich werde das ändern. (Ist mittlerweile geändert in der angehängten .zip in Post2)

Wie heisst deine Partition eigentlich? Auch 1p2 ?
Ich frage mich ob die überhaupt bei wem anders heisst ...

Wenn das so ist, müsste man noch irgendwie auslesen wie die Partition heisst und das mit einbauen. Dann kann das jeder verwenden ohne was überprüfen oder editieren zu müssen ...


Hier sieht man z.b. dass gerade knapp 60mb des swap-Speichers genutzt werden ...
 

Anhänge

  • Screenshot_2012-04-22-20-35-19.png
    Screenshot_2012-04-22-20-35-19.png
    4,4 KB · Aufrufe: 1.074
Zuletzt bearbeitet:
Was für eine ext. SD verwendet ihr denn?

Wäre der interne Speicher wirklich um soviel langsamer wie manche behaupten?
 
Ich hab eine 16gb class4 die werde ich jetzt auch nicht ersetzen dafür, wäre mir zu teuer.
Wenn dann würde ich gleich eine 32gb class10 nehmen, aber wie gesagt das lohnt sich momentan nicht. Die Anwendungen im Vordergrund bekommen ohnehin den RAM zugeteilt.

Wie schnell die interne SD wirklich ist weiß ich nicht. Man sollte sie nicht mit den vielen Schreib und Lesezugriffen beanspruchen die eine Swap Partition mit sich bringt.
Also im Falle des Falles wäre es ungleich blöder wenn die interne SD den Geist aufgibt.
Das ist hier das Hauptargument denke ich ...
 
  • Danke
Reaktionen: PJF16
Danke dir schonmal. ;)

Naja, dass das das Hauptargument weiß ich. Nur wird es bei mir sowieso Zeit für ein neues Smartphone. Daher sehe ich das nicht so tragisch. ;)
 
Ach mein SGS soll schon noch ein Weilchen halten. Dürfte noch ein bisschen dauren bis eine stabiler opensource build für das s3 erhältlich ist oder sonstige lohnenswerte alternativen verfügbar sind ;-)
 
Was kann ich mir unter einer Swap Partitition dwnken
Eine Partition auf der externen die als Erweiterung der interne Sd behandelt wird.
Oder eine Partition auf der Android Daten speochert?

...via Tapatalk 2.0...
 
... in etwa wie die Auslagerungsdatei unter Windows.

... using tapatalk
 
  • Danke
Reaktionen: theKingJan
Ich versuche gerade ein Programm zu erstellen, dass man das Handy einfach nur anschließen muss, die Partition erkennt und automatisch konfiguriert. Mal sehen wie weit ich es schaffe. :)
 
Ich arbeite an einem script welches das alles automatisch beim flashen des Kernels macht .. Mit einem swapfile funktioniert es schon, aber dann sieht man /emmc bei pc Verbindung via usb nicht mehr. Bekanntes Problem. Nun werde ich versuchen eine swap Partition per script erstellen zu lassen. Mal sehen ob ich das hinkomme ...
 
Sehr schön. ;-)

Sagmal. Hast du auch das Problem, dass deine interne unter /emmc liegt und umgekehrt? Bin mir nicht sicher obs ander ROM am Swap oder am Kernel liegt.

Gesendet von meinem GT-I9000 mit Tapatalk 2
 
Bei mir ist alles wie gewohnt. Bin auf CNA 2.0 und nicht auf CM9.
Ich melde mich am Abend und zeig dir dann das script und so.
 
PJF16 schrieb:
Sehr schön. ;-)

Sagmal. Hast du auch das Problem, dass deine interne unter /emmc liegt und umgekehrt? Bin mir nicht sicher obs ander ROM am Swap oder am Kernel liegt.

Gesendet von meinem GT-I9000 mit Tapatalk 2

Das liegt an CM9, der Kernel muss da angepasst werden (bzw. irgendwas in der initramfs).
Das steht aber auch lang und breit im CM9-Thread :D
 
@sunra Okay danke. Ich werde mein Programm aber wahrscheinlich trotzdem fertig schreiben und zur Verfügung stellen da ich schon fast am Ende bin. War eine gute Übung für mich sowieso. ;)

@scheichuwe peinlich peinlich. Aber danke. :)
 
Ja mach nur Phillip. Ich machs ja auch eher für mich zur Übung ;-)

Also ich zeig euch mal was ich bis jetzt habe:

Code:
#!/system/bin/sh

#This script creates a hidden swap file of 512MB on the first partition of your external SD-card and configures android to use it on every reboot


# Creating the initiation for ui_print from within a .sh file to recovery ui
# this was created by Chainfire.

# get file descriptor for output
OUTFD=$(ps | grep -v "grep" | grep -o -E "update_binary(.*)" | cut -d " " -f 3);

ui_print() {
  if [ $OUTFD != "" ]; then
    echo "ui_print ${1} " 1>&$OUTFD;
    echo "ui_print " 1>&$OUTFD;
  else
    echo "${1}";
  fi;
}


#Create directory where the swap file will be located on external SD card
ui_print "  Create swap directory ... ";
mkdir /emmc/.swap

#Create swap file and overwrite it with zeros
ui_print "  Create swap file and overwrite it with zeros ... ";
ui_print "  ... please be patient ... ";
dd if=/dev/zero of=/emmc/.swap/swapfile bs=1024 count=524288
mkswap /emmc/.swap/swapfile

#Add swapfile to fstab
ui_print "  Add swapfile to fstab ... ";
echo "/emmc/.swap/swapfile       none    swap    sw      0       0" >> /system/etc/fstab

#Create file 99userinit and fill it with activation of swap and setting of swappiness
ui_print "  Create file 99userinit with settings ... ";
touch /system/etc/init.d/99userinit
echo "#Activate swap at boot\n\n#!/system/bin/sh\n\sleep 60\nswapon /emmc/.swap/swapfile\necho 60 > /proc/sys/vm/swappiness" >> /system/etc/init.d/99userinit

#Set permissions for init-script
ui_print "  Set permissions ... ";
chmod 750 /system/etc/init.d/99userinit
chown -R root /emmc/.swap
chmod -R 700 /emmc/.swap


#May be distributed under CC licence
#v0.1 scripted by Vincent Vegan & sunra 2012/04
Hierbei hat mir ein Freund ein bisschen geholfen. Schön langsam versteh ich immer mehr ;-)

Es wird also ein swapfile erstellt und so funktinoiert das auch.
Im updater-script muss /emmc gemountet werden und das Script natürlich ausgeführt werden.

Das Problem bei dieser Methode is wie gesagt, dass man dann vom Pc aus via USB keinen Zugriff mehr auf /emmc hat!
Meine Recherchen diesbezüglich haben bis jetzt nur Warnungen dass es so ist ergeben. Lösung hab ich noch keine gefunden.

Dieses Problem tritt nicht auf wenn man mit einer Swap-Partition arbeitet. Die FAT32 Partition wird dann ganz normal über USB gemountet.

Einfach nur Swap zu deaktivieren hilft leider nicht bei der swapfile Methode. Man müsste es deaktivieren und rebooten.
Aber das is ja alles Mist ...

Was grundsätzlich noch fehlt is die Überprüfung des freien Speichers.
Dies stellt aber kein großes Problem dar. Is nur noch nicht enthalten im Script.

Also ich bin immer offen für Ideen und Anregungen.

Mal sehen wann ich da weiterkomme ...



Edit:

Den freien Speicher frägt man so ab:

Code:
df /emmc | awk -F" " '{if (NR!=1) {print $4}}'
Man definiert dann halt welchen Wert die Variable nicht unterschreiten darf, gibt eine entsrechende Meldung aus und macht dann entsprechend weiter ...
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: DerTeufel
Sieht schonmal gut aus. Ich kann dir da ehrlich gesagt auch nicht viel weiterhelfen da ich da auch nur die Basics kenne.
 
Wenn ich Punkt 3.1 kommt bei mir leider nichts woraus die Nr geschlossen werden kann
 

Anhänge

  • Screenshot_2012-04-29-14-45-26.png
    Screenshot_2012-04-29-14-45-26.png
    12 KB · Aufrufe: 661

Ähnliche Themen

B
  • Angepinnt
  • BigAznJimmy
2 3
Antworten
54
Aufrufe
47.932
Lukas5
L
Bödi
Antworten
10
Aufrufe
15.440
Blade Runner
B
M
Antworten
10
Aufrufe
11.934
Bringer
Bringer
Zurück
Oben Unten