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.
la source
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 laOnDemand
clé en<true/>
et ajouter uneStartOnMount
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/…Réponses:
REMARQUE : Voir (également) une réponse corrigée / améliorée dans la question elle-même.
La solution suivante a fonctionné pour moi:
Ouvrez un terminal et sauvegardez com.apple.dynamic_pager.plist que vous allez changer en une seconde:
convertir une liste binaire en xml:
et ouvrez-le avec votre éditeur de texte préféré
cela ressemblera à ceci:
À la ligne 17, modifiez / private / var / vm / swapfile (par exemple / Volumes / partition2 / swapfile), enregistrez et fermez votre éditeur (": x" fera les deux dans vim).
reconvertissez le fichier plist en binaire:
Après avoir redémarré votre Mac, vous devriez trouver les fichiers d'échange dans le répertoire que vous avez spécifié.
Si vous rencontrez des problèmes, vous pouvez restaurer la sauvegarde que vous avez créée à la première étape avec:
la source
plutil
pour les conversions. J'ai posté la solution complète dans la question (car je n'ai pas assez de représentant pour l'ajouter à votre réponse). Voir ma note # 1 pour une description détaillée des problèmes que j'ai rencontrés en modifiant simplement le plist.J'ai adopté cette idée et je l'ai poussée un peu plus loin en abordant les stratégies de croissance et de remise en état.
Détails sur http://www.crypticide.com/dropsafe/article/3848 ; Je publierais un lien vers la page du projet GoogleCode "dynamicpagerwrapper", mais le blog me dit que je n'ai pas assez de points de réputation ...
la source
juste une question: pourquoi ne pas simplement éditer le fichier .plist en ajoutant
wait4path
, au lieu d'utiliser l'intermédiairedynamic_pager_init
?quelque chose comme ça:
EDIT: comme expliqué dans le commentaire de e.James et mon commentaire suivant, le bloc XML immédiatement suivant n'est pas bon, à la fois parce qu'il y a une erreur (manquant &&) et parce que seul le premier argument du tableau
ProgramArguments
est analysé comme programme à exécuter !mais .. (faites défiler vers le bas)
fin du mauvais bloc xml
ce bloc XML devrait plutôt fonctionner:
veuillez garder à l'esprit que je n'avais toujours pas assez de temps pour essayer ce paramètre en toute sécurité, mais j'ai essayé d'exécuter diverses autres commandes shell lancées de la même manière, et tout devrait fonctionner comme prévu
Comment ça marche:
base: l' exécution
wait4path /path && command
signifie quecommand
n'est exécuté que siwait4path
se termine et se termine sans erreur, et cela ne se produit que lorsqu'un/path
chemin est disponible, nous pouvons donc dire en toute sécuritédynamic_pager
d'utiliser ce volume pour les fichiers d'échange1) comme écrit dans la
launchd.plist
page de manuel, les clésProgram
etProgramArguments
sont mappées à unexecvp
appel, ce qui signifie que tout sauf la première chaîne du tableau est traité comme un argument pour la première chaîne du tableau, le programme à exécuter;2) comme écrit dans la
bash
page de manuel, il existe unebash -c <string>
option pour exécuter la chaîne passée en tant que commandes1 + 2 = 3) que se passe-t-il en utilisant cette ligne de commande dans un plist launchd ??
/bin/bash -c "wait4path /Volumes/Swap/ && /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile"
/bin/bash
est le programme à exécuter,-c
est le premier argument et la chaîne entre guillemets doubles est le deuxième argumentJe suppose que cela devrait fonctionner exactement comme votre solution, sans le script intermédiaire:
launchd
démarrera le service, attendra le chemin donné puis se lanceradynamic_pager
..Veuillez noter que:
* la chaîne que vous souhaitez exécuter doit être entre guillemets si vous exécutez
bash -c
dans Terminal, mais elle n'est pas entre guillemets dans le fichier plist! (je suppose que c'est déjà déclaré comme une chaîne avec la balise appropriée)* les deux
&
de la chaîne doivent être changés&
dans le fichier plistPS: comme toujours, procédez à vos risques et périls, je ne prends aucune responsabilité pour les problèmes que vous pourriez avoir en utilisant ce paramètre!
Merci d'avoir partagé votre travail avec nous
la source
ProgramArguments
tableau, mais cela vaut certainement le coup. L'avez-vous essayé?:)
Je sais que cela fait un moment que cet article n'a pas été écrit mais je pensais que j'ajouterais mon propre petit article ici pour ceux qui veulent le faire aussi…
J'ai utilisé l'astuce ci-dessus pour déplacer mes fichiers d'échange vers un autre lecteur interne (mon lecteur de démarrage est SSD avec des puces MLC, donc le déplacement de VM peut économiser l'espérance de vie). Quoi qu'il en soit, après avoir créé le nouveau volume, j'avais un volume d'échange dans le Finder que je ne vais jamais utiliser dans le Finder lui-même, j'ai donc décidé de rendre le volume invisible pour le Finder. Vous devez installer le Developer Toolkit d'Apple. Tapez ensuite:
… Et remplacez / Volumes / Swap par ce que vous avez nommé votre volume. Redémarrez Finder et presto, plus de volume d'échange dans Finder!
la source
Vous pouvez utiliser wait4path pour attendre que le volume monte; sinon, launchd redémarrera votre script dynamic_pager_init encore et encore jusqu'à ce qu'il le fasse ...
la source
wait4path
place de la combinaisonif
/grep
, et cela nettoie très bien les choses. Merci pour le tuyau.Peut-être que nous pouvons utiliser Xupport pour faire ce sale boulot pour nous :) http://www.applicorn.com/
Optimiseur de mémoire virtuelle:
Modifier l'emplacement des fichiers d'échange Sous Mac OS X, les informations sur la mémoire virtuelle sont stockées dans ce que l'on appelle les «fichiers d'échange». Étant donné que les fichiers d'échange sont les fichiers système les plus interactifs, il est logique de les placer sur une partition distincte. Il est recommandé de stocker les fichiers d'échange sur la première partition de votre disque dur interne le plus rapide. La taille de partition minimale recommandée doit être environ 3 ou 4 fois plus importante que la taille de la mémoire physique intégrée (par exemple, 1 Go de mémoire physique = 4 Go de partition de swap). Recommandations et instructions pour des performances système optimales:
1. Re-partitionnez votre disque dur avec un volume d'échange en tant que PREMIÈRE partition (à l'aide du DVD d'installation de Mac OS X). AVERTISSEMENT: LA REPARTITION D'UN DISQUE DUR EFFACERA TOUTES LES DONNÉES EXISTANTES!
2. Restaurez vos données système ou installez un nouveau système sur la partition système.
3. Démarrez à partir de la partition système.
4. Si vous voulez que votre volume de swap soit invisible pour le Finder: • Lancez Xupport et choisissez "Paramètres" • Activez "Afficher les fichiers et dossiers cachés" et redémarrez le Finder • Renommez le volume de swap de "swap" en ".swap" (Le point le rend invisible pour le Finder) • Désactivez "Afficher les fichiers et dossiers cachés" et redémarrez le Finder
5. Sélectionnez la nouvelle partition de swap sous "Swap Storage Volume". Ensuite, appuyez sur le bouton "Définir" pour appliquer les nouveaux paramètres d'emplacement du fichier d'échange (redémarrage requis).
BTW, cela fonctionne pour moi. Snow Leopard 10.6.2 @ Macbook Pro 2,4 GHz, 4 Go de RAM, 500 Go HD
la source
C'est probablement une réponse indésirable (car je ne peux pas commenter après Diago), mais pourquoi insistez-vous vraiment pour que cela donne de petits gains de performances? J'ai parcouru une discussion sur les forums Apple et j'ai conclu que ce n'était pas du tout une bonne idée. Et j'étais très réticent à l'abandonner. Pourriez-vous fournir des données qui le prouvent au moins pour vous-même, ou est-ce juste un "sentiment"?
Depuis chaque fois que j'utilisais swap même sur linux, il y a 10 ans, et de nos jours sur ubuntu, je n'ai jamais pu voir d'amélioration des performances. Ma raison de le vouloir était d'éviter les problèmes d'espace libre sur OSX et, sur linux, de pouvoir hiberner. C'est tout l'échange pour moi.
Mais je n'ai jamais vraiment fait de recherches plus approfondies, que ce soit seul ou dans les interwebs.
la source
Ce n'est pas une réponse, mais peut-être un complément de suivi très utile. Apple fournit un éditeur de plist gratuit ici PlistEdit Pro . Il vous permet de modifier ces fichiers en toute sécurité. On dirait que vous pouvez simplement changer l'argument avec la valeur / private / var / vm / swapfile en quelque chose comme / Volumes / OtherDrive / vm / myswapfilename pour déplacer les fichiers d'échange ailleurs ...
Encore une fois je n'ai pas testé ça ...
la source