Wie kann ich Auslagerungsdateien für virtuellen Speicher auf ein anderes Laufwerk oder eine andere Partition verschieben?

33

Hinweis: Dies ist eine Frage , die ich vor einiger Zeit bei SuperUser gestellt habe. Ich poste es hier erneut, weil ich denke, dass es hierher gehört.

Standardmäßig speichert Mac OS X seine Auslagerungsdateien in /private/var/vm/. Ich möchte die Auslagerungsdateien an einem anderen Ort ablegen. Wie geht das?

James
quelle
Zusätzliche Überlegung /private/var/vm/sleepimagein Super User: Soll ich mein / private / var / vm-Verzeichnis mit einem anderen Volume in OS X Lion verknüpfen? (2011-09-20) - Es gibt eine Antwort, die empfiehlt, nicht dasselbe separate Volume für externe Auslagerungsdateien und Sleepimage zu verwenden.
Graham Perrin
dynamicpagerwrapper ( Quelle: dynamic_pager_wrapper ) - Performance-Wrapper für / sbin / dynamic_pager unter OSX
Graham Perrin

Antworten:

23

Hinweis: Von SuperUser kopiert:

Informationen zu älteren Versionen von OSX finden Sie in diesem Thread auf forums.macosxhints.com.

Dank geht an dblu für die Erklärung der Verwendung von plutil, ZILjr für die Einführung des wait4pathBefehls und ekl für die Vereinfachung des Ganzen, da kein Shell-Zwischenskript 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 dem 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 wait4pathProgramArguments (Zeilen 13 bis 18), um den Shell-Befehl vor dem Starten von dynamic_pager zu verwenden. In Anmerkung 1 finden Sie Einzelheiten dazu, warum dies erforderlich ist. Im folgenden Beispiel wird meine Partition aufgerufen Swap, und ich habe mich dafür entschieden, die Auslagerungsdateien in einem versteckten Verzeichnis auf dieser Partition abzulegen. Dabei .vm muss sichergestellt sein, 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/ &amp;&amp;
/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 können Sie alle Startmeldungen anzeigen, 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. Profit!

Anmerkung 1

Das Ändern der Argumente für dynamic_pager in der plist ohne Verwendung von wait4pathfunktioniert 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 plutilKonvertierung 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.

Schließen Sie den Pfad von Time Machine aus

In OS X 10.7 und höher können Sie dies mit tmutil tun . Beispiel:

sudo tmutil addexclusion -p /Volumes/Swap/.vm

So überprüfen Sie das Ergebnis für dieses Beispiel:

tmutil isexcluded /Volumes/Swap && tmutil isexcluded /Volumes/Swap/.vm

Wenn das für den Swap verwendete Volume nicht indiziert werden muss

Verwenden Sie mdutil . Beispiel zum Ausschalten und Löschen des Speichers:

sudo mdutil -i off /Volumes/Swap && sudo mdutil -E /Volumes/Swap

James
quelle
Wenn Sie das nächste Mal nur die Frage / Antwort verlinken, befindet sich neben jeder Antwort ein "Link" -Button. ;)
Martin Marconcini
2
Ganz oben in dieser Frage befindet sich ein Link zur SuperUser-Frage. Ich habe keine direkte Verknüpfung zu "der" Antwort auf SuperUser hergestellt, da diese aus Teilen mehrerer anderer Antworten besteht. Ich habe jedoch im zweiten Absatz dieser Antwort Links zu jeder Teilantwort hinzugefügt (mithilfe dieses praktischen "Link" -Buttons). Wie viele weitere Links möchten Sie? ;)
e.James
2
Ich mag, dass es hier ist ... ich beziehe mich die ganze Zeit ..
alex grey
Dies schlägt für mich unter 10.10.3 fehl - es scheint nicht die Plist zu verwenden.
Aramis
2
Unter El Capitan ist der Versuch, den Swap zu löschen, vom neuen Systemintegritätsschutz nicht gestattet. /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist: Vorgang nicht zulässig, während der Systemintegritätsschutz aktiviert ist <br> Starten Sie die Wiederherstellungspartition und wählen Sie im Menü Dienstprogramme die Option Sicherheitskonfiguration. Sie können das Kontrollkästchen Systemintegritätsschutz erzwingen deaktivieren, auf Konfiguration anwenden klicken und neu starten.
Meetai.com
4

Ich konnte keine permanente Systemstartlösung einrichten, da 10.10 /etc/.rc beim Booten nicht mehr verwendet und die Methode com.apple.dynamic_pager.plist fehlgeschlagen ist .... jedoch ...

sudo mkdir /Volumes/Swap/s
sudo chmod 755 /Volumes/Swap/s
sudo sysctl vm.swapfileprefix=/Volumes/Swap/s

ändert das gespeicherte Präfix wie von gemeldet

sysctl vm

für die Dauer der Sitzung, und es überlebt einen Neustart.

Dies könnte als Unix-Befehl in eine Textdatei eingebunden werden:

$/bin/sh
sysctl vm.swapfileprefix=/Volumes/Swap/s

und bei der Anmeldung ausführen.

Aramis
quelle
-1

Einfache Lösung:

http://www.macupdate.com/app/mac/10771/swap-relocator

SwapRelocator 1.1.2 funktioniert hervorragend auf Maverick!

Verwenden Sie (zum Beispiel) Tinker Tool System, um Volumes vor der Anmeldung bereitstellen zu lassen, wodurch das einzige Problem behoben wird, auf das ich gestoßen bin.

(Dank Filippo kann ich endlich den Swap vom gespiegelten Boot-Volume auf ein gestreiftes Cache-Volume (alle SSDs) verschieben.)

BKE
quelle