Jusqu'à maintenant, j'ai pu déplacer des fichiers d'échange de mémoire virtuelle d'Apple vers une partition dédiée sur mon disque dur. La technique que j'utilise est décrite dans un fil de discussion sur forums.macosxhints.com.
Cependant, avec l'aperçu développeur de Snow Leopard, cette méthode ne fonctionne plus. Est-ce que quelqu'un sait comment cela pourrait être fait avec le nouveau système d'exploitation?
Mise à jour: J'ai marqué la réponse de dblu comme acceptée même si cela n'a pas tout à fait fonctionné car il a donné d'excellentes instructions détaillées et parce que sa suggestion d'utilisation plutil
m'a finalement orienté dans la bonne direction. La solution complète et fonctionnelle est publiée ici dans la question car je n'ai pas assez de réputation pour modifier la réponse acceptée.
Mise à jour # 2: modification de la procédure pour illustrer la technique d'ekl , ce qui simplifie considérablement le tout en éliminant le besoin 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 votre éditeur de texte de 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 commande shell wait4path (comme suggéré par ZILjr ) 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 s'appelle «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 la liste 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.
wait4path
requis par l'état protégé) , mais j'ai trouvé une non- solution, grâce à ce qu'Applicorn a Xupport modifié pour moi. Je posterai une réponse complète une fois que j'aurai compris comment, mais le plus court est de changer le dernier argument du programme en juste le nouveau chemin (par exemple <string>/Volumes/swap/.vm/swapfile</string>
), changer la OnDemand
clé en <true/>
et ajouter une StartOnMount
clé à la fin avec une valeur de <true/>
. PS Cette solution fonctionne très bien dans Lion (pour moi, au moins).
StartOnMount
drapeau a été ajouté en 10.5 selon: mactech.com/articles/mactech/Vol.25/25.10/…