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. ), der OnDemand
Schlüssel wird in geändert <true/>
, und StartOnMount
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/…