De:RamDisk Windows

Aus YaCyWiki
Wechseln zu: Navigation, Suche

YaCy auf RAMdisk - inkl. Autostart und -stop (Windows)

Einrichten von YaCy auf einer RAMdisk. Wegen der verfügbaren Größe von RAM macht es (noch) keinen Sinn, die Such-Datenbank selbst auf eine RAMdisk zu verschieben, da diese nach einigen Wochen Betrieb in den GB-Bereich gelangt. Sinnvoll ist das Verschieben der Log-Files und des Caches – beide erzeugen reichlich In- und Output.

Das Einrichten einer RAMdisk

Mit Bordmitteln von Windows kann man nur eine RAMdisk von maximal 32 MB einrichten (googeln mit den Stichworten "RAMdisk Windows XP"). Wegen der größeren Flexibilität und der leichten Konfiguration gehe ich in dieser Anleitung nur auf die Software von AR-Soft ein, die man hier herunterladen kann (Dateigröße 93 kB). Die Entwicklung und der Support sind eingestellt, die Software ist Freeware. Nach dem Download und der Installation der Software ist ein Neustart des Rechners nötig.

Der Konfigurationsdialog erfolgt beim ersten Start automatisch, später kann man in der Systemsteuerung "RAM Disk" wählen, um den Dialog zu erhalten. Im Reiter "General" stellt man den Laufwerksbuchstaben (beliebig – Vorgabe ist Z:), den Startup-Type (Vorgabe und sinnvoll ist "Automatic") und den "Operating Mode" ("Emulate a local hard disk" ist das, was wir brauchen) ein.

Der Reiter "Geometry" ermöglich das Einstellen der Größe der RAMdisk – der Wert ist nach Belieben zu wählen, ich verwende bei 1 GB Arbeitsspeicher eine RAMdisk-Größe von 50 MB. Hier muss man sicherlich einen Kompromiss aus Größe des Rams und der RAMdisk finden. Ich habe keine Erfahrungswerte – man muss sich nur im Klaren sein, dass der für Windows nutzbare Hauptspeicher entsprechend sinkt. Aber auch bei 256 MB Arbeitsspeicher ist eine RAMdisk von 32 MB sicherlich möglich (über Berichte von Erfahrungswerten freuen wir uns). Die Werte für Bytes, Sectors und Tracks kann man sicherlich so übernehmen (hier sollte nur dran drehen, wer weiß, was er tut). Mit dem letzten Reiter "File System" verhält es sich genauso – die Warnung "For advanced users only!" sollte man ernst nehmen.

Änderungen an der RAMdisk sind erst nach einem Neustart wirksam.

Damit auf der RAMdisk gelöschte Dateien nicht immer im Papierkorb –der sich dann auch auf der RAMdisk befindet – gelöscht werden, sollte man den Papierkorb für die RAMdisk ausschalten (über die Eigenschaften des Papierkorbs).

Das Verwalten der RAMdisk (sichern und füllen)

Der Inhalt der RAMdisk wird beim Beenden von Windows natürlich gelöscht, so dass ein Sichern des Inhalts notwendig bzw. zumindest sinnvoll ist. Kommerzielle Produkte sichern den Inhalt automatisch, wir machen das von Hand – na ja, fast: per Batch-Datei.

Mit einem Editor wird eine neue Datei "RAMdisk_sichern.bat" erzeugt, die den Inhalt der RAMdisk Z: nach C:\RAMdisk kopiert. Das Kopieren lässt sich mit xcopy bewerkstelligen, die Optionen sorgen dafür, das auch versteckte Dateien kopiert werden und bei Fehlern weiter kopiert wird (für genaues siehe "xcopy /?"). Damit keine Dateileichen entstehen, muss der alte Inhalt vor dem neuen Kopieren gelöscht werden. Die schnellste Methode ist das Löschen und Neuanlegen des Ordners.

rd /S /Q c:\RAMdisk\ 
md c:\RAMdisk\ 
xcopy /k /r /e /i /s /c /h /Y z:\*.* c:\RAMdisk\*.*

Da xcopy bei mir reproduzierbar das Kopieren der temporären Internetdateien des Internet Explorer immer mit dem Fehler "zu wenig Arbeitsspeicher" abgebrochen hat, bin ich auf robocopy umgestiegen. Das Microsoft Kommandozeilen-Kopierprogramm ist wesentlich mächtiger als xcopy. Man findet es in diverses Resource-Kits (z. B. bei Microsoft), es soll auch auf manchen auf Windows CDs vorhanden sein (wird bei einer Windows-Installation nicht auf die Festplatte kopiert). Mit CopyRite XP 1.1.0 gibt es hier ein kostenloses GUI dazu, das wir hier natürlich nicht brauchen. Robocopy kann Verzeichnisse synchronisieren, d. h. in der RAMdisk nicht vorhandene Dateien werden aus dem Sicherungsverzeichnis gelöscht (Option /PURGE). Die Option "/XD Recycled" kopiert das Verzeichnis "Recycled" nicht mit: "/IA:RASHCNETO" entspricht allen Dateitypen und kopiert möglichst viel (siehe "robocopy /?").

robocopy z:\ c:\RAMdisk\ /S /PURGE /XD Recycled /IA:RASHCNETO

Die eben erstellte Batch-Datei wird regelmäßig mit dem Taskplaner aufgerufen. Er findet sich in der Systemsteuerung unter "Geplante Tasks". Wie oft man den Inhalt der RAMdisk sichert hängt von den eigenen Gewohnheiten ab – und davon, wie oft der Rechner so abstürzt. Ich sichere alle 2 Stunden.

Weiterhin wird die Batch-Datei beim Herunterfahren des Rechners aufgerufen. Dies erledigt man mit dem Gruppenrichtlinien-Editor ("gpedit.msc" unter "Ausführen" eingeben). Im Bereich "Computerkonfiguration" existiert im Punkt "Windows-Einstellungen" der Eintrag "Skripts". Doppelklickt man auf Herunterfahren, so kann man hier die Batch-Datei auswählen, so dass der Inhalt der RAMdisk automatisch beim Herunterfahren gesichert wird.

Beim Starten des Rechners sollte der gesicherte Inhalt in die RAMdisk zurück geschrieben werden. Dies erledigt die Batch-Datei "RAMdisk_zurueckschreiben.bat", die über den Taskplaner beim Systemstart gestartet wird. Dieser Zeitpunkt bietet sich an, da dann auch YaCy vor der ersten Anmeldung für alle Benutzer auf dem Rechner gestartet werden kann (manche arbeiten ja unter Windows nur als Benutzer und wechseln ab und zu für Verwaltungsaufgaben zu einem Administrator-Account). Dazu mehr im nächsten Punkt.

xcopy /k /r /e /i /s /c /h /Y c:\RAMdisk\*.* z:\*.*

oder

robocopy c:\RAMdisk\ z:\ /S /PURGE /IA:RASHCNETO

Das Einrichten von YaCy für die Verwendung der RAMdisk

Log-Files auf der RAMdisk

Um die Log-Files auf die RAMdisk zu verlagern, wird einmal von Hand der Ordner „log“ auf der RAMdisk erzeugt. Im YaCy-Verzeichnis befindet sich die Datei yacy.logging, in der der Speicherort der logs, die Anzahl und Größe der einzelnen log-Files steht. In der Standard-Einstellung sind es je maximal 10 Dateien für yacy.log und proxyAccess00.log von maximal 1 MB (1048576 bytes). Die Anzahl sollte man der Größe der RAMdisk anpassen. Ich verwende 5 proxyAccess00.log und 10 yacy.log.

java.util.logging.FileHandler.limit = 1048576 
java.util.logging.FileHandler.count = 20 
java.util.logging.FileHandler.pattern = z:/LOG/yacy%u%g.log 
de.anomic.http.httpdProxyHandler.logging.FileHandler.limit = 1048576 
de.anomic.http.httpdProxyHandler.logging.FileHandler.count = 20 
de.anomic.http.httpdProxyHandler.logging.FileHandler.pattern = z:/LOG/proxyAccess%u%g.log

Cache auf der RAMdisk

Um den Cache auf die RAMdisk zu verschieben, gibt man auf der Seite "Proxy Indexing" in YaCy den neuen Speicherort des Caches an (ab SVN 631). Alternativ und für die älteren Versionen muss man in der Datei yacy\data\settings\httpProxy.conf den Eintrag "proxyCache=DATA/HTCACHE" suchen und durch "proxyCache=z:/HTCACHE" ersetzen.

Die Ordner auf der RAMdisk müssen vor dem Neustart von YaCy vorhanden sein. Ich habe deshalb die Start-Batch-Dateien für YaCy entsprechend geändert, und vor den Aufruf java (in startYACY.bat) folgendes kopiert, um die Ordner notfalls automatisch zu erzeugen.

md z:\log 
md z:\htcache

Starten und Beenden von YaCy

Das Starten und Beenden lässt sich einfach automatisieren. YaCy kann man über den Taskplaner beim Systemstart starten. Ich mache es in derselben Batch-Datei, die auch die RAMdisk zurück schreibt. So kann ich sicher gehen, dass die RAMdisk existiert, wenn YaCy gestartet wird – ansonsten startet YaCy nicht, da die Ordner nicht verfügbar sind.

Das Beenden von YaCy ist etwas kniffliger, da die Batch-Datei zwar das Beenden von YaCy initiiert, aber nicht auf das Ende von YaCy wartet. Startet man die Batch-Datei zum Beenden von YaCy, so wird nur auf deren Abarbeitung gewartet. Mit dem Gruppenrichtlinien-Editor kann man analog zum Sichern der RAMdisk beim Beenden des Rechners auch YaCy beenden, indem in der Batch-Datei auch noch die Datei gestartet wird, die YaCy beendet. Meine Stop-Datei, die im Gruppenrichtlinien-Editor beim Herunterfahren des Rechners als abzuarbeitendes Skript eingetragen ist, sieht folgendermaßen aus.

call c:\yacy\stopYACY.bat 
call c:\batch\ramdisk_sichern.bat

Der Aufruf einer Batch-Datei aus einer anderen heraus muss mit dem Befehl „call“ beginnen, da sich sonst die aufrufende Batch-Datei beendet, wenn eine weitere gestartet wird. Durch den Aufruf per „call“ wartet die aufrufende Batch-Datei mit dem Abarbeiten der weiteren Befehle, bis die aufgerufene Batch-Datei beendet ist.

Das Automatisieren funktioniert nur, wenn das YaCy-Fenster nicht unter dem Account sichtbar ist, mit dem man arbeitet. Denn dann wird das Fenster bzw. das zugehörige Programm beim Abmelden beendet. YaCy muss also unabhängig vom angemeldeten Account laufen. Der Nachteil, wenn man das YaCy-Fenster nicht sieht, besteht darin, dass man keinen Threaddump machen kann – das ist für die Entwickler bei Fehlern recht interessant.

Jetzt muss man nur noch dafür sorgen, dass das Skript beim Herunterfahren erst dann beendet wird, wenn YaCy sich auch wirklich beendet hat. Dies erfolgt mit dem Befehl/Programm "waitfor.exe". Es soll auf Windows 98 CDs sein. Einfach mal ein bisschen googeln. Waitfor sendet ein Signal und wartet auf Antwort. Die Funktion ist recht simpel. Nach dem Aufruf von YaCy in der startYACY.bat sendet man ein Signal mit waitfor. Dieses Signal wird erst dann gesendet, wenn die Batch-Datei an der entsprechenden Stelle angekommen ist – und das ist erst nach Beendigung von YaCy der Fall. In der startYACY.bat steht also

java -classpath %CLASSPATH% yacy 
c:\batch\waitfor.exe /S NameDesComputers /SI yacystop

Es wird ein Signal namens "yacystop" an den Rechner namens "NameDesComputers" gesendet (hier müsst ihr natürlich den Namen eures Computers eintragen). Auf dieses Signal wartet die Datei stopYACY.bat bevor sie sich beendet, d. h. sie wird um eine Zeile erweitert.

java -classpath %CLASSPATH% yacy -shutdown 
c:\batch\waitfor.exe yacystop /T 300

Die Option /T 300 sorgt dafür, dass längstens 300 Sekunden auf das Signal gewartet wird – sollte YaCy sich in der Zeit nicht beendet haben, ist es wohl eh abgestürzt. Man hat zu diesem Zeitpunkt nur keine Eingriffsmöglichkeiten, da der Rechner sich beim Herunterfahren befindet.

Hat man die "Maximum number of Word Caches" auf der Seite "Performance" bzw. den entsprechenden Wert "WordCacheMax" in der Datei "httpProxy.conf" auf mehr als die Vorgabe von 10000 gestellt, so dauert das Herunterfahren u. U. deutlich länger. Es ist sicher sinnvoll, die normale Zeit von YaCy zum Beenden zu stoppen, eine Sicherheitsreserve (Faktor 2!?) zuzugeben und die Wartezeit entsprechend anzupassen.

Alternativ kann man YaCy auch mit einer anderen Priorität als "normal" starten. Zur (sinnvollen) Verfügung stehen "belownormal" und "low". Ich habe mit "low" gute Erfahrungen gemacht. Der Befehl "start" ermöglicht dies. Die "startYACY.bat" muss erweitert werden zu

start /b /wait /low java -classpath %CLASSPATH% yacy 
c:\batch\waitfor.exe /S NameDesComputers /SI yacystop

Bei der Gelegenheit würde ich die so veränderte Startdatei unter einem anderen Namen abspeichern, um sie bei einer neuen YaCy-Version nicht durch die dann aktuellen Batch-Dateien zu ersetzen. Ein regelmäßiger Vergleich der Dateien bringt Änderungen der Startdateien zutage.

Anmerkung: Nach neuerlichen Tests habe ich festgestellt, dass ein Start von YaCy über die noconsole-Datei zu Schwierigkeiten führt, da javaw ein Abmelden nicht übersteht. Insofern kommt die eigentliche Stop-Datei gar nicht mehr zum Zuge – YaCy wird vorher vom Betriebssystem abgeschossen. Wer YaCy im Hintergrund laufen lassen möchte, muss also die normale Java-Version verwenden.

Das Einrichten des Browser-Caches auf der RAMdisk

Jetzt muss nur noch der Browser-Cache auf die RAMdisk verschoben werden. Dies erfolgt in jedem Browser anders – ein bisschen googeln dazu sollte zu jedem Browser eine Anleitung liefern. Jetzt surrt das Internet so richtig.

Temp-Verzeichnis auf der RAMdisk

Früher habe ich mal damit experimentiert und kann mich nur an eine wesentliche Schwachstelle dieser Idee erinnern. Beim Handling mit großen Dateien (größer als die RAMdisk) – z. B. beim Entpacken oder beim Brennen – werden die Dateien teilweise im Temp-Verzeichnis zwischengespeichert. Ist dieser nicht groß genug, bricht der Vorgang ab. In vielen Programmen kann man zwar ein anderes Temp-Verzeichnis angegeben, muss dies dann aber auch tun. Der Geschwindigkeitsvorteil hat sich bei mir nicht als so wahnsinnig erwiesen. Es ist aber sicherlich einen Versuch wert, sofern man genügend RAM hat.

Das Temp-Verzeichnis verschiebt man über die Eigenschaften des Arbeitsplatzes unter dem Reiter "Erweitert" über den Button "Umgebungsvariablen".