Come posso spostare i file di scambio di memoria virtuale su un'altra unità o partizione?


33

nota: questa è una domanda che ho posto su SuperUser qualche tempo fa. Lo ripubblico qui perché penso che appartenga qui.

Per impostazione predefinita, Mac OS X memorizza i suoi file di scambio in /private/var/vm/. Vorrei posizionare i file di scambio in una posizione diversa. Come si può fare?


Ulteriori considerazioni su /private/var/vm/sleepimageSuper User: dovrei collegare il mio dir / private / var / vm a un altro volume in OS X Lion? (20/09/2011) - c'è una risposta che consiglia di non utilizzare lo stesso volume separato sia per i file di scambio esterni che per sleepimage.
Graham Perrin,

dynamicpagerwrapper ( fonte: dynamic_pager_wrapper ) - wrapper delle prestazioni per / sbin / dynamic_pager su OSX
Graham Perrin

Risposte:


23

nota: copiato da SuperUser:

Per le versioni precedenti di OSX, consultare questa discussione su forums.macosxhints.com.

Il merito va a dblu per aver spiegato l'uso di plutil, ZILjr per introdurre il wait4pathcomando e ekl per semplificare il tutto eliminando la necessità di uno script di shell intermedio.

Soluzione completa:

1. Apri Terminale ed esegui una copia di backup del predefinito dynamic_pager.plist di Apple:

$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}

2. Converti il ​​plist da binario a semplice XML:

$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

3. Apri il plist convertito con il tuo editor di testo preferito. (Io uso pico, vedi la risposta di dblu per un esempio usando vim):

$ sudo pico -w com.apple.dynamic_pager.plist

Dovrebbe apparire come segue:

<?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. Modificare l'array ProgramArguments (righe da 13 a 18) per utilizzare il wait4pathcomando shell prima di avviare dynamic_pager. Vedi la nota n. 1 per i dettagli sul perché ciò sia necessario. Nel seguente esempio, viene chiamata la mia partizione Swape ho scelto di inserire i file di swap in una directory nascosta su quella partizione, chiamata .vm assicurandomi che la directory specificata esista effettivamente . L'XML dovrebbe apparire come segue:

<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. Salvare il plist e tornare al prompt del terminale. Utilizzando pico, i comandi sarebbero:

<ctrl+o> to save the file
<enter>  to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit

6. Convertire nuovamente il plist modificato in binario:

$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

7. Riavvia il Mac. In caso di problemi, passare alla modalità di avvio dettagliata tenendo premuto Command-v immediatamente dopo l'avvio. Questo ti permetterà di vedere tutti i messaggi di avvio che appaiono durante l'avvio. Se riscontri problemi ancora peggiori (ovvero non vedi mai la schermata di accesso), tieni premuti i Comandi. Ciò avvierà il computer in modalità utente singolo (nessuna interfaccia utente grafica, solo un prompt dei comandi) e ti consentirà di ripristinare la copia di backup di com.apple.dynamic_pager.plist creata nel passaggio 1.

8. Una volta avviato il computer, avvia Terminal e verifica che i file di scambio siano stati effettivamente spostati:

$ cd /Volumes/Swap/.vm
$ ls -l

Dovresti vedere qualcosa del genere:

-rw-------  1 someUser  staff  67108864 18 Sep 12:02 swapfile0

9. Elimina i vecchi file di scambio:

$ cd /private/var/vm
$ sudo rm swapfile*

10. Profitto!

Nota 1

La modifica degli argomenti in dynamic_pager nel plist senza usare wait4pathnon sempre funziona, e quando fallisce, lo fa in un modo straordinariamente silenzioso. Il problema deriva dal fatto che dynamic_pager viene avviato molto presto nel processo di avvio. Se la tua partizione di swap non è stata ancora montata al primo caricamento di dynamic_pager (nella mia esperienza, questo accade il 99% delle volte), il sistema si fingerà. Creerà un collegamento simbolico nella directory / Volumes che ha lo stesso nome della partizione di swap, ma rimanda alla posizione predefinita del file di scambio (/ private / var / vm). Quindi, quando viene montata la partizione di swap effettiva, verrà assegnato il nome Swap 1(o YourDriveName 1). Puoi vedere il problema aprendo Terminal ed elencando i contenuti della tua directory / Volumes:

