36 votes

Comment déplacer les fichiers d'échange de mémoire virtuelle vers un autre lecteur ou une autre partition ?

note : Il s'agit d'un question que j'ai posée sur SuperUser il y a quelque temps. Je la reposte ici car je pense qu'elle a sa place ici.

Par défaut, Mac OS X stocke ses fichiers d'échange dans le dossier /private/var/vm/ . J'aimerais placer les fichiers d'échange à un autre endroit. Comment faire ?

25voto

Sam Merrell Points 1206

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/ &amp;&amp;
/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

5voto

aramis Points 181

Je n'ai pas réussi à mettre en place une solution permanente pour le démarrage du système, puisque la version 10.10 n'utilise plus /etc/.rc au démarrage, et que la méthode com.apple.dynamic_pager.plist a échoué.... cependant...

sudo mkdir /Volumes/Swap/s
sudo chmod 755 /Volumes/Swap/s
sudo sysctl vm.swapfileprefix=/Volumes/Swap/s

modifie le préfixe stocké, comme indiqué par

sysctl vm

pour la durée de la session et survit au redémarrage.

cela pourrait être intégré comme une commande Unix dans un fichier texte :

$/bin/sh
sysctl vm.swapfileprefix=/Volumes/Swap/s

et l'exécuter lors de la connexion.

-2voto

BKE Points 1

La solution est simple :

http://www.macupdate.com/app/mac/10771/swap-relocator

SwapRelocator 1.1.2 fonctionne parfaitement sur Maverick !

Utilisez (par exemple) Tinker Tool System pour laisser les volumes se monter avant la connexion, cela résout le seul problème que j'ai rencontré.

(Grâce à Filippo, je peux enfin déplacer le swap du volume de démarrage en miroir vers un volume de cache à bandes (tous SSD)).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X