Finora sono stato in grado di spostare i file di scambio di memoria virtuale di Apple in una partizione dedicata sul mio disco rigido. La tecnica che ho usato è descritta in una discussione su forums.macosxhints.com.
Tuttavia, con l'anteprima per sviluppatori di Snow Leopard, questo metodo non funziona più. Qualcuno sa come si potrebbe fare con il nuovo sistema operativo?
Aggiornamento: ho contrassegnato la risposta di dblu come accettata anche se non ha funzionato del tutto perché mi ha dato istruzioni eccellenti e dettagliate e perché il suo suggerimento di usare alla plutil
fine mi ha indicato nella giusta direzione. La soluzione completa e funzionante è pubblicata qui nella domanda perché non ho abbastanza reputazione per modificare la risposta accettata.
Aggiornamento n. 2: modificata la procedura per illustrare la tecnica di ekl , che semplifica notevolmente 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 comando shell wait4path (come suggerito da ZILjr ) prima di avviare dynamic_pager. Vedi la nota n. 1 per i dettagli sul perché ciò sia necessario. Nel seguente esempio, la mia partizione si chiama 'Scambia' e ho scelto di mettere i file di scambio 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.
Converti il plist modificato in binario:
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7.
Riavvia il tuo 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 che hai creato 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.
wait4path
soluzione non risolta, grazie a ciò che Applicorn's Xupport modificato per me. Pubblicherò una risposta completa una volta che avrò capito come fare, ma la cosa più breve è cambiare l'ultimo argomento del programma in solo il nuovo percorso (ad es. <string>/Volumes/swap/.vm/swapfile</string>
), Cambiare la OnDemand
chiave in <true/>
e aggiungere una StartOnMount
chiave alla fine con un valore di <true/>
. PS Questa soluzione funziona bene in Lion (almeno per me).
StartOnMount
bandiera è stata aggiunta in 10.5 secondo: mactech.com/articles/mactech/Vol.25/25.10/…