Firefox-Profile in Ramdisk auslagern: Unterschied zwischen den Versionen
Schubi (Diskussion | Beiträge) K dirk -> user |
|||
(18 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{veraltet}} | |||
{{hinweis|Dieser Artikel richtet sich an erfahrenere Linux-Nutzer}} | {{hinweis|Dieser Artikel richtet sich an erfahrenere Linux-Nutzer}} | ||
{{righttoc}} | {{righttoc}} | ||
Zeile 8: | Zeile 10: | ||
Wenn man einen einfachen Test macht, sieht man sofort, wie viel schneller der Arbeitsspeicher gegenüber der Festplatte ist. Hierfür kann man z.B. [[dd]] verwenden und damit eine ein Gigabyte große Datei in eine Ramdisk schreiben, und danach den Test noch mal mit einer Festplatte wiederholen. | Wenn man einen einfachen Test macht, sieht man sofort, wie viel schneller der Arbeitsspeicher gegenüber der Festplatte ist. Hierfür kann man z.B. [[dd]] verwenden und damit eine ein Gigabyte große Datei in eine Ramdisk schreiben, und danach den Test noch mal mit einer Festplatte wiederholen. | ||
{{hc|dd if=/dev/zero of=/media/ramdisk/file bs=10M count=100|100+0 Datensätze ein | |||
100+0 Datensätze aus | |||
1048576000 Bytes (1,0 GB) kopiert, 1,1095 s, 945 MB/s}} | |||
{{hc|dd if=/dev/zero of=/home/user/file bs=10MB count=100|100+0 Datensätze ein | |||
100+0 Datensätze aus | |||
1000000000 Bytes (1,0 GB) kopiert, 12,0017 s, 83,3 MB/s}} | |||
Der Test wurde mit relativ kleinen Blockgrößen gemacht (zur genauen Syntax siehe [[dd|Wiki-Artikel über dd]]. Das Ergebnis zeigt deutlich, eine Ramdisk ist mit 945 Megabyte pro Sekunde deutlich schneller als die Festplatte mit 83,3 Megabyte pro Sekunde. Man könnte nun also das Firefox-Profil in eine Ramdisk schreiben und von deren enormem Geschwindigkeitsvorteil profitieren. | Der Test wurde mit relativ kleinen Blockgrößen gemacht (zur genauen Syntax siehe [[dd|Wiki-Artikel über dd]]. Das Ergebnis zeigt deutlich, eine Ramdisk ist mit 945 Megabyte pro Sekunde deutlich schneller als die Festplatte mit 83,3 Megabyte pro Sekunde. Man könnte nun also das Firefox-Profil in eine Ramdisk schreiben und von deren enormem Geschwindigkeitsvorteil profitieren. | ||
Zeile 22: | Zeile 22: | ||
Zwei Nachteile hat diese Vorgehensweise allerdings: Zum Einen benötigt eine Ramdisk, wie der Name schon verrät, RAM. Von diesem sollte also ausreichend zur Verfügung stehen. Bei einem System mit nur einem Gigabyte Arbeitsspeicher lohnt sich eine Ramdisk wahrlich nicht. Zwei Gigabyte Arbeitsspeicher sollten bei der in diesem Artikel vorgestellten Technik mindestens vorhanden sein, besser mehr. | Zwei Nachteile hat diese Vorgehensweise allerdings: Zum Einen benötigt eine Ramdisk, wie der Name schon verrät, RAM. Von diesem sollte also ausreichend zur Verfügung stehen. Bei einem System mit nur einem Gigabyte Arbeitsspeicher lohnt sich eine Ramdisk wahrlich nicht. Zwei Gigabyte Arbeitsspeicher sollten bei der in diesem Artikel vorgestellten Technik mindestens vorhanden sein, besser mehr. | ||
Zum Anderen sind die Inhalte einer Ramdisk nur so lange verfügbar, wie der RAM mit Strom versorgt wird, und die Ramdisk gemountet ist. Wenn das System unerwartet ausfällt, oder man den Rechner herunter fährt, wird der RAM entladen, und die Ramdisk somit geleert. Man muss also dafür sorgen, dass die Inhalte der Ramdisk in regelmäßigen Abständen, mindestens aber beim Starten und | Zum Anderen sind die Inhalte einer Ramdisk nur so lange verfügbar, wie der RAM mit Strom versorgt wird, und die Ramdisk gemountet ist. Wenn das System unerwartet ausfällt, oder man den Rechner herunter fährt, wird der RAM entladen, und die Ramdisk somit geleert. Man muss also dafür sorgen, dass die Inhalte der Ramdisk in regelmäßigen Abständen, mindestens aber beim Starten und Beenden mit einem Verzeichnis auf der Festplatte – zum Beispiel mit [[rsync]] – synchronisiert werden. | ||
== Vorbereitungen == | == Vorbereitungen == | ||
Zeile 30: | Zeile 30: | ||
Es wird eine Ramdisk benötigt. Die Ramdisk belegt standardmäßig maximal die Hälfte des gesamten zur Verfügung stehenden Arbeitsspeichers abzüglich Swap. Ramdisks können mittels [[mount]] erstellt werden. | Es wird eine Ramdisk benötigt. Die Ramdisk belegt standardmäßig maximal die Hälfte des gesamten zur Verfügung stehenden Arbeitsspeichers abzüglich Swap. Ramdisks können mittels [[mount]] erstellt werden. | ||
Man sollte die | Man sollte die Größe der Ramdisk an das Firefox-Profil anpassen. Zwar belegt eine Ramdisk nur so viel Platz, wie sie tatsächlich benötigt, aber man sollte immer klare Grenzen stecken, innerhalb derer sich das System bewegen darf. | ||
Zuerst prüft man, wie groß das Firefox-Profilverzeichnis ist. | Zuerst prüft man, wie groß das Firefox-Profilverzeichnis ist. | ||
{{hc|du -hs /home/user/.mozilla/firefox/|122M /home/user/.mozilla/firefox/}} | |||
Anhand dieser Angabe kann man nun die Größe der Ramdisk bestimmen. Man könnte hier zum Beispiel großzügig auf 200 Megabyte aufrunden, und noch zur Sicherheit 100 Megabyte auf diesen Wert draufschlagen. Somit hätte die zu erstellende Ramdisk eine Größe von 300 Megabyte. Mit dieser Angabe kann nun die Ramdisk in der [[fstab]] definiert werden. | Anhand dieser Angabe kann man nun die Größe der Ramdisk bestimmen. Man könnte hier zum Beispiel großzügig auf 200 Megabyte aufrunden, und noch zur Sicherheit 100 Megabyte auf diesen Wert draufschlagen. Somit hätte die zu erstellende Ramdisk eine Größe von 300 Megabyte. Mit dieser Angabe kann nun die Ramdisk in der [[fstab]] definiert werden. | ||
Zeile 43: | Zeile 42: | ||
[…] | […] | ||
Standardmäßig haben alle User Schreib- und Leserechte für die Ramdisk. Wenn man dies nicht will, kann man die Optionsangaben um „mode“, „uid“ und „gid“ erweitern, denen man die entsprechenden, gewünschten Werte zuweist. Der Mountpoint | Standardmäßig haben alle User Schreib- und Leserechte für die Ramdisk. Wenn man dies nicht will, kann man die Optionsangaben um „mode“, „uid“ und „gid“ erweitern, denen man die entsprechenden, gewünschten Werte zuweist. Der Mountpoint {{ic|/media/ramdisk}} muss natürlich angelegt werden. Dann wird die Ramdisk mittels {{ic|mount /media/ramdisk}} gemountet. | ||
=== rsync === | === rsync === | ||
rsync ist im „[[Pacman#Repositorien_und_Spiegel-Server|extra]]“-Repository verfügbar, und kann aus diesem | rsync ist im „[[Pacman#Repositorien_und_Spiegel-Server|extra]]“-Repository verfügbar, und kann aus diesem heraus [[Pacman|installiert]] werden. | ||
pacman - | pacman -S rsync | ||
Es sind keine weiteren Einstellungen nötig, da nachfolgend alles Nötige über die Befehlszeile, sowie ein Script geregelt wird. | Es sind keine weiteren Einstellungen nötig, da nachfolgend alles Nötige über die Befehlszeile, sowie ein Script geregelt wird. | ||
=== Profilverzeichnis === | === Profilverzeichnis === | ||
{{ | {{Achtung|Man sollte den Wiki-Artikel entweder als PDF abspeichern, in einem anderen Browser als Firefox, oder an einem anderen Rechner geöffnet lassen, während man diese Schritte durchführt, da Firefox während dieser Zeit nicht laufen sollte. Wann immer man mit Dateien arbeitet, die wichtig sind, sollte man von diesen Dateien ein Backup anfertigen, auch wenn eigentlich nichts passieren sollte!}} | ||
Da das Script, das nachfolgend in diesem Artikel erstellt wird, mit [[ln|Symlinks]] arbeitet, muss das Firefox-Profilverzeichnis verschoben werden, da das eigentliche Verzeichnis später durch einen Symlink ersetzt werden wird. | Da das Script, das nachfolgend in diesem Artikel erstellt wird, mit [[ln|Symlinks]] arbeitet, muss das Firefox-Profilverzeichnis verschoben werden, da das eigentliche Verzeichnis später durch einen Symlink ersetzt werden wird. | ||
Zeile 66: | Zeile 65: | ||
mount | grep /media/ramdisk | mount | grep /media/ramdisk | ||
# Firefox-Profilverzeichnis | # Firefox-Profilverzeichnis erstmalig auf die Ramdisk kopieren, | ||
# und dabei alle Dateirechte und -Zeiten erhalten | # und dabei alle Dateirechte und -Zeiten erhalten | ||
cp -a /home/user/.mozilla/firefox-profiles /media/ramdisk/ | cp -a /home/user/.mozilla/firefox-profiles /media/ramdisk/ | ||
# Prüfen, ob | # Prüfen, ob Verzeichnis kopiert | ||
ls -ld /media/ramdisk/firefox-profiles | ls -ld /media/ramdisk/firefox-profiles | ||
Zeile 81: | Zeile 80: | ||
Testweise sollte man nun auch das Synchronisieren mittels rsync vornehmen. Dabei sollte man den Verbose-Mode von rsync benutzen, um zu sehen, was gemacht wurde. | Testweise sollte man nun auch das Synchronisieren mittels rsync vornehmen. Dabei sollte man den Verbose-Mode von rsync benutzen, um zu sehen, was gemacht wurde. | ||
{{hc|rsync -av --delete /media/ramdisk/firefox-profiles/ /home/user/.mozilla/firefox-profiles/|sending incremental file list | |||
[verschiedene Dateien] | |||
sent 6732789 bytes received 436 bytes 13466450.00 bytes/sec | |||
total size is 117512183 speedup is 17.45}} | |||
Es wurden also einige Dateien aus der Ramdisk in das Firefox-Profilverzeichnis auf der Festplatte kopiert. | Es wurden also einige Dateien aus der Ramdisk in das Firefox-Profilverzeichnis auf der Festplatte kopiert. Testweise kann man einfach mal ein Bookmark anlegen, Firefox schließen, den rsync-Befehl ausführen, und den Symlink ändern. | ||
Es sollte beim manuellen Synchronisieren mittels rsync eine Datei „places.sqlite“ synchronisiert werden, wenn dies der Fall war, wird der Bookmark auch beim Starten aus dem Verzeichnis auf der Festplatte vorhanden sein. Das System funktioniert also. | Es sollte beim manuellen Synchronisieren mittels rsync eine Datei „places.sqlite“ synchronisiert werden, wenn dies der Fall war, wird der Bookmark auch beim Starten aus dem Verzeichnis auf der Festplatte vorhanden sein. Das System funktioniert also. | ||
Zeile 95: | Zeile 93: | ||
Das Script hat die Aufgabe, beim Starten von [[X]] zu prüfen, ob die Ramdisk vorhanden ist, und wenn ja, das Firefox-Profilverzeichnis in die Ramdisk zu kopieren, und den Symlink zu erstellen. Das Script tut genau das, was beim Testlauf manuell gemacht wurde. | Das Script hat die Aufgabe, beim Starten von [[X]] zu prüfen, ob die Ramdisk vorhanden ist, und wenn ja, das Firefox-Profilverzeichnis in die Ramdisk zu kopieren, und den Symlink zu erstellen. Das Script tut genau das, was beim Testlauf manuell gemacht wurde. | ||
Im Kopfbereich des Scripts müssen die Daten an die eigene Umgebung angepasst werden. Dabei sind allerdings schon sinnvolle | Im Kopfbereich des Scripts müssen die Daten an die eigene Umgebung angepasst werden. Dabei sind allerdings schon sinnvolle Vorgaben gemacht, die sich mit den Vorbereitungen aus diesem Wiki-Artikel decken. | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 132: | Zeile 130: | ||
LOCATION=$(cat "${INFOFILE}") | LOCATION=$(cat "${INFOFILE}") | ||
if [ "${LOCATION}" = "ramdisk" ]; then | if [ "${LOCATION}" = "ramdisk" ]; then | ||
rsync -aq --delete "${RAMDISKMP}/${PROFILEDIR}" "${MOZILLADIR}" | /usr/bin/rsync -aq --delete "${RAMDISKMP}/${PROFILEDIR}" "${MOZILLADIR}" | ||
fi | fi | ||
fi | fi | ||
Zeile 140: | Zeile 138: | ||
Im zweiten Schritt wird dann geprüft, ob das Verzeichnis auf der Ramdisk vorhanden ist. Wenn ja, wird der Symlink dorthin gesetzt, wenn nein, wird der Symlink auf das Profilverzeichnis auf der Festplatte gesetzt. | Im zweiten Schritt wird dann geprüft, ob das Verzeichnis auf der Ramdisk vorhanden ist. Wenn ja, wird der Symlink dorthin gesetzt, wenn nein, wird der Symlink auf das Profilverzeichnis auf der Festplatte gesetzt. | ||
In beiden Fällen wird eine entsprechende Information in eine Informationsdatei geschrieben, die vor dem | In beiden Fällen wird eine entsprechende Information in eine Informationsdatei geschrieben, die vor dem Synchronisieren überprüft wird. | ||
Das Synchronisieren wird mittels des Parameters „sync“ eingeleitet. Hier liest das Script die Informationsdatei ein, und synchronisiert mittels rsync das Festplattenverzeichnis mit dem Ramdiskverzeichnis. | Das Synchronisieren wird mittels des Parameters „sync“ eingeleitet. Hier liest das Script die Informationsdatei ein, und synchronisiert mittels rsync das Festplattenverzeichnis mit dem Ramdiskverzeichnis. | ||
Zeile 146: | Zeile 144: | ||
=== Verwendung === | === Verwendung === | ||
Die Verwendung des Scripts gliedert sich in zwei Abschnitte. Zum Einen wird es beim Starten der X-Session verwendet, um das Firefox-Profilverzeichnis in die Ramdisk zu schreiben, zum Anderen wird über das Script auch die Synchronisierung – entweder einmalig beim Runterfahren, oder regelmäßig via Cronjob – vorgenommen. | Die Verwendung des Scripts gliedert sich in zwei Abschnitte. Zum Einen wird es beim Starten der X-Session verwendet, um das Firefox-Profilverzeichnis in die Ramdisk zu schreiben, zum Anderen wird über das Script auch die Synchronisierung – entweder einmalig beim Runterfahren, oder regelmäßig via Cronjob – vorgenommen. | ||
=== Anwendung === | |||
Das Script als fxramdisk.sh unter /home/user/.scripts/ speichern und mit | |||
# chmod -x /home/user/.scripts/fxramdisk.sh | |||
ausführbar machen (Gegebenenfalls user durch Benutzernamen ändern). | |||
==== Erstmalig ==== | ==== Erstmalig ==== | ||
Da das Profilverzeichnis von Firefox nur einmalig in die Ramdisk geschrieben werden muss, reicht es, das Script mit dem entsprechenden Parameter einmalig beim starten von X auszuführen. Man kann den Aufruf zum Beispiel in die „.xinitrc“-Datei schreiben. Wenn man den Eintrag vor den Aufruf des Fenstermanagers setzt, kann man sich sicher sein, dass das Script abgearbeitet wurde, wenn der Fenstermanager geladen ist. | Da das Profilverzeichnis von Firefox nur einmalig in die Ramdisk geschrieben werden muss, reicht es, das Script mit dem entsprechenden Parameter einmalig beim starten von X auszuführen. Man kann den Aufruf zum Beispiel in die „.xinitrc“-Datei schreiben. Wenn man den Eintrag vor den Aufruf des Fenstermanagers setzt, kann man sich sicher sein, dass das Script abgearbeitet wurde, wenn der Fenstermanager geladen ist. | ||
. .scripts/fxramdisk copy | . .scripts/fxramdisk.sh copy | ||
[Aufruf des Fenstermanagers] | [Aufruf des Fenstermanagers] | ||
In diesem Fall wurde das Script im home-Verzeichnis des Users unter „.scripts/ | In diesem Fall wurde das Script im home-Verzeichnis des Users unter „.scripts/fxramdisk.sh“ abgelegt. | ||
Will man die Ramdisk nicht mehr verwenden, so unmountet man sie, und führt das Script einfach erneut mit dem copy-Parameter aus. Da die Ramdisk nun nicht mehr existiert, werden wird die Infodatei und der Symlink angepasst. Man sollte dies unter gar keinen Umständen machen, während Firefox noch geöffnet ist. | Will man die Ramdisk nicht mehr verwenden, so unmountet man sie, und führt das Script einfach erneut mit dem copy-Parameter aus. Da die Ramdisk nun nicht mehr existiert, werden wird die Infodatei und der Symlink angepasst. Man sollte dies unter gar keinen Umständen machen, während Firefox noch geöffnet ist. | ||
====Script über Systemd ausführen==== | |||
Unter /etc/systemd/system eine Datei namens “fxramdisk.service” mit folgendem Inhalt erstellen: | |||
(user=durch Benutzername ersetzen) | |||
[Unit] | |||
Description=Firefox Ramdisk | |||
ConditionPathExists=/home/user/.scripts/fxramdisk.sh | |||
[Service] | |||
Type=oneshot | |||
RemainAfterExit=yes | |||
ExecStart=/home/user/.scripts/fxramdisk.sh copy | |||
ExecStop=/home/user/.scripts/fxramdisk.sh sync | |||
[Install] | |||
WantedBy=multi-user.target | |||
Nun einfach mit: | |||
# systemctl enable fxramdisk.service | |||
den Dienst starten Fertig. | |||
Nun wird automatisch beim starten von Archlinux das Firefox-Profil auf die RAM-Disk ausgelagert und beim herunter fahren mit dem Profil auf der HDD synchronisiert. | |||
====Cronjob==== | |||
Wem das zu unsicher ist, oder wer seinen Rechner nur selten herunterfährt, aber trotzdem die Daten aus der Ramdisk auf die Festplatte sichern möchte, kann sich auch einen | Wem das zu unsicher ist, oder wer seinen Rechner nur selten herunterfährt, aber trotzdem die Daten aus der Ramdisk auf die Festplatte sichern möchte, kann sich auch einen [[Cron]]job einrichten, der zum Beispiel alle 5 Minuten eine Synchronisation vornimmt. | ||
*/5 * * * * bash /home/user/.scripts/fxramdisk sync | */5 * * * * bash /home/user/.scripts/fxramdisk.sh sync | ||
Das Script berücksichtigt dabei, ob die Ramdisk gemountet ist, oder nicht, wenn nach dem Mounten das Script mit dem „copy“-Parameter ausgeführt wurde. Wenn die Ramdisk nicht gemountet ist, oder die Informationsdatei falsch ist, macht der aufruf nichts. | Das Script berücksichtigt dabei, ob die Ramdisk gemountet ist, oder nicht, wenn nach dem Mounten das Script mit dem „copy“-Parameter ausgeführt wurde. Wenn die Ramdisk nicht gemountet ist, oder die Informationsdatei falsch ist, macht der aufruf nichts. | ||
=== Wrapper === | ==== Wrapper==== | ||
Wenn man bei jedem Beenden der letzten Instanz von Firefox möchte, dass die Version auf der Fesplatte mit den Inhalten der Ramdisk abgeglichen wird, kann man sich auch ein Wrapper-Script bauen. Dieses Script ruft man dann statt Firefox auf. | Wenn man bei jedem Beenden der letzten Instanz von Firefox möchte, dass die Version auf der Fesplatte mit den Inhalten der Ramdisk abgeglichen wird, kann man sich auch ein Wrapper-Script bauen. Dieses Script ruft man dann statt Firefox auf. | ||
Zeile 195: | Zeile 203: | ||
FIREFOXPATH="$(which firefox)" | FIREFOXPATH="$(which firefox)" | ||
SCRIPTPATH="/home/user/.scripts/fxramdisk" | SCRIPTPATH="/home/user/.scripts/fxramdisk.sh" | ||
"${FIREFOXPATH}" $@ | "${FIREFOXPATH}" $@ | ||
Zeile 203: | Zeile 211: | ||
fi | fi | ||
Dieses Script kann man nun statt Firefox ausführen, indem man es zum Beispiel unter | Dieses Script kann man nun statt Firefox ausführen, indem man es zum Beispiel unter {{ic|/home/user/.scripts/fxwrapper}} speichert, und in der [[bashrc]] einen Alias erstellt. | ||
alias firefox="/home/user/.scripts/fxwrapper" | alias firefox="/home/user/.scripts/fxwrapper" | ||
Nachdem man sich neu eingeloggt, hat, wird nun bei Aufruf von | Nachdem man sich neu eingeloggt, hat, wird nun bei Aufruf von {{ic|firefox}} das Wrapperscript aufgerufen. Die Abarbeitung des Scripts pausiert, so lange Firefox läuft, und wird fortgesetzt, wenn die entsprechende Firefox-Instanz wieder beendet wird, dann wird überprüft, ob noch eine Firefox-Instanz läuft, wenn dies nicht der Fall ist, wird das Synchronisationsscript ausgeführt. | ||
== Siehe auch == | == Siehe auch == | ||
Zeile 220: | Zeile 228: | ||
[[Kategorie:Browser]] | [[Kategorie:Browser]] | ||
[[Kategorie:Scripte]] | [[Kategorie:Scripte]] | ||
[[en:Firefox Ramdisk]] |
Aktuelle Version vom 21. Mai 2019, 07:28 Uhr
Dieser Artikel wurde als veraltet markiert, und sollte kontrolliert, und gegebenfalls korrigiert bzw. aktualisiert werden.
Hinweis: Dieser Artikel richtet sich an erfahrenere Linux-Nutzer
Der Startvorgang von Firefox gehört nach landläufiger Meinung nicht zu den schnellsten Startvorgängen auf einem Linux-System. Dies ist einerseits natürlich Firefox’ Funktionsweise geschuldet, andererseits aber auch dem verwendeten Firefox-Profil, das mitunter mehrere hundert Megabyte groß werden kann.
Gegen die Probleme des langsamen Startens, begründet in der Funktionsweise, kann man nicht viel tun. Wohl aber kann man die Performance verbessern, indem man sich des Firefox-Profils annimmt. Man kann das Profil nicht nur versuchen schlank zu halten, sondern es auch in eine Ramdisk auslagern, womit sich dieser Artikel beschäftigt.
Vorüberlegungen
Wenn man einen einfachen Test macht, sieht man sofort, wie viel schneller der Arbeitsspeicher gegenüber der Festplatte ist. Hierfür kann man z.B. dd verwenden und damit eine ein Gigabyte große Datei in eine Ramdisk schreiben, und danach den Test noch mal mit einer Festplatte wiederholen.
dd if=/dev/zero of=/media/ramdisk/file bs=10M count=100
100+0 Datensätze ein 100+0 Datensätze aus 1048576000 Bytes (1,0 GB) kopiert, 1,1095 s, 945 MB/s
dd if=/dev/zero of=/home/user/file bs=10MB count=100
100+0 Datensätze ein 100+0 Datensätze aus 1000000000 Bytes (1,0 GB) kopiert, 12,0017 s, 83,3 MB/s
Der Test wurde mit relativ kleinen Blockgrößen gemacht (zur genauen Syntax siehe Wiki-Artikel über dd. Das Ergebnis zeigt deutlich, eine Ramdisk ist mit 945 Megabyte pro Sekunde deutlich schneller als die Festplatte mit 83,3 Megabyte pro Sekunde. Man könnte nun also das Firefox-Profil in eine Ramdisk schreiben und von deren enormem Geschwindigkeitsvorteil profitieren.
Zwei Nachteile hat diese Vorgehensweise allerdings: Zum Einen benötigt eine Ramdisk, wie der Name schon verrät, RAM. Von diesem sollte also ausreichend zur Verfügung stehen. Bei einem System mit nur einem Gigabyte Arbeitsspeicher lohnt sich eine Ramdisk wahrlich nicht. Zwei Gigabyte Arbeitsspeicher sollten bei der in diesem Artikel vorgestellten Technik mindestens vorhanden sein, besser mehr.
Zum Anderen sind die Inhalte einer Ramdisk nur so lange verfügbar, wie der RAM mit Strom versorgt wird, und die Ramdisk gemountet ist. Wenn das System unerwartet ausfällt, oder man den Rechner herunter fährt, wird der RAM entladen, und die Ramdisk somit geleert. Man muss also dafür sorgen, dass die Inhalte der Ramdisk in regelmäßigen Abständen, mindestens aber beim Starten und Beenden mit einem Verzeichnis auf der Festplatte – zum Beispiel mit rsync – synchronisiert werden.
Vorbereitungen
Um die in den Vorüberlegungen beschriebene Technik anzuwenden, bedarf es dreierlei Dingen. Zum Einen muss eine Ramdisk angelegt werden, zum Anderen muss rsync installiert werden und zu guter Letzt muss das Firefox-Profilverzeichnis verschoben werden.
Ramdisk
Es wird eine Ramdisk benötigt. Die Ramdisk belegt standardmäßig maximal die Hälfte des gesamten zur Verfügung stehenden Arbeitsspeichers abzüglich Swap. Ramdisks können mittels mount erstellt werden.
Man sollte die Größe der Ramdisk an das Firefox-Profil anpassen. Zwar belegt eine Ramdisk nur so viel Platz, wie sie tatsächlich benötigt, aber man sollte immer klare Grenzen stecken, innerhalb derer sich das System bewegen darf.
Zuerst prüft man, wie groß das Firefox-Profilverzeichnis ist.
du -hs /home/user/.mozilla/firefox/
122M /home/user/.mozilla/firefox/
Anhand dieser Angabe kann man nun die Größe der Ramdisk bestimmen. Man könnte hier zum Beispiel großzügig auf 200 Megabyte aufrunden, und noch zur Sicherheit 100 Megabyte auf diesen Wert draufschlagen. Somit hätte die zu erstellende Ramdisk eine Größe von 300 Megabyte. Mit dieser Angabe kann nun die Ramdisk in der fstab definiert werden.
[…] none /media/ramdisk tmpfs defaults,size=300m 0 0 […]
Standardmäßig haben alle User Schreib- und Leserechte für die Ramdisk. Wenn man dies nicht will, kann man die Optionsangaben um „mode“, „uid“ und „gid“ erweitern, denen man die entsprechenden, gewünschten Werte zuweist. Der Mountpoint /media/ramdisk
muss natürlich angelegt werden. Dann wird die Ramdisk mittels mount /media/ramdisk
gemountet.
rsync
rsync ist im „extra“-Repository verfügbar, und kann aus diesem heraus installiert werden.
pacman -S rsync
Es sind keine weiteren Einstellungen nötig, da nachfolgend alles Nötige über die Befehlszeile, sowie ein Script geregelt wird.
Profilverzeichnis
Achtung: Man sollte den Wiki-Artikel entweder als PDF abspeichern, in einem anderen Browser als Firefox, oder an einem anderen Rechner geöffnet lassen, während man diese Schritte durchführt, da Firefox während dieser Zeit nicht laufen sollte. Wann immer man mit Dateien arbeitet, die wichtig sind, sollte man von diesen Dateien ein Backup anfertigen, auch wenn eigentlich nichts passieren sollte!
Da das Script, das nachfolgend in diesem Artikel erstellt wird, mit Symlinks arbeitet, muss das Firefox-Profilverzeichnis verschoben werden, da das eigentliche Verzeichnis später durch einen Symlink ersetzt werden wird.
mv /home/user/.mozilla/firefox /home/user/.mozilla/firefox-profiles
Hier wird das Profil-Verzeichnis einfach in „firefox-profiles“ umbenannt. Der Name wird später im Script einmalig angegeben und mittels einer Variablen verwendet.
Testlauf
Nun, da alles soweit vorbereitet ist, kann man das Ganze mal testweise durchspielen, was später durch ein Script automatisiert werden wird.
# Prüfen, ob die Ramdisk gemountet ist mount | grep /media/ramdisk # Firefox-Profilverzeichnis erstmalig auf die Ramdisk kopieren, # und dabei alle Dateirechte und -Zeiten erhalten cp -a /home/user/.mozilla/firefox-profiles /media/ramdisk/ # Prüfen, ob Verzeichnis kopiert ls -ld /media/ramdisk/firefox-profiles # Symlink anlegen, um das Profilverzeichnis wieder über seinen # Standard-Namen verfügbar zu machen ln -s /media/ramdisk/firefox-profiles/ /home/user/.mozilla/firefox
Nun kann man Firefox bereits wieder starten. Man sollte nun einen gewissen Geschwindigkeitsgewinn feststellen. Gerade die History, sowie als auch die Awesomebar und die Bookmarks (gerade bei großen Bookmarksammlungen sollte es sich sehr bemerkbar machen) sollten nun um einiges Flotter reagieren.
Testweise sollte man nun auch das Synchronisieren mittels rsync vornehmen. Dabei sollte man den Verbose-Mode von rsync benutzen, um zu sehen, was gemacht wurde.
rsync -av --delete /media/ramdisk/firefox-profiles/ /home/user/.mozilla/firefox-profiles/
sending incremental file list [verschiedene Dateien] sent 6732789 bytes received 436 bytes 13466450.00 bytes/sec total size is 117512183 speedup is 17.45
Es wurden also einige Dateien aus der Ramdisk in das Firefox-Profilverzeichnis auf der Festplatte kopiert. Testweise kann man einfach mal ein Bookmark anlegen, Firefox schließen, den rsync-Befehl ausführen, und den Symlink ändern.
Es sollte beim manuellen Synchronisieren mittels rsync eine Datei „places.sqlite“ synchronisiert werden, wenn dies der Fall war, wird der Bookmark auch beim Starten aus dem Verzeichnis auf der Festplatte vorhanden sein. Das System funktioniert also.
Script
Das Script hat die Aufgabe, beim Starten von X zu prüfen, ob die Ramdisk vorhanden ist, und wenn ja, das Firefox-Profilverzeichnis in die Ramdisk zu kopieren, und den Symlink zu erstellen. Das Script tut genau das, was beim Testlauf manuell gemacht wurde.
Im Kopfbereich des Scripts müssen die Daten an die eigene Umgebung angepasst werden. Dabei sind allerdings schon sinnvolle Vorgaben gemacht, die sich mit den Vorbereitungen aus diesem Wiki-Artikel decken.
#!/bin/bash # Put Firefox to ramdisk if available, and create symlink at default # location to the version in ramdisk. If ramdisk not available, just link # to profiles dir on harddisk. MOZILLADIR="/home/user/.mozilla" PROFILEDIR="firefox-profiles" FIREFOXDIR="firefox" RAMDISKMP="/media/ramdisk" INFOFILE="${MOZILLADIR}/ramdiskdata" ACTION="${1}" if [ "${ACTION}" = "copy" ]; then if [ "$(mount | grep ${RAMDISKMP} 2> /dev/null)" ]; then rm -f "${MOZILLADIR}/${FIREFOXDIR}" cp -fa "${MOZILLADIR}/${PROFILEDIR}" "${RAMDISKMP}/" fi if [ "$(ls -ld ${RAMDISKMP}/${PROFILEDIR} 2> /dev/null)" ]; then rm -f "${MOZILLADIR}/${FIREFOXDIR}" ln -s "${RAMDISKMP}/${PROFILEDIR}/" \ "${MOZILLADIR}/${FIREFOXDIR}" echo "ramdisk" > "$INFOFILE" else rm -f "${MOZILLADIR}/${FIREFOXDIR}" ln -s "${MOZILLADIR}/${PROFILEDIR}/" \ "${MOZILLADIR}/${FIREFOXDIR}" echo "harddisk" > "$INFOFILE" fi fi if [ "${ACTION}" = "sync" ]; then LOCATION=$(cat "${INFOFILE}") if [ "${LOCATION}" = "ramdisk" ]; then /usr/bin/rsync -aq --delete "${RAMDISKMP}/${PROFILEDIR}" "${MOZILLADIR}" fi fi
Mittels eines Parameters wird die entsprechende Aktion ausgeführt. Wenn das Script mit dem Parameter „copy“ aufgerufen wird, prüft es, ob die Ramdisk gemountet ist, und kopiert dann das Profilverzeichnis in eben diese Ramdisk.
Im zweiten Schritt wird dann geprüft, ob das Verzeichnis auf der Ramdisk vorhanden ist. Wenn ja, wird der Symlink dorthin gesetzt, wenn nein, wird der Symlink auf das Profilverzeichnis auf der Festplatte gesetzt.
In beiden Fällen wird eine entsprechende Information in eine Informationsdatei geschrieben, die vor dem Synchronisieren überprüft wird.
Das Synchronisieren wird mittels des Parameters „sync“ eingeleitet. Hier liest das Script die Informationsdatei ein, und synchronisiert mittels rsync das Festplattenverzeichnis mit dem Ramdiskverzeichnis.
Verwendung
Die Verwendung des Scripts gliedert sich in zwei Abschnitte. Zum Einen wird es beim Starten der X-Session verwendet, um das Firefox-Profilverzeichnis in die Ramdisk zu schreiben, zum Anderen wird über das Script auch die Synchronisierung – entweder einmalig beim Runterfahren, oder regelmäßig via Cronjob – vorgenommen.
Anwendung
Das Script als fxramdisk.sh unter /home/user/.scripts/ speichern und mit
# chmod -x /home/user/.scripts/fxramdisk.sh
ausführbar machen (Gegebenenfalls user durch Benutzernamen ändern).
Erstmalig
Da das Profilverzeichnis von Firefox nur einmalig in die Ramdisk geschrieben werden muss, reicht es, das Script mit dem entsprechenden Parameter einmalig beim starten von X auszuführen. Man kann den Aufruf zum Beispiel in die „.xinitrc“-Datei schreiben. Wenn man den Eintrag vor den Aufruf des Fenstermanagers setzt, kann man sich sicher sein, dass das Script abgearbeitet wurde, wenn der Fenstermanager geladen ist.
. .scripts/fxramdisk.sh copy [Aufruf des Fenstermanagers]
In diesem Fall wurde das Script im home-Verzeichnis des Users unter „.scripts/fxramdisk.sh“ abgelegt.
Will man die Ramdisk nicht mehr verwenden, so unmountet man sie, und führt das Script einfach erneut mit dem copy-Parameter aus. Da die Ramdisk nun nicht mehr existiert, werden wird die Infodatei und der Symlink angepasst. Man sollte dies unter gar keinen Umständen machen, während Firefox noch geöffnet ist.
Script über Systemd ausführen
Unter /etc/systemd/system eine Datei namens “fxramdisk.service” mit folgendem Inhalt erstellen: (user=durch Benutzername ersetzen)
[Unit] Description=Firefox Ramdisk ConditionPathExists=/home/user/.scripts/fxramdisk.sh [Service] Type=oneshot RemainAfterExit=yes ExecStart=/home/user/.scripts/fxramdisk.sh copy ExecStop=/home/user/.scripts/fxramdisk.sh sync [Install] WantedBy=multi-user.target
Nun einfach mit:
# systemctl enable fxramdisk.service
den Dienst starten Fertig.
Nun wird automatisch beim starten von Archlinux das Firefox-Profil auf die RAM-Disk ausgelagert und beim herunter fahren mit dem Profil auf der HDD synchronisiert.
Cronjob
Wem das zu unsicher ist, oder wer seinen Rechner nur selten herunterfährt, aber trotzdem die Daten aus der Ramdisk auf die Festplatte sichern möchte, kann sich auch einen Cronjob einrichten, der zum Beispiel alle 5 Minuten eine Synchronisation vornimmt.
*/5 * * * * bash /home/user/.scripts/fxramdisk.sh sync
Das Script berücksichtigt dabei, ob die Ramdisk gemountet ist, oder nicht, wenn nach dem Mounten das Script mit dem „copy“-Parameter ausgeführt wurde. Wenn die Ramdisk nicht gemountet ist, oder die Informationsdatei falsch ist, macht der aufruf nichts.
Wrapper
Wenn man bei jedem Beenden der letzten Instanz von Firefox möchte, dass die Version auf der Fesplatte mit den Inhalten der Ramdisk abgeglichen wird, kann man sich auch ein Wrapper-Script bauen. Dieses Script ruft man dann statt Firefox auf.
#!/bin/bash # Wrapper-Script for ramdisk/HDD sync using the ramdisk profiles script FIREFOXPATH="$(which firefox)" SCRIPTPATH="/home/user/.scripts/fxramdisk.sh" "${FIREFOXPATH}" $@ if [ -z "$(ps -U $USER | grep ' firefox$')" ] ; then "${SCRIPTPATH}" sync fi
Dieses Script kann man nun statt Firefox ausführen, indem man es zum Beispiel unter /home/user/.scripts/fxwrapper
speichert, und in der bashrc einen Alias erstellt.
alias firefox="/home/user/.scripts/fxwrapper"
Nachdem man sich neu eingeloggt, hat, wird nun bei Aufruf von firefox
das Wrapperscript aufgerufen. Die Abarbeitung des Scripts pausiert, so lange Firefox läuft, und wird fortgesetzt, wenn die entsprechende Firefox-Instanz wieder beendet wird, dann wird überprüft, ob noch eine Firefox-Instanz läuft, wenn dies nicht der Fall ist, wird das Synchronisationsscript ausgeführt.