2 votes

Utilisez le volume VM APFS à partir d'un autre disque

En raison du triste décès de ma machine principale, je démarre un système beaucoup moins performant à partir d'un disque externe pour continuer à travailler en attendant un remplacement. La machine elle-même a son propre disque interne. Le disque interne de la machine et mon disque récupéré (maintenant externe) sont formatés en APFS et ont tous les deux l'ensemble complet de volumes système (pré-démarrage, récupération et VM).

Le problème est que, lorsque je démarre à partir du disque externe, macOS veut stocker des fichiers d'échange dessus, même si les performances sont médiocres lorsque cela se produit, d'autant plus que cette configuration d'urgence a beaucoup moins de RAM, rendant le swapping beaucoup plus probable.

Ce que j'aimerais savoir, c'est : puis-je dire à macOS Mojave de monter le volume VM du disque interne et l'utiliser pour les fichiers d'échange, plutôt que d'utiliser le disque externe ?

Une bizarrerie est que même si le disque externe a son propre volume VM (que je ne veux pas utiliser), macOS Mojave ne l'utilise pas non plus, à la place il stocke des fichiers d'échange sous /vm, au lieu de monter le volume VM à /private/var/vm comme d'habitude.

Si cela est plus facile à visualiser, mes disques ressemblent à ceci, où disk0 est interne et disk2 est externe, et a été retiré de ma machine morte:

diskutil list
/dev/disk0 (interne, physique) :
   #:                       TYPE                         NAME                                        SIZE                 IDENTIFIER
   0:      SCHÉMA de partition GUID                                           *320,1 Go           disk0
   1:                        EFI                                                    EFI                      209,7 Mo        disk0s1
   2:                 Conteneur Apple_APFS                                  319,9 Go           disk0s2

/dev/disk1 (synthétisé) :
   #:                       TYPE                                                      NAME                                        SIZE                 IDENTIFIER
   0:      Schéma de conteneur APFS                                             +319,9 Go           disk1
                                                      Espace de stockage physique disk0s2
   1:                Volume APFS                                            Macintosh HD                        34,4 Go              disk1s1
   2:                Volume APFS                                            Preboot                                      41,8 Mo           disk1s2
   3:                Volume APFS                                            Récupération                             507,4 Mo         disk1s3
   4:                Volume APFS                                            VM                                               20,5 Ko            disk1s4

/dev/disk2 (externe, physique) :
   #:                      TYPE                                                      NAME                                         SIZE                 IDENTIFIER
   0:      SCHÉMA de partition GUID                                           *1,0 To              disk2
   1:                        EFI                                                     EFI                       209,7 Mo         disk2s1
   2:                 Conteneur Apple_APFS                                  1000,0 Go          disk2s2

/dev/disk3 (synthétisé) :
   #:                       TYPE                                                      NAME                                         SIZE                 IDENTIFIER
   0:      Schéma de conteneur APFS                                             +1000,0 Go          disk3
                                                      Espace de stockage physique disk2s2
   1:                Volume APFS                                           macOS                                       102,5 Go          disk3s1
   2:                Volume APFS                                           Preboot                                     64,3 Mo           disk3s2
   3:                Volume APFS                                           Récupération                             1,0 Go                disk3s3
   4:                Volume APFS                                           VM                                              20,5 Ko            disk3s4
   5:                Volume APFS                                           Utilisateurs                               321,0 Go          disk3s5

Pour clarifier : je ne cherche pas à désactiver complètement le swapping, mais à utiliser le disque interne comme emplacement des fichiers d'échange. En effet, l'échange est nécessaire sur l'ancienne machine que j'utilise, car elle n'a jamais été utilisée pour beaucoup plus qu'un centre multimédia et n'a que 4 Go de RAM, qui se remplit rapidement !

1voto

Haravikk Points 1128

Je crois avoir trouvé une solution à cela grâce à une réponse à une question similaire, le processus responsable des fichiers d'échange est /sbin/dynamic_pager, qui est déclenché par une tâche launchd trouvée à /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist. Puisque ce fichier est situé dans /System, cela signifie que cette solution nécessite que la Protection de l'Intégrité du Système soit désactivée, et pour Catalina, vous devrez effectuer les modifications depuis votre volume de récupération.

La première étape consiste à sauvegarder le plist original:

cp /System/Library/com.apple.dynamic_pager.plist /System/Library/com.apple.dynamic_pager.plist.orig

Maintenant, nous voulons modifier la commande qui est exécutée. Dans l'original, elle ressemblera à ceci:

        EnableTransactions

        Label
        com.apple.dynamic_pager
        KeepAlive

                SuccessfulExit

        POSIXSpawnType
        Interactive
        ProgramArguments

                /sbin/dynamic_pager

J'ai modifié ma section ProgramArguments comme suit:

        ProgramArguments

                /bin/bash
                -c
                diskutil mount -mountPoint /private/var/vm disk1s4 && /sbin/dynamic_pager -F /private/var/vm/swapfile

Cela exécute maintenant deux commandes, la première pour monter le volume VM interne à /private/var/vm et la seconde est un appel modifié à dynamic_pager lui disant de créer des fichiers d'échange à la nouvelle location.

REMARQUE : Dans mon cas, le volume VM était disk1s4, et bien que cela devrait être le cas pour la plupart des systèmes, vous devriez vérifier avec diskutil list d'abord et modifier la nouvelle commande en conséquence.

Pour activer les changements, redémarrez ou, si vous êtes sûr de ne pas utiliser de fichier d'échange à ce moment-là, vous pouvez décharger et recharger la tâche launchd immédiatement:

launchctl unload /System/Library/com.apple.dynamic_pager.plist
launchctl load /System/Library/com.apple.dynamic_pager.plist

Le nouvel emplacement du fichier d'échange devrait maintenant être défini, et si nécessaire, vous pouvez supprimer tout fichier d'échange restant (dans mon cas à /vm).

MISE À JOUR : Méthode plus simple

Il m'est venu à l'esprit qu'il pourrait y avoir une solution plus simple à ce problème; étant donné que la tâche launchd du dynamic pager ne fournit pas d'emplacement spécifique pour les fichiers d'échange, il semble qu'il choisira par ordre de préférence, avec /private/var/vm étant préféré s'il est disponible. À cette fin, il pourrait être possible de forcer l'utilisation du volume de VM du disque interne comme ceci:

  1. Obtenez l'UUID du volume VM (diskutil info disk1s4)
  2. Exécutez sudo vifs
  3. Ajoutez une ligne comme ceci: UUID=9e2cd41c-1566-11ea-9237-ef9cfb4e0fac /private/var/vm apfs rw,nobrowse,union en remplaçant par l'UUID de votre volume

Cela devrait faire en sorte que votre système monte automatiquement votre volume VM à /private/var/vm, et comme cela se produira avant que le dynamic pager ne s'exécute, il devrait voir et sélectionner cet emplacement, sans nécessité de désactiver SIP ou de modifier son démon de lancement.

0voto

charles horvath Points 151

Avez-vous envisagé de désactiver complètement le swap? Il est possible via la commande nvram

sudo nvram boot-args="vm_compressor=2"

Suivi d'un redémarrage.

(pris d'ici)

0voto

user3115570 Points 1

Je viens de m'impliquer dans cela, mais je n'ai pas réussi à trouver une solution facile mais propre pour le problème en raison de la façon dont j'ai construit ma configuration :

J'ai ajouté un SSD, mais j'ai également "mirrored" le SSD sur une partition du disque dur pour conserver la machine utilisable en cas de défaillance du SSD (et il va échouer, croyez-moi).

Par conséquent, avec plusieurs installations de Mojave sur la configuration, j'ai obtenu plusieurs volumes VM des systèmes de fichiers APFS multiples.

J'ai essayé tous les tours sur cette page, mais peu importe ce que j'ai fait, j'ai toujours fini avec mon /private/var/vm sur le SSD (définitivement pas bon).

Alors j'ai abandonné private/var/vm, créé un /private/var/swap, l'ai utilisé pour monter le volume dédié du disque dur à /etc/fstab et instrumenté /System/Library/com.apple.dynamic_pager.plist pour l'utiliser à la place :

    /sbin/dynamic_pager -F /private/var/swap/swapfile

Eh bien. Ça marche. :)

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