note: copié depuis SuperUser:
Pour les anciennes versions d'OSX, consultez ce fil sur forums.macosxhints.com.
Le crédit va à dblu pour expliquer l'utilisation de plutil
, ZILjr pour introduire la wait4path
commande, et ekl pour simplifier le tout en éliminant la nécessité d'un script shell intermédiaire.
Solution complète:
1. Ouvrez Terminal et faites une copie de sauvegarde du fichier dynamic_pager.plist par défaut d'Apple:
$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}
2. Convertissez le plist de binaire en XML simple:
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
3. Ouvrez le plist converti avec l'éditeur de texte de votre choix. (J'utilise pico
, voir la réponse de dblu pour un exemple d'utilisation vim
):
$ sudo pico -w com.apple.dynamic_pager.plist
Il devrait ressembler à ceci:
<?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. Modifiez le tableau ProgramArguments (lignes 13 à 18) pour utiliser la wait4path
commande shell avant de lancer dynamic_pager. Voir la note # 1 pour plus de détails sur la raison pour laquelle cela est nécessaire. Dans l'exemple suivant, ma partition est appelée Swap
et j'ai choisi de placer les fichiers d'échange dans un répertoire caché sur cette partition, appelé .vm
assurez-vous que le répertoire que vous spécifiez existe réellement . Le XML doit ressembler à ceci:
<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. Enregistrez le plist et revenez à l'invite du terminal. En utilisant pico
, les commandes seraient:
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6. Convertissez le plist modifié en binaire:
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7. Redémarrez votre Mac. Si vous rencontrez des problèmes, passez en mode de démarrage détaillé en maintenant la commande-v enfoncée immédiatement après le carillon de démarrage. Cela vous permettra de voir tous les messages de démarrage qui apparaissent lors du démarrage. Si vous rencontrez des problèmes encore plus graves (c'est-à-dire que vous ne voyez jamais l'écran de connexion), maintenez enfoncée la touche Command-s à la place. Cela démarrera l'ordinateur en mode mono-utilisateur (pas d'interface graphique, juste une invite de commande) et vous permettra de restaurer la copie de sauvegarde de com.apple.dynamic_pager.plist que vous avez créée à l'étape 1.
8. Une fois l'ordinateur démarré, lancez Terminal et vérifiez que les fichiers d'échange ont bien été déplacés:
$ cd /Volumes/Swap/.vm
$ ls -l
Vous devriez voir quelque chose comme ceci:
-rw------- 1 someUser staff 67108864 18 Sep 12:02 swapfile0
9. Supprimez les anciens fichiers d'échange:
$ cd /private/var/vm
$ sudo rm swapfile*
10. Profit!
Note 1
Modifier les arguments de dynamic_pager dans le plist sans utiliser wait4path
ne fonctionne pas toujours, et lorsqu'il échoue, il le fait de manière spectaculairement silencieuse. Le problème vient du fait que dynamic_pager est lancé très tôt dans le processus de démarrage. Si votre partition de swap n'a pas encore été montée lors du premier chargement de dynamic_pager (d'après mon expérience, cela se produit 99% du temps), alors le système truquera son chemin. Il créera un lien symbolique dans votre répertoire / Volumes qui porte le même nom que votre partition de swap, mais renvoie à l'emplacement par défaut du fichier de swap (/ private / var / vm). Ensuite, lorsque votre partition d'échange réelle sera montée, elle recevra le nom Swap 1
(ou YourDriveName 1
). Vous pouvez voir le problème en ouvrant Terminal et en listant le contenu de votre répertoire / Volumes:
$ cd /Volumes
$ ls -l
Vous verrez quelque chose comme ceci:
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 -> /
Notez que cet échec peut être très difficile à repérer. Si vous deviez vérifier les fichiers d'échange comme je le montre à l'étape 12, vous les verriez toujours ! Le lien symbolique donnerait l'impression que vos fichiers d'échange ont été déplacés, même s'ils étaient en fait stockés à l'emplacement par défaut.
Note 2
À l'origine, je n'ai pas pu faire fonctionner cela dans Snow Leopard car com.apple.dynamic_pager.plist était stocké au format binaire. J'ai fait une copie du fichier d'origine et l'ai ouvert avec l'éditeur de liste de propriétés d'Apple (disponible avec Xcode) afin d'apporter des modifications, mais ce processus a ajouté des attributs étendus au fichier plist, ce qui a amené le système à l'ignorer et à utiliser simplement les valeurs par défaut . Comme l'a souligné dblu, utiliser plutil
pour convertir le fichier en XML brut fonctionne comme un charme.
Note 3
Vous pouvez vérifier l'application Console pour voir tous les messages qui font écho à dynamic_pager_init à l'écran. Si vous voyez les lignes suivantes répétées encore et encore, il y a un problème avec la configuration. J'ai rencontré ces messages car j'ai oublié de créer le répertoire '.vm' que j'ai spécifié dans 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
Lorsque tout fonctionne correctement, vous pouvez voir le message ci-dessus plusieurs fois seulement, puis plus de messages "Throttling respawn". Cela signifie que le système a dû attendre le chargement de la partition, mais finalement il a réussi.
Exclure le chemin d'accès de Time Machine
Dans OS X 10.7 et versions ultérieures, vous pouvez le faire avec tmutil . Exemple:
sudo tmutil addexclusion -p /Volumes/Swap/.vm
Pour cet exemple, pour revoir le résultat:
tmutil isexcluded /Volumes/Swap && tmutil isexcluded /Volumes/Swap/.vm
Si le volume utilisé pour l'échange n'a pas besoin d'être indexé
Utilisez mdutil . Exemple, pour éteindre puis effacer la boutique:
sudo mdutil -i off /Volumes/Swap && sudo mdutil -E /Volumes/Swap
/private/var/vm/sleepimage
dans Super User: Dois-je créer un lien symbolique entre mon répertoire / private / var / vm et un autre volume dans OS X Lion? (2011-09-20) - il y a une réponse qui recommande de ne pas utiliser le même volume séparé pour les fichiers d'échange externes et sleepimage.