Mac OS X no está creando un archivo de intercambio

4

Hace poco comencé a tener muchos problemas de memoria en mi Mac que ejecutaba High Sierra. En lugar de que se cierre la ventana de forzar la salida, mi sistema se congelaría completamente y la única manera de recuperarse es forzar un reinicio.

Después de investigar un poco, descubrí que mi sistema no está creando ningún archivo de intercambio, incluso cuando la presión de la memoria es crítica. No hay nada en el /private/var/vm/ directorio.

Ya lo he intentado sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist.

¿Hay alguna otra manera de habilitar el intercambio? ¿O para ejecutar algunos diagnósticos?

Detalles adicionales:

Estoy arrancando desde un SSD externo Thunderbolt (no sé si esta es la causa).

A continuación se muestra la salida de vm_stat. Si hago algo de memoria intensiva en esta etapa, mi sistema se congelará.

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                                4116.
Pages active:                            854231.
Pages inactive:                          825841.
Pages speculative:                        27754.
Pages throttled:                              0.
Pages wired down:                        606483.
Pages purgeable:                          22070.
“Translation faults”:                  75731290.
Pages copy-on-write:                     401121.
Pages zero filled:                     49766457.
Pages reactivated:                     17690835.
Pages purged:                           1577284.
File-backed pages:                       503400.
Anonymous pages:                        1204426.
Pages stored in compressor:             6563399.
Pages occupied by compressor:           1875311.
Decompressions:                        21012443.
Compressions:                          32102441.
Pageins:                                2172708.
Pageouts:                                 35123.
Swapins:                                      0.
Swapouts:                                     0.

Editar:

Algunos detalles más:

Esta es la salida de diskutil ap list

APFS Container (1 found)
|
+-- Container disk4 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10
    ====================================================
    APFS Container Reference:     disk4
    Capacity Ceiling (Size):      499898105856 B (499.9 GB)
    Capacity In Use By Volumes:   452259872768 B (452.3 GB) (90.5% used)
    Capacity Available:           47638233088 B (47.6 GB) (9.5% free)
    |
    +-< Physical Store disk3s2 39853349-6B62-4961-99DE-811BA56465EC
    |   -----------------------------------------------------------
    |   APFS Physical Store Disk:   disk3s2
    |   Size:                       499898105856 B (499.9 GB)
    |
    +-> Volume disk4s1 99688E85-E9EF-3688-A324-913D00FF6A0E
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk4s1 (No specific role)
    |   Name:                      System (Case-insensitive)
    |   Mount Point:               /
    |   Capacity Consumed:         449420767232 B (449.4 GB)
    |   FileVault:                 No
    |
    +-> Volume disk4s2 729366E4-48AA-45A3-95DA-8871B8A29778
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk4s2 (Preboot)
    |   Name:                      Preboot (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         20357120 B (20.4 MB)
    |   FileVault:                 No
    |
    +-> Volume disk4s3 431C0191-2B1F-480C-94D0-AF4748E6D213
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk4s3 (Recovery)
    |   Name:                      Recovery (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         509820928 B (509.8 MB)
    |   FileVault:                 No
    |
    +-> Volume disk4s4 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
        ---------------------------------------------------
        APFS Volume Disk (Role):   disk4s4 (VM)
        Name:                      VM (Case-insensitive)
        Mount Point:               Not Mounted
        Capacity Consumed:         2147504128 B (2.1 GB)
        FileVault:                 No

Y la salida de mount:

/dev/disk4s1 on / (apfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk2 on /Volumes/Storage (hfs, local, journaled)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)

Solución (actualizada): Una serie de buenas soluciones sugeridas. Después de volver a revisar el problema, recomendaría la solución de pelusa a continuación. Es la forma más general que tiene en cuenta los cambios en los nombres de volúmenes.

kayoz
fuente
Mira en este hilo para una explicación de qué hacer: apple.stackexchange.com/questions/126669/…
LexS
Gracias a @Lexs por su respuesta, ¿pero no creo que ese hilo contenga algo relacionado con mi problema? ¿O me estoy perdiendo algo?
kayoz

Respuestas:

2

He tenido el mismo problema al ejecutar High Sierra (y Mojave desde entonces) desde un SSD externo. No he probado la sugerencia de Glorfindel ♦ de limpiar el disco de Sierra en HFS + antes de restaurar en High Sierra, lo que parece mucho trabajo.

Sin embargo, he estado usando mi propio demonio de lanzamiento con un script bash desde enero, similar a la solución de chrisgooley, sin embargo, mi script también comprueba qué ID de volumen se debe montar. Pensé que compartiría mi solución con la verificación dinámica para el ID de volumen correcto.

Inicialmente, también codifiqué el ID de volumen, pero esto era problemático porque cada vez que el sistema arrancaba con unidades adicionales conectadas, el ID de volumen cambiaría y el volumen de intercambio no se montaría.

Mi script y mi demonio están abajo:

mountvm.sh

#!/bin/bash
# Mount the APFS VM volume if it isn't already mounted

VM_VOLUME=$(/usr/sbin/diskutil list | grep "VM" | awk '{ print $7 }') 
# echo "VM Volume is $VM_VOLUME"
for i in {1..5}
do
    if [ ! -e /private/var/vm/sleepimage ]
    then
#       echo "$(date "+%a %d/%m/%Y %I:%M:%S%p") > VM volume not yet mounted..."
#       echo -n "$(date "+%a %d/%m/%Y %I:%M:%S%p") > "
        /usr/sbin/diskutil mount -mountPoint /private/var/vm/ $VM_VOLUME
        break
    else
#       echo "$(date "+%a %d/%m/%Y %I:%M:%S%p") > VM volume already mounted..."
        if [ $i -lt 6 ]
        then
#           echo -n "$(date "+%a %d/%m/%Y %I:%M:%S%p") > Confirming in "
            for count in {2..1}
            do
#               echo -n "$count min..."
                sleep 60
            done
            echo
        fi
    fi
done

exit 0

com.local.mountvm.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.local.mountvm</string>
    <key>ProgramArguments</key>
    <array>
        <string>[/path/to/script]/mountvm.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Algunas notas:

Cambie la [/ ruta / a / script] en el plist a donde quiera que coloque el script bash.

Elimine el # en las líneas de eco en la secuencia de comandos de bash para solucionar el problema (deberá ejecutar la secuencia de comandos en Terminal con sudo o especificar una ruta de salida estándar en la lista).

El script comprueba si existe / private / var / vm / sleepimage. Si no lo hace, entonces el volumen de intercambio no está montado e intenta montar el volumen correcto. Si lo hace, comprobará de nuevo cuatro veces más en intervalos de dos minutos antes de salir. La razón por la que agregué esto fue porque descubrí que si simplemente intentaba montar el volumen tan pronto como se cargaba el demonio, fallaría.

lint
fuente
4

Tuve el mismo problema cuando instalé High Sierra en un SSD externo.

Volume disk3s4 647DA4A9-7E85-4523-A4D2-F0392D3789D4
        ---------------------------------------------------
        APFS Volume Disk (Role):   disk3s4 (VM)
        Name:                      VM (Case-insensitive)
        Mount Point:               Not Mounted
        Capacity Consumed:         4294987776 B (4.3 GB)
        FileVault:                 No

Solución :

  1. Cree un archivo plist como usuario root y póngalo en /Library/LaunchDaemons/ carpeta. Tiene que estar escrito en notación de dominio inverso como este:

    /Library/LaunchDaemons/local.mountdisk3s4.plist
    
  2. Solo copie estos datos xml en su archivo plist y cambie el nombre de APFS VM Volume con el suyo.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
         <key>Label</key>
         <string>THE NAME OF FILE</string>
         <key>ProgramArguments</key>
         <array>
              <string>/sbin/mount_apfs</string>
              <string>YOUR APFS VOLUME</string>
              <string>/private/var/vm</string>
         </array>
         <key>KeepAlive</key>
         <dict>
        <key>SuccessfulExit</key>
        <false/>
         </dict>    
    </dict>
    </plist>
    

    En mi caso se parece a esto:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
         <key>Label</key>
         <string>local.mountdisk3s4</string>
         <key>ProgramArguments</key>
         <array>
              <string>/sbin/mount_apfs</string>
              <string>disk3s4</string>
              <string>/private/var/vm</string>
         </array>
         <key>KeepAlive</key>
         <dict>
        <key>SuccessfulExit</key>
        <false/>
         </dict>    
    </dict>
    </plist>
    
  3. Reinicia tu Mac

Michael Golban
fuente
3

El volumen de VM APFS dedicado no se monta correctamente:

+-> Volume disk4s4 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
    ---------------------------------------------------
    APFS Volume Disk (Role):   disk4s4 (VM)
    Name:                      VM (Case-insensitive)
    Mount Point:               Not Mounted
    Capacity Consumed:         2147504128 B (2.1 GB)
    FileVault:                 No

Debe ser montado en el Punto de montaje / privado / var / vm.

Entrando mount en la terminal debería revelar algo como:

...
/dev/disk4s4 on /private/var/vm (apfs, local, noexec, journaled, noatime, nobrowse)
...

La razón no está clara. Al menos algunos archivos de intercambio se crearon en el pasado porque la máquina virtual consume 2.1 GB (= dos archivos de intercambio a 1 GiB).


Una solución temporal Es especificar otro directorio de archivo de intercambio. Después deshabilitando SIP , esto se puede lograr modificando el archivo. /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist con sudo nano ... o Control de lanzamiento .

Original:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
    </array>
</dict>
</plist>

Mod:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
        <string>-F</string>
        <string>/vm/swapfile</string>
    </array>
</dict>
</plist>

Si el directorio / vm no existe, créelo:

sudo mkdir /vm
sudo chmod 755 /vm

Reinicie su Mac después. Habilitar SIP de nuevo!


En mi opinión, esto está relacionado con la Actualización complementaria 10.13.3. Al menos en mis varias carpetas adicionales de High Sierra VM / vm fueron creados - cada uno conteniendo un swapfile0 abandonado. El directorio de intercambio real es / private / var / vm - & gt; disk1s4 (volumen de máquina virtual APFS) aunque - probado con sudo memory_pressure -l critical en la terminal.

Tengo que seguir investigando esto.


Para solucionar realmente el problema, eliminar y volver a agregar el volumen de VM APFS roto de alguna manera podría ayudar:

  • Restaure el archivo com.apple.dynamic_pager.plist predeterminado
  • Compruebe si existe la carpeta / private / var / vm
  • Arranque en modo Sierra de recuperación
  • Terminal abierta en la barra de menú & gt; Utilidades y entrar diskutil ap list para obtener los detalles de APFS
  • Elimine el volumen de la máquina virtual APFS:

    diskutil ap deleteVolume <av_vmUUID> #<av_vmUUID>: UUID of the APFS Volume with the VM role
    

    En su caso, av_vmUUID es 5DE0EA6B-CA57-4226-B038-2E256FCC5B98 así que:

    diskutil ap deleteVolume 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
    
  • Agregue un volumen de VM APFS:

    diskutil ap addVolume diskX APFS VM -mountpoint /private/var/vm -role V
    

    con diskX: Referencia de contenedor APFS del contenedor con el UUID 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10 que se muestra en diskutil ap list (probablemente disk3, disk4 o disk5)

    El volumen se creará, pero no se montará porque el punto de montaje especificado no existe en el sistema base del Modo de recuperación.

  • Reinicie su Mac y primero verifique si la VM está montada en / private / var / vm con mount. La prueba con sudo memory_pressure -l critical.
klanomath
fuente
Gracias por la respuesta detallada, pero desafortunadamente esto todavía no funciona para mí. No hay nada en mi carpeta / vm / después de aplicar esto y reiniciar. Probé la prueba memory_pressure y no se creó ningún intercambio. Sin embargo, me di cuenta de que seguí obteniendo un "vm_swap_create_file error at XXX secs" en la consola. Y el disco vm todavía se muestra como desmontado.
kayoz
@kayoz Añadida una posible solución
klanomath
Gracias de nuevo por todo el tiempo que has tomado para ayudarme a resolver esto. Desafortunadamente, la eliminación y creación del volumen de VM aún no funciona. Luego de recrear el volumen, su tamaño se redujo a 20KB. Cuando reinicio en modo normal, el volumen vuelve a 2 GB y permanece sin montar.
kayoz
@kayoz Intento encontrar otra solución! ¿Usó algún truco en el pasado para mover la máquina virtual a otro volumen? ¿O el disco TB contiene un sistema HighSierra "nuevo" (= no hay un sistema actualizado)?
klanomath
Nunca he tocado las cosas de VM antes. El disco de TB no tiene un sistema nuevo. Solía ​​ser Sierra, que se actualizó a High Sierra. Aunque originalmente migré mi sistema al disco TB a través de una copia de seguridad de la máquina de tiempo.
kayoz
1

Tengo el mismo problema después de la actualización. A mi manera, simplemente está borrando el contenedor APFS y luego utilizando Time Machine para restaurar Sierra con HFS + y luego restaurar High Sierra con particiones APFS. A continuación están mis configuraciones que lo hacen funcionar.

MacBook-Pro:~ root# diskutil apfs list
APFS Container (1 found)
|
+-- Container disk1 96CC8155-6433-4240-B445-3E909F80E1CF
    ====================================================
    APFS Container Reference:     disk1
    Capacity Ceiling (Size):      250790436864 B (250.8 GB)
    Capacity In Use By Volumes:   221076267008 B (221.1 GB) (88.2% used)
    Capacity Available:           29714169856 B (29.7 GB) (11.8% free)
    |
    +-< Physical Store disk0s2 0D0BAEFE-FBC0-496D-9260-5F2A5D6B0793
    |   -----------------------------------------------------------
    |   APFS Physical Store Disk:   disk0s2
    |   Size:                       250790436864 B (250.8 GB)
    |
    +-> Volume disk1s1 5AA2CDA5-EAD1-4D9C-BEE0-E85957526A37
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk1s1 (No specific role)
    |   Name:                      Macintosh HD (Case-insensitive)
    |   Mount Point:               /
    |   Capacity Consumed:         218261549056 B (218.3 GB)
    |   FileVault:                 No
    |
    +-> Volume disk1s2 4BC0480C-2FED-4B48-A3A5-5E133B707776
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk1s2 (Preboot)
    |   Name:                      Preboot (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         19046400 B (19.0 MB)
    |   FileVault:                 No
    |
    +-> Volume disk1s3 DF8D07CD-27C0-4EB2-A939-2D3E2E64EB66
    |   ---------------------------------------------------
    |   APFS Volume Disk (Role):   disk1s3 (Recovery)
    |   Name:                      Recovery (Case-insensitive)
    |   Mount Point:               Not Mounted
    |   Capacity Consumed:         509820928 B (509.8 MB)
    |   FileVault:                 No
    |
    +-> Volume disk1s4 27BDB6EB-9BE8-417E-8B03-D2C03E64DD30
        ---------------------------------------------------
        APFS Volume Disk (Role):   disk1s4 (VM)
        Name:                      VM (Case-insensitive)
        Mount Point:               /private/var/vm
        Capacity Consumed:         2147504128 B (2.1 GB)
        FileVault:                 No
MacBook-Pro:~ root# 
MacBook-Pro:~ root# 
MacBook-Pro:~ root# diskutil mount -mountPoint /private/var/vm disk1s4
Volume VM on disk1s4 mounted
MacBook-Pro:~ root# 


MacBook-Pro:~ root# vi /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MacBook-Pro:~ root# cat /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
                <string>-F</string>
                <string>/private/var/vm/swapfile</string>
    </array>
</dict>
</plist>
MacBook-Pro:~ root# ls -l /sbin/dynamic_pager
-rwxr-xr-x  1 root  wheel  43920  1 19 16:32 /sbin/dynamic_pager
MacBook-Pro:~ root# ls -l /private/var/vm/swapfile*
-rw-------  1 root  wheel  1073741824  3 28 00:36 /private/var/vm/swapfile0
Chang-Han Huang
fuente
Veo que has intentado editar tu respuesta, pero el sistema no te reconoció. Por favor crea una cuenta y preguntar a través de la Contáctenos Forma de fusionarlo con el anterior.
Glorfindel
1

Tengo exactamente los mismos síntomas. Instalé High Sierra 10.13.4 en un SSD externo de APFS recién formateado y formateado. El Monitor de actividad no muestra espacio de intercambio, y diskutil apfs list muestra que la partición de VM no está montada, tal como se muestra arriba. He estado recibiendo pánicos repetidos cuando me quedo sin memoria (mi computadora solo tiene 4 GB de RAM).

Mi solución, que aún no he probado, es hacer un clon de Carbon Copy del disco externo, luego borrarlo y reformatearlo (usando el comando "Partición" de la Utilidad de Disco) como Mac OS Extended (Journaled), y luego restaurar utilizando CCC. Esto debería devolverme mi VM.

Alan Harper
fuente
1

Me encontré con este problema cuando actualicé a Mojave. Mi sistema operativo está instalado en un SSD externo. Mi solución terminó siendo similar a la de Michael Golban, pero necesitaba un comando adicional.

Terminé escribiendo un pequeño script de bash y cargándolo con un LaunchDaemon.

/usr/local/sbin/mount_swap.sh

#!/bin/bash
/sbin/mount_apfs disk3s4 /private/var/vm
diskutil mount -mountPoint /private/var/vm disk3s4

com.local.mountswap.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
     <key>Label</key>
     <string>com.local.mountswap</string>
     <key>ProgramArguments</key>
     <array>
          <string>/usr/local/sbin/mount_swap.sh</string>
     </array>
     <key>KeepAlive</key>
     <dict>
    <key>SuccessfulExit</key>
    <false/>
     </dict>
</dict>
</plist>

Tan pronto como se ejecutaran estos comandos durante la prueba, la línea "Swap Used" en el Monitor de actividad comenzaría a mostrar valores positivos.

chrisgooley
fuente
0

También estoy en esta situación, arrancando desde un Samsung T5 SSD conectado a USB3. Intenté la solución de pelusa, sin embargo en mi caso el comando

/usr/sbin/diskutil list | grep "VM" | awk '{ print $7 }'

genera dos respuestas, ya que tanto el disco duro interno como el SSD externo contienen una partición de intercambio (VM). No puedo encontrar una solución para este problema (automatizar el proceso de montaje en el arranque) por mi cuenta, ¿puede alguien ayudarme?

Hans-Göran Puke
fuente
-1

Mac OSX High Sierra es un derivado de Linux, y muchos sistemas operativos de Linux recomiendan desactivar el intercambio cuando se instala en un SSD, ya que el tipo de almacenamiento utilizado en una partición de intercambio supone una gran carga para los medios magnéticos del SSD de una manera potencialmente destructiva. Por lo tanto, supongo que High Sierra desactiva el espacio de intercambio en ssds como estándar. Mi opción preferida es instalar el espacio de intercambio en una unidad tradicional separada.

https://askubuntu.com/questions/652337/why-no-swap-partitions-on-ssd-drives

miller the gorilla
fuente
1
MacOS no es un derivado de Linux. De hecho, el diseño básico es anterior a Linux. Su intercambio es bastante diferente: también el intercambio en disco duro en lugar de SSDS ralentizará el sistema de forma masiva.
Mark
Estoy de acuerdo con Miller, en que no es recomendable cambiar la SSD primaria. El intercambio en cualquier sistema UNIX es volátil y las escrituras constantes eventualmente causarán problemas con el SSD y los sectores tendrán que reasignarse debido a fallas en los medios magnéticos. Y si el disco falla, entonces su sistema no se iniciará. Un SSD no primario para el intercambio definitivamente sería mucho más rápido que un disco externo tradicional basado en disco y sería el camino a seguir.
john
En cuanto a la discusión de Linux & lt; - & gt; macOS, Chicken / egg: son todos derivados de AT & amp; T Unix de Dennis Ritchie. en.wikipedia.org/wiki/Unix
john