note : copié de SuperUser :
Pour les versions plus anciennes d'OSX, voir ce fil sur forums.macosxhints.com.
Le mérite en revient à dblu pour expliquer l'utilisation des plutil
, ZILjr pour l'introduction de la wait4path
et ekl pour simplifier l'ensemble en éliminant le besoin d'un shell intermédiaire script.
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. Convertit la plist de l'état binaire à l'état XML :
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
3. Ouvrez la plist convertie 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 doit se présenter comme suit :
<?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 l'option wait4path
avant de lancer dynamic_pager. Voir la note 1 pour plus de détails sur la nécessité de cette opération. Dans l'exemple suivant, ma partition s'appelle Swap
et j'ai choisi de placer les fichiers d'échange dans un répertoire caché sur cette partition, appelé .vm
s'assurer que le répertoire spécifié existe réellement . Le fichier XML devrait se présenter comme suit :
<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 la liste de contrôle et revenez à l'invite du terminal. Utilisation de la pico
Les commandes seraient les suivantes :
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6. Reconvertir la plist modifiée en binaire :
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7. Redémarrez votre Mac. Si vous rencontrez des difficultés, passez en mode de démarrage verbeux en maintenant la touche Command-v enfoncée immédiatement après le signal sonore de démarrage. Cela vous permettra de voir tous les messages de démarrage qui s'affichent pendant le démarrage. Si vous rencontrez des problèmes encore plus graves (c'est-à-dire que vous ne voyez jamais l'écran de connexion), maintenez la commande-s enfoncée. 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 faite à 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 la liste de contrôle sans utiliser la fonction wait4path
ne fonctionne pas toujours, et lorsqu'il échoue, c'est 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 d'échange n'a pas encore été montée lorsque dynamic_pager est chargé pour la première fois (d'après mon expérience, c'est le cas dans 99 % des cas), le système simulera son passage. Il créera un lien symbolique dans votre répertoire /Volumes qui porte le même nom que votre partition d'échange, mais qui pointe vers l'emplacement par défaut du fichier d'échange (/private/var/vm). Ensuite, lorsque votre partition d'échange réelle sera montée, elle recevra le nom de Swap 1
(ou YourDriveName 1
). Vous pouvez constater 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 -> /
Il est à noter que cette défaillance peut être très difficile à repérer. Si vous vérifiez les fichiers d'échange (swapfiles) comme je le montre à l'étape 12, vous les verriez encore ! Le lien symbolique donnerait l'impression que vos swapfiles ont été déplacés, alors qu'ils sont en fait stockés à l'emplacement par défaut.
Note 2
Je n'ai pas réussi à faire fonctionner cette application dans Snow Leopard parce que com.apple.dynamic_pager.plist était stocké au format binaire. J'ai fait une copie du fichier original et je l'ai ouvert avec l'éditeur de liste de propriétés d'Apple (disponible avec Xcode) afin d'y apporter des modifications, mais ce processus a ajouté des attributs étendus au fichier plist, ce qui a fait que le système l'a ignoré et a simplement utilisé les valeurs par défaut. Comme l'a souligné dblu, l'utilisation de plutil
pour convertir le fichier en XML simple fonctionne à merveille.
Note 3
Vous pouvez consulter l'application Console pour voir les messages que dynamic_pager_init envoie à l'écran. Si vous voyez les lignes suivantes répétées à l'infini, c'est qu'il y a un problème avec la configuration. J'ai rencontré ces messages parce que 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, il se peut que vous ne voyiez le message ci-dessus que quelques fois, puis plus de messages "Throttling respawn". Cela signifie que le système a dû attendre que la partition se charge, mais qu'il a finalement réussi.
Exclure le chemin d'accès de Time Machine
Dans OS X 10.7 et les versions ultérieures, vous pouvez le faire avec tmutil . Exemple :
sudo tmutil addexclusion -p /Volumes/Swap/.vm
Pour cet exemple, revoir le résultat :
tmutil isexcluded /Volumes/Swap && tmutil isexcluded /Volumes/Swap/.vm
Si le volume utilisé pour la permutation ne doit pas être indexé
Utilisation mdutil . Exemple, pour éteindre puis effacer la mémoire :
sudo mdutil -i off /Volumes/Swap && sudo mdutil -E /Volumes/Swap