$ cd /Volumes
$ ls -l

Vedrai qualcosa del genere:

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 -> /

Si noti che questo errore può essere molto difficile da individuare. Se dovessi controllare i file di scambio come mostrerò nel passaggio 12, li vedresti comunque ! Il collegamento simbolico sembrerebbe che i tuoi swapfile siano stati spostati, anche se in realtà erano memorizzati nella posizione predefinita.

Nota 2

Inizialmente non ero in grado di farlo funzionare in Snow Leopard perché com.apple.dynamic_pager.plist era archiviato in formato binario. Ho fatto una copia del file originale e l'ho aperto con l'Editor elenco proprietà di Apple (disponibile con Xcode) per apportare modifiche, ma questo processo ha aggiunto alcuni attributi estesi al file plist che ha fatto sì che il sistema lo ignorasse e usasse i valori predefiniti . Come ha sottolineato dblu, l'uso plutilper convertire il file in XML semplice funziona come un incantesimo.

Nota 3

Puoi controllare l'applicazione Console per vedere tutti i messaggi che dynamic_pager_init echi sullo schermo. Se vedi le seguenti righe ripetute più volte, c'è un problema con l'installazione. Mi sono imbattuto in questi messaggi perché ho dimenticato di creare la directory '.vm' che ho specificato in dynamic_pager_init.

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

Quando tutto funziona correttamente, è possibile che venga visualizzato il messaggio sopra solo un paio di volte, quindi non più i messaggi di "Rialzo di limitazione". Ciò significa che il sistema ha dovuto attendere il caricamento della partizione, ma alla fine ha avuto successo.

Escludi il percorso da Time Machine

In OS X 10.7 e versioni successive puoi farlo con tmutil . Esempio:

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

Per questo esempio, per rivedere il risultato:

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

Se non è necessario indicizzare il volume utilizzato per lo scambio

Usa mdutil . Esempio, per spegnere e cancellare il negozio:

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


La prossima volta basta collegare la domanda / risposta, c'è un pulsante "link" accanto a ciascuna risposta. ;)
Martin Marconcini,

2
C'è un collegamento alla domanda SuperUser all'inizio di questa domanda. Non ho collegato direttamente la "risposta" su SuperUser perché è stata costruita da parti di molte altre risposte. Tuttavia, ho aggiunto collegamenti a ciascuna risposta parziale (usando quel pratico pulsante "link") nel secondo paragrafo di questa risposta. Quanti altri link vuoi? ;)
e.James,

2
Mi piace che sia qui ... lo faccio sempre riferimento ...
alex gray

Questo fallisce per me sotto il 10.10.3 - non sembra usare il plist.
Aramis,

2
Sotto El Capitan, tentare di cancellare lo swap non è consentito dal nuovo System Integrity Protection. /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist: operazione non consentita mentre la protezione dell'integrità del sistema è attiva <br> Avvio nella partizione di ripristino, quindi selezionare Configurazione sicurezza dal menu Utilità. È possibile deselezionare Enforce System Integrity Protection, fare clic su Applica configurazione e riavviare.
Meetai.com,

4

Non sono stato in grado di stabilire una soluzione di avvio del sistema permanente, poiché 10.10 non utilizza più /etc/.rc all'avvio e il metodo com.apple.dynamic_pager.plist non è riuscito .... tuttavia ...

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

cambia il prefisso memorizzato come riportato da

sysctl vm

per la durata della sessione e sopravvive al riavvio.

questo potrebbe essere racchiuso come comando unix in un file di testo:

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

ed esegui al login.


-1

Soluzione semplice:

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

SwapRelocator 1.1.2 funziona alla grande su Maverick!

Utilizzare (ad esempio) Tinker Tool System per consentire il montaggio dei volumi prima dell'accesso, risolvendo l'unico problema riscontrato.

(Grazie Filippo, posso finalmente spostare lo scambio dal volume di avvio con mirroring a un volume cache con striping (tutto SSD))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.