Dienstag, November 22, 2016

Kein Spass mit tar

Da versuche ich also, eine virtuelle Maschine aus Dateien in einem Verzeichnis auf einer anderen Maschine wiederherzustellen. Ich habe eine Live-CD in meiner neuen Maschine, partitioniere und formatiere die Platte, mounte sie, und ... ja, jetzt gehts los...

Auf der sendenden Seite mache ich ein tar cvz . | netcat 1.2.3.4 12345, auf der empfangenden Seite mache ich ein netctat -l -p 12345 | tar xz und kopiere so alle Dateien auf die neue Maschine rüber. Leider beendet sich der Stream nicht richtig, und nachdem alle Dateien kopiert wurden, muss ich noch mit Ctrl-C das netcat abbrechen.
Jetzt noch schnell den Bootloader einrichten, und ich bin fertig! Dazu kann ich ja einfach in einem root-Jail update-grub und install-grub verwenden!

chroot /mnt /bin/bash 
permission denied

Das kann ja wohl nicht wahr sein!

Stellt sich raus, dass zB /bin/systemd eine leere Datei ist auf meinem neuen System. Auf meinem alten ist es ein Symlink nach /lib/systemd/systemd. Wieso ist es eine leere Datei? Da sind noch mehr leere Dateien... Vielleicht auch Libraries? Ich suche nicht alles ab. Nach viel googlen finde ich raus, es ist wie folgt...:

tar entpackt Symlinks aus einem merkwürdigen Sicherheitsgrund nicht direkt, sondern erstellt Platzhalterdateien, die in einem zweiten Lauf erst (wenn sich die Platzhalterdateien nicht verändert haben) durch Symlinks ersetzt werden. Da der mein Netzwerkstream sich nicht richtig beendete, musste ich tar und netcat ja mit Ctrl-C abbrechen, und da ich mir keine Gedanken darüber machte, machte ich das auf der empfangenden Seite. Damit habe ich aber verhindert, dass dieser zweite Lauf durchlaufen konnte, und behielt leere Dateien. Meine Kopie war nicht in Ordnung, chroot funktionierte nicht.
Als ich aber auf der sendenden Seite mit Ctrl-C abbrach, konnte sich tar auf der empfangenden Seite korrekt beenden, seinen zweiten Lauf machen (den man nicht mitbekommt. Es beendet sich einfach), und zack! meine Kopie ist in Ordnung!

Danach funktionierte alles. Mal wieder zwei Stunden im weg mit unvorhersehbarem!

Mittwoch, November 16, 2016

Firefox fix machen

Ich habe endlich eine Möglichkeit gefunden, meinen Firefox zu beschleunigen. Die Lösung ist es, die ganzen Optimierungen abzuschalten.

javascript.options.asmjs = false
javascript.options.baselinejit = false
javascript.options.ion = false
javascript.options.compact_on_user_inactive_delay = 15000

Die JIT-Compilate brauchen entweder viel Speicher oder sind nicht gut mit der Garbage-Collection kompatibel, ich weiss es nicht. Mit diesen Einstellungen fahre ich meinen Firefox von manchmal bis zu 2,5GB, wo die GC ständig zuschlägt aber nix wegräumt auf eher 1,2GB runter, und die GC funktioniert.

ion, baselinejit und asmjs sind dazu da, Javascript schneller auszuführen. Meine Maschine ist mittlerweile eigentlich schnell genug, das auch ohne diese Optimierungen zu schaffen, und diese Optimierungen zerstören offenbar die Speicherverwaltung.

(Bezüglich Firefox 49.0.2)