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 wait4path
comando 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 wait4path
comando 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 Swap
e 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/ &&
/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 wait4path
non 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 plutil
per 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
/private/var/vm/sleepimage
Super 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.