Bisher konnte ich die virtuellen Speicher-Swap-Dateien von Apple auf eine dedizierte Partition auf meiner Festplatte verschieben. Die von mir verwendete Technik ist in einem Thread auf forums.macosxhints.com beschrieben.
In der Entwicklervorschau von Snow Leopard funktioniert diese Methode jedoch nicht mehr. Weiß jemand, wie es mit dem neuen Betriebssystem gemacht werden könnte?
Update: Ich habe die Antwort von dblu als akzeptiert markiert , obwohl es nicht ganz funktioniert hat, weil er ausgezeichnete, detaillierte Anweisungen gegeben hat und weil sein Vorschlag, sie plutil
letztendlich zu verwenden, mich in die richtige Richtung gelenkt hat . Die vollständige funktionierende Lösung finden Sie hier in der Frage, da ich nicht genug Reputation habe, um die akzeptierte Antwort zu bearbeiten.
Update Nr. 2: Die Prozedur wurde geändert, um die Technik von ekl zu veranschaulichen. Dies vereinfacht das Ganze erheblich, da kein intermediäres Shell-Skript erforderlich ist:
Komplette Lösung:
1.
Öffnen Sie das Terminal und erstellen Sie eine Sicherungskopie von Apples Standard-Dynamic_Pager.plist:
$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}
2.
Konvertieren Sie die Plist von binärem zu einfachem XML:
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
3.
Öffnen Sie die konvertierte Liste mit einem Texteditor Ihrer Wahl. (Ich benutze pico
, siehe dblus Antwort für ein Beispiel mit vim
):
$ sudo pico -w com.apple.dynamic_pager.plist
Es sollte wie folgt aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
<key>EnableTransactions</key>
<true/>
<key>HopefullyExitsLast</key>
<true/>
<key>Label</key>
<string>com.apple.dynamic_pager</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/sbin/dynamic_pager</string>
<string>-F</string>
<string>/private/var/vm/swapfile</string>
</array>
</dict>
</plist>
4.
Ändern Sie das Array ProgramArguments (Zeilen 13 bis 18), um den von ZILjr vorgeschlagenen Befehl wait4path shell zu verwenden, bevor Sie dynamic_pager starten. In Anmerkung 1 finden Sie Einzelheiten dazu, warum dies erforderlich ist. Im folgenden Beispiel heißt meine Partition "Swap", und ich habe mich dafür entschieden, die Swap-Dateien in einem versteckten Verzeichnis namens ".vm" auf dieser Partition abzulegen. Stellen Sie sicher, dass das von Ihnen angegebene Verzeichnis tatsächlich vorhanden ist . Das XML sollte wie folgt aussehen:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>/bin/wait4path /Volumes/Swap/ &&
/sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
</array>
5.
Speichern Sie die Liste und kehren Sie zur Eingabeaufforderung des Terminals zurück. Mit pico
, wären die Befehle:
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6.
Konvertieren Sie die geänderte Plist zurück in eine Binärdatei:
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7.
Starten Sie Ihren Mac neu. Wenn Sie auf Probleme stoßen, wechseln Sie in den ausführlichen Startmodus, indem Sie Command-v unmittelbar nach dem Startsignal gedrückt halten. Auf diese Weise sehen Sie alle Startmeldungen, die während des Startvorgangs angezeigt werden. Wenn Sie auf noch schlimmere Probleme stoßen (dh wenn Sie den Anmeldebildschirm nie sehen), halten Sie stattdessen Befehl-s gedrückt. Dadurch wird der Computer im Einzelbenutzermodus gestartet (keine grafische Benutzeroberfläche, nur eine Eingabeaufforderung), und Sie können die in Schritt 1 erstellte Sicherungskopie von com.apple.dynamic_pager.plist wiederherstellen.
8.
Starten Sie nach dem Start des Computers das Terminal und überprüfen Sie, ob die Auslagerungsdateien tatsächlich verschoben wurden:
$ cd /Volumes/Swap/.vm
$ ls -l
Sie sollten so etwas sehen:
-rw------- 1 someUser staff 67108864 18 Sep 12:02 swapfile0
9.
Löschen Sie die alten Swap-Dateien:
$ cd /private/var/vm
$ sudo rm swapfile*
10.
Profitieren!
Anmerkung 1
Das Ändern der Argumente für dynamic_pager in der plist ohne Verwendung von wait4path
funktioniert nicht immer, und wenn dies fehlschlägt, geschieht dies auf spektakulär stille Weise. Das Problem rührt von der Tatsache her, dass dynamic_pager sehr früh im Startprozess gestartet wird. Wenn Ihre Swap-Partition beim erstmaligen Laden von dynamic_pager noch nicht gemountet wurde (nach meiner Erfahrung passiert dies 99% der Zeit), wird sich das System durchschlagen. Es wird eine symbolische Verknüpfung in Ihrem / Volumes-Verzeichnis erstellt, die denselben Namen wie Ihre Swap-Partition hat, jedoch auf den Standardspeicherort der Swap-Datei (/ private / var / vm) verweist. Wenn Ihre tatsächliche Swap-Partition aktiviert wird, wird ihr der Name Swap 1
(oder YourDriveName 1
) zugewiesen . Sie können das Problem erkennen, indem Sie das Terminal öffnen und den Inhalt Ihres Verzeichnisses / Volumes auflisten:
$ cd /Volumes
$ ls -l
Sie werden so etwas sehen:
drwxrwxrwx 11 yourUser staff 442 16 Sep 12:13 Swap -> private/var/vm
drwxrwxrwx 14 yourUser staff 5 16 Sep 12:13 Swap 1
lrwxr-xr-x 1 root admin 1 17 Sep 12:01 System -> /
Beachten Sie, dass dieser Fehler sehr schwer zu erkennen sein kann. Wenn Sie nach den Swap-Dateien suchen würden, wie ich in Schritt 12 gezeigt habe, würden Sie sie immer noch sehen ! Die symbolische Verknüpfung lässt den Eindruck entstehen, dass Ihre Auslagerungsdateien verschoben wurden, obwohl sie tatsächlich am Standardspeicherort gespeichert waren.
Anmerkung 2
Ursprünglich war es mir nicht möglich, dies in Snow Leopard zum Laufen zu bringen, da com.apple.dynamic_pager.plist im Binärformat gespeichert wurde. Ich habe eine Kopie der Originaldatei erstellt und sie mit Apples Eigenschaftenlisten-Editor (verfügbar mit Xcode) geöffnet, um Änderungen vorzunehmen, aber dieser Prozess hat der plist-Datei einige erweiterte Attribute hinzugefügt, wodurch das System sie ignorierte und nur die Standardeinstellungen verwendete . Wie dblu betonte, funktioniert die plutil
Konvertierung der Datei in einfaches XML wie ein Zauber.
Notiz 3
Sie können die Konsolenanwendung überprüfen, um alle Meldungen zu sehen, die dynamic_pager_init auf dem Bildschirm wiedergibt. Wenn die folgenden Zeilen immer wieder angezeigt werden, liegt ein Problem mit der Einrichtung vor. Ich bin auf diese Nachrichten gestoßen, weil ich vergessen habe, das in dynamic_pager_init angegebene Verzeichnis '.vm' zu erstellen.
com.apple.launchd[1] (com.apple.dynamic_pager[176]) Exited with exit code: 1
com.apple.launchd[1] (com.apple.dynamic_pager) Throttling respawn: Will start in 10 seconds
Wenn alles ordnungsgemäß funktioniert, wird die obige Meldung möglicherweise nur ein paar Mal angezeigt, und es werden keine weiteren Meldungen zum "Drosseln von Respawns" angezeigt. Das bedeutet, dass das System warten musste, bis die Partition geladen war, aber am Ende war es erfolgreich.
wait4path
dank Applicorns eine Nichtlösung gefunden Xupport für mich modifiziert. Ich werde eine vollständige Antwort posten, sobald ich herausgefunden habe, wie es geht, aber kurz gesagt, das letzte Programmargument wird in nur den neuen Pfad<string>/Volumes/swap/.vm/swapfile</string>
geändert (z. B. ), derOnDemand
Schlüssel wird in geändert<true/>
, undStartOnMount
am Ende wird ein Schlüssel mit einem Wert hinzugefügt von<true/>
. PS Diese Lösung funktioniert gut in Lion (zumindest für mich).StartOnMount
Flagge wurde in 10.5 hinzugefügt gemäß: mactech.com/articles/mactech/Vol.25/25.10/…Antworten:
HINWEIS : Siehe (auch) eine korrigierte / verbesserte Antwort in der Frage selbst.
Folgende Lösung hat bei mir funktioniert:
Öffnen Sie ein Terminal und sichern Sie com.apple.dynamic_pager.plist, das Sie in einer Sekunde ändern werden:
binäre plist in xml konvertieren:
und öffnen Sie es mit Ihrem bevorzugten Texteditor
es sieht ungefähr so aus:
Speichern und schließen Sie Ihren Editor in Zeile 17 modify / private / var / vm / swapfile (z. B. / Volumes / partition2 / swapfile) (": x" erledigt beides in vim).
konvertiere die plist Datei zurück in binär:
Nach dem Neustart Ihres Mac sollten Sie die Swap-Dateien in dem von Ihnen angegebenen Verzeichnis finden.
Wenn Sie auf Probleme stoßen, können Sie das Backup, das Sie im ersten Schritt erstellt haben, wiederherstellen mit:
quelle
plutil
für die Konvertierungen konnte ich die ursprüngliche Technik zum Laufen bringen. Ich habe die vollständige Lösung in der Frage gepostet (da ich nicht genug Mitarbeiter habe, um sie zu Ihrer Antwort hinzuzufügen). In meinem Hinweis Nr. 1 finden Sie eine detaillierte Beschreibung der Probleme, die beim Ändern der Plist aufgetreten sind.Ich habe diese Idee übernommen und ein bisschen weiterentwickelt, indem ich mich mit den Wachstums- und Rückgewinnungsstrategien befasst habe.
Details unter http://www.crypticide.com/dropsafe/article/3848 ; Ich würde einen Link zur GoogleCode-Projektseite "dynamicpagerwrapper" posten, aber der Blog sagt mir, dass ich nicht genug Reputationspunkte habe ...
quelle
nur eine frage: warum nicht einfach die .plist datei bearbeiten und hinzufügen
wait4path
, anstatt das zwischenprodukt zu verwendendynamic_pager_init
?etwas wie das:
BEARBEITEN: Wie im Kommentar von e.James und meinem folgenden Kommentar erläutert, ist der unmittelbar folgende XML-Block nicht gut, da ein Fehler (&& fehlt) vorliegt und nur das erste Argument des Arrays
ProgramArguments
als auszuführendes Programm analysiert wird !aber .. (nach unten scrollen)
Ende des falschen XML-Blocks
Dieser XML-Block sollte stattdessen funktionieren:
Bitte denken Sie daran, dass ich immer noch nicht genug Zeit hatte, um diese Einstellung sicher auszuprobieren, aber ich habe versucht, verschiedene andere Shell-Befehle auszuführen, die auf die gleiche Weise gestartet wurden, und alles sollte wie erwartet funktionieren
Wie es funktioniert:
base: executing
wait4path /path && command
bedeutet, dasscommand
nur ausgeführt wird, wennwait4path
endet und beendet wird, ohne dass Fehler auftreten. Dies geschieht nur, wenn/path
ein Pfad verfügbar ist, sodass wir sicher sagen könnendynamic_pager
, dass dieses Volume für Swap-Dateien verwendet werden soll1) Wie in der
launchd.plist
Manpage beschrieben, sind die TastenProgram
undProgramArguments
einemexecvp
Aufruf zugeordnet, dh alles außer der ersten Zeichenfolge im Array wird als Argument für die erste Zeichenfolge im Array behandelt, die das Programm ausführen soll.2) Wie in der
bash
Manpage beschrieben, gibt es einebash -c <string>
Option, die als Befehle übergebene Zeichenfolge auszuführen1 + 2 = 3) Was passiert mit dieser Kommandozeile in einer launchd plist?
/bin/bash -c "wait4path /Volumes/Swap/ && /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile"
/bin/bash
ist das auszuführende Programm,-c
ist das erste Argument und die Zeichenfolge in doppelten Anführungszeichen ist das zweite ArgumentIch denke, es sollte genauso funktionieren wie Ihre Lösung, ohne das Zwischenskript:
launchd
Startet den Dienst, der auf den angegebenen Pfad wartet und startet danndynamic_pager
.Bitte beachten Sie Folgendes:
* Die Zeichenfolge, die Sie ausführen möchten, sollte in doppelten Anführungszeichen stehen, wenn Sie
bash -c
in Terminal ausgeführt werden. In der plist-Datei wird sie jedoch nicht in doppelten Anführungszeichen angegeben. (Ich vermute, weil es bereits als Zeichenfolge mit dem richtigen Tag deklariert ist)* Die beiden
&
in der Zeichenfolge müssen&
in der Plist-Datei geändert werdenPS: Gehen Sie wie immer auf eigenes Risiko vor. Ich übernehme keine Verantwortung für Probleme, die bei Verwendung dieser Einstellung auftreten können!
Vielen Dank, dass Sie Ihre Arbeit mit uns teilen
quelle
ProgramArguments
Array aufzunehmen, aber es ist auf jeden Fall einen Versuch wert. Hast du es ausprobiert?:)
Ich weiß, dass es eine Weile her ist, dass dieser Artikel geschrieben wurde, aber ich dachte, ich würde hier unten meinen eigenen kleinen Artikel für diejenigen hinzufügen, die dies auch tun möchten ...
Ich habe den obigen Trick verwendet, um meine Auslagerungsdateien auf ein anderes internes Laufwerk zu verschieben (mein Startlaufwerk ist eine SSD mit MLC-Chips, daher kann das Entfernen von VM die Lebenserwartung retten). Nachdem ich das neue Volume erstellt hatte, verfügte ich über ein Swap-Volume in Finder, das ich nie in Finder selbst verwenden werde. Daher habe ich beschlossen, das Volume für Finder unsichtbar zu machen. Sie müssen das Developer Toolkit von Apple installiert haben. Dann tippe:
… Und ersetzen Sie / Volumes / Swap mit dem Namen Ihres Volumes. Starten Sie Finder und presto neu, kein Swap-Volume mehr im Finder!
quelle
Mit wait4path können Sie warten, bis das Volume geladen ist. Andernfalls startet launchd Ihr dynamic_pager_init-Skript immer wieder neu, bis dies der Fall ist.
quelle
wait4path
statt der Kombinationif
/ verwendetgrep
, und das räumt die Dinge ganz gut auf. Danke für den Tipp.Vielleicht können wir Xupport verwenden, um diese Drecksarbeit für uns zu erledigen :) http://www.applicorn.com/
Virtual Memory Optimizer:
Ändern des Speicherorts für Auslagerungsdateien In Mac OS X werden die Informationen zum virtuellen Speicher in den sogenannten "Auslagerungsdateien" gespeichert. Da die Auslagerungsdateien die interaktivsten Systemdateien sind, ist es sinnvoll, sie auf einer separaten Partition abzulegen. Es wird empfohlen, die Auslagerungsdateien auf der ersten Partition Ihrer schnellsten internen Festplatte zu speichern. Die empfohlene minimale Partitionsgröße sollte etwa das 3- oder 4-fache der physischen Größe des integrierten Speichers betragen (z. B. 1 GB physischer Speicher = 4 GB Swap-Partition). Empfehlungen und Anweisungen für eine optimale Systemleistung:
1. Partitionieren Sie Ihre Festplatte mit einem Swap-Volume als ERSTE Partition neu (mithilfe der Mac OS X-Installations-DVD). WARNUNG: Durch die Neupartitionierung einer Festplatte werden alle vorhandenen Daten gelöscht!
2. Stellen Sie Ihre Systemdaten wieder her oder installieren Sie ein neues System auf der Systempartition.
3. Booten Sie von der Systempartition.
4. Wenn Ihr Swap-Volume für den Finder nicht sichtbar sein soll: • Starten Sie Xupport und wählen Sie "Einstellungen". • Aktivieren Sie "Versteckte Dateien und Ordner anzeigen" und starten Sie den Finder neu. • Benennen Sie das Swap-Volume von "Swap" in ".swap" um. (Der Punkt macht es für den Finder unsichtbar.) • Deaktivieren Sie "Versteckte Dateien und Ordner anzeigen" und starten Sie den Finder erneut
5. Wählen Sie unter "Swap Storage Volume" die neue Swap-Partition aus. Drücken Sie dann die Schaltfläche "Einstellen", um die neuen Einstellungen für den Speicherort der Auslagerungsdatei zu übernehmen (Neustart erforderlich).
Übrigens funktioniert es bei mir. Snow Leopard 10.6.2 @ Macbook Pro 2,4 GHz, 4 GB RAM, 500 GB HD
quelle
Dies ist höchstwahrscheinlich eine unerwünschte Antwort (da ich nach Diago keinen Kommentar abgeben kann), aber warum bestehen Sie wirklich darauf, dass dies zu geringen Leistungssteigerungen führt? Ich habe eine Diskussion in Apfelforen geführt und festgestellt, dass dies überhaupt keine gute Idee ist. Und ich war sehr bestrebt, es aufzugeben. Könnten Sie sich Daten einfallen lassen, die das zumindest für sich selbst beweisen, oder ist es nur ein "Gefühl"?
Jedes Mal, wenn ich Swap vor 10 Jahren selbst unter Linux und heute unter Ubuntu einsetzte, konnte ich nie wieder Leistungsverbesserungen feststellen. Mein Grund dafür war, Probleme mit freiem Speicherplatz unter OSX zu vermeiden und unter Linux in den Ruhezustand zu wechseln. Das ist alles, was Swap für mich ist.
Aber ich habe weder alleine noch in den Zwischenwebs wirklich gründlich recherchiert.
quelle
Dies ist keine Antwort, aber vielleicht eine sehr nützliche Ergänzung. Apple stellt hier einen kostenlosen Plist Editor zur Verfügung . PlistEdit Pro . Damit können Sie diese Dateien sicher bearbeiten. Sieht so aus, als könnten Sie das Argument mit dem Wert / private / var / vm / swapfile in etwas wie / Volumes / OtherDrive / vm / myswapfilename ändern , um die Auslagerungsdateien an einen anderen Ort zu verschieben ...
Wieder habe ich das nicht getestet ...
quelle