Mac OS X erstellt keine Auslagerungsdatei

Ich habe vor kurzem angefangen, auf meinem Mac mit High Sierra auf viele Speicherprobleme zu stoßen. Anstatt dass das Fenster zum erzwungenen Beenden angezeigt wird, friert mein System vollständig ein und die einzige Möglichkeit zur Wiederherstellung besteht darin, einen Neustart zu erzwingen.

Nach einigen Nachforschungen fand ich heraus, dass mein System keine Auslagerungsdateien erstellt, selbst wenn der Speicherdruck kritisch ist. Im /private/var/vm/Verzeichnis steht nichts.

Ich habe es bereits versucht sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist.

Gibt es eine andere Möglichkeit, das Tauschen zu aktivieren? Oder um eine Diagnose durchzuführen?

Weitere Details:

Ich boote von einer externen Thunderbolt-SSD (ich weiß nicht, ob dies die Ursache ist).

Unten ist die Ausgabe von vm_stat. Wenn ich zu diesem Zeitpunkt irgendetwas speicherintensives mache, friert mein System ein.

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.

Bearbeiten:

Noch ein paar Details:

Dies ist die Ausgabe vondiskutil 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

Und die Ausgabe von 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)

Lösung (aktualisiert): Eine Reihe guter Lösungsvorschläge. Nachdem ich das Problem erneut aufgegriffen habe, würde ich die folgende Lösung von lint empfehlen. Dies ist die allgemeinste Methode, die Änderungen in Volume-Namen berücksichtigt.

In diesem Thread finden Sie eine Erklärung, was zu tun ist: apple.stackexchange.com/questions/126669/…
@Lexs danke für deine Antwort, aber ich glaube nicht, dass dieser Thread etwas zu meinem Problem enthält? Oder übersehe ich etwas?

Antworten (12)

Ich hatte das gleiche Problem beim Ausführen von High Sierra (und seitdem Mojave) von einer externen SSD. Ich habe Glorfindel♦s Vorschlag nicht ausprobiert, die Festplatte auf Sierra auf HFS+ zu löschen, bevor ich auf High Sierra zurücksetze, was nach einer Menge Arbeit aussieht.

Allerdings verwende ich seit Januar einen eigenen Launch-Daemon mit einem Bash-Skript, ähnlich der Lösung von Chrisgooley, allerdings prüft mein Skript auch, welche Volume-ID gemountet werden soll. Ich dachte, ich würde meine Lösung mit der dynamischen Prüfung auf die richtige Volume-ID teilen.

Anfangs habe ich auch die Volume-ID fest codiert, aber dies war problematisch, da sich die Volume-ID immer dann änderte, wenn das System mit zusätzlichen angeschlossenen Laufwerken startete, und das Swap-Volume nicht bereitgestellt werden konnte.

Mein Skript und Daemon sind unten:

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>

Einige Notizen:

Ändern Sie den [/path/to/script] in der Plist dahin, wo immer Sie das Bash-Skript platzieren.

Entfernen Sie das # in den Echo-Zeilen im Bash-Skript, um Fehler zu beheben (Sie müssen das Skript in Terminal mit sudo ausführen oder einen stdout-Pfad in der plist angeben).

Das Skript prüft, ob /private/var/vm/sleepimage existiert. Wenn dies nicht der Fall ist, ist das Swap-Volume nicht gemountet und versucht, das richtige Volume zu mounten. Wenn dies der Fall ist, wird es vor dem Beenden noch vier weitere Male in Zwei-Minuten-Intervallen überprüft. Der Grund, warum ich dies hinzugefügt habe, war, weil ich herausfand, dass es fehlschlagen würde, wenn ich einfach versuchen würde, das Volume zu mounten, sobald der Daemon geladen ist.

Ich hatte das gleiche Problem, als ich High Sierra auf einer externen SSD installiert habe.

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

Lösung :

  1. Erstellen Sie eine Plist-Datei als Root-Benutzer und legen Sie sie im /Library/LaunchDaemons/Ordner ab. Es muss in umgekehrter Domänennotation wie folgt geschrieben werden:

    /Library/LaunchDaemons/local.mountdisk3s4.plist
    
  2. Kopieren Sie einfach diese XML-Daten in Ihre Plist-Datei und ändern Sie den Namen des APFS-VM-Volumes mit Ihrem.

    <?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>
    

    In meinem Fall sieht es so aus:

    <?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. Starten Sie Ihren Mac neu

Das dedizierte VM-APFS-Volume ist nicht ordnungsgemäß gemountet:

+-> 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

Es sollte am Einhängepunkt /private/var/vm gemountet werden.

Die Eingabe mountin Terminal sollte so etwas wie Folgendes zeigen:

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

Der Grund ist unklar. Zumindest einige Auslagerungsdateien wurden in der Vergangenheit erstellt, da 2,1 GB (= zwei Auslagerungsdateien à 1 GiB) von VM verbraucht werden.


Eine vorübergehende Problemumgehung besteht darin, ein anderes Auslagerungsdateiverzeichnis anzugeben. Nach dem Deaktivieren von SIP kann dies erreicht werden, indem die Datei /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist mit sudo nano ...oder LaunchControl geändert wird .

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>

Wenn das Verzeichnis /vm nicht existiert, erstellen Sie es:

sudo mkdir /vm
sudo chmod 755 /vm

Starten Sie Ihren Mac danach neu. SIP wieder aktivieren!


Meiner Meinung nach hängt dies mit dem 10.13.3 Supplemental Update zusammen. Zumindest in meinen verschiedenen High Sierra VMs wurden zusätzliche Ordner /vm erstellt - jeder mit einer verlassenen Auslagerungsdatei0. Das tatsächliche Auslagerungsverzeichnis ist jedoch /private/var/vm -> disk1s4 (APFS-VM-Volume) - getestet mit sudo memory_pressure -l criticalim Terminal.

Das muss ich weiter untersuchen.


Um das Problem wirklich zu beheben, sollte das Entfernen und erneute Hinzufügen des irgendwie defekten VM-APFS-Volumes helfen:

  • Stellen Sie die Standarddatei com.apple.dynamic_pager.plist wieder her
  • Prüfen Sie, ob der Ordner /private/var/vm existiert
  • Booten Sie in den Wiederherstellungsmodus von High Sierra
  • Öffnen Sie Terminal in der Menüleiste > Dienstprogramme und geben Sie ein diskutil ap list, um die APFS-Details abzurufen
  • Entfernen Sie das APFS-VM-Volume:

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

    In Ihrem Fall ist av_vmUUID 5DE0EA6B-CA57-4226-B038-2E256FCC5B98 also:

    diskutil ap deleteVolume 5DE0EA6B-CA57-4226-B038-2E256FCC5B98
    
  • Fügen Sie ein APFS-VM-Volume hinzu:

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

    mit diskX: APFS Container Referenz des Containers mit der UUID 6BE5FDB5-A68F-4CBF-A404-68AE73E61C10 in der angezeigt diskutil ap list(wahrscheinlich disk3, disk4 oder disk5)

    Das Volume wird erstellt, aber nicht gemountet, da der angegebene Mountpoint im Basissystem des Wiederherstellungsmodus nicht existiert!

  • Starten Sie Ihren Mac neu und prüfen Sie zunächst, ob die VM mit /private/var/vm gemountet ist mount. Testen Sie es mit sudo memory_pressure -l critical.
Danke für die ausführliche Antwort, aber leider funktioniert das bei mir immer noch nicht. Nachdem ich dies angewendet und neu gestartet habe, befindet sich nichts in meinem Ordner /vm/. Ich habe den Test memory_pressure ausprobiert und es wurde kein Swap erstellt. Ich habe jedoch bemerkt, dass ich in der Konsole immer wieder ein "vm_swap_create_file failed at XXX secs"-Protokoll erhalten habe. Und die VM-Festplatte wird immer noch als nicht bereitgestellt angezeigt.
@kayoz Eine mögliche Lösung hinzugefügt
Nochmals vielen Dank für all die Zeit, die Sie sich genommen haben, um mir bei der Lösung dieses Problems zu helfen. Leider funktioniert das Entfernen und Erstellen des VM-Volumes immer noch nicht. Nach der Neuerstellung des Volumes reduzierte sich seine Größe auf 20 KB. Wenn ich im normalen Modus neu starte, wird das Volume wieder auf 2 GB erhöht und bleibt nicht bereitgestellt.
@kayoz Ich versuche eine andere Lösung zu finden! Haben Sie in der Vergangenheit einen Hack verwendet, um die VM auf ein anderes Volume zu verschieben? Oder enthält die TB-Platte ein "frisches" HighSierra-System (=kein aktualisiertes System)?
Ich habe das VM-Zeug noch nie berührt. Die TB-Festplatte hat kein frisches System. Früher war es Sierra, das zu High Sierra aufgerüstet wurde. Ich habe mein System ursprünglich jedoch über ein Time-Machine-Backup auf die TB-Festplatte migriert.
@kayoz Eine weitere seltsame Sache ist, dass anscheinend 2 Auslagerungsdateien (wahrscheinlich à 1 GiB) erstellt werden. Wie viel RAM ist in Ihrem Mac installiert?
Ich habe 16 GB RAM. Ich habe Ihnen die Ausgabe vor zwei Tagen per E-Mail geschickt, haben Sie sie erhalten?
@kayoz Ja, ich habe es verstanden. Ich probier es noch...

Ich habe das gleiche Problem nach dem Upgrade. Mein Weg ist einfach, den APFS-Container zu löschen und dann mit Time Machine Sierra mit HFS + wiederherzustellen und dann High Sierra mit APFS-Partitionen wiederherzustellen. Unten sind meine Konfigurationen, mit denen es funktioniert.

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
Wie ich sehe, haben Sie versucht, Ihre Antwort zu bearbeiten, aber das System hat Sie nicht erkannt. Bitte erstellen Sie ein Konto und fordern Sie über das Kontaktformular an , es mit Ihrem alten zusammenzuführen.

Ich habe genau die gleichen Symptome. Ich habe High Sierra 10.13.4 auf einer frisch formatierten externen Thunderbolt-SSD mit APFS installiert. Der Aktivitätsmonitor zeigt keinen Auslagerungsbereich und diskutil apfs listzeigt an, dass die VM-Partition nicht gemountet ist, genau wie oben. Ich bekomme wiederholt Panik, wenn mir der Arbeitsspeicher ausgeht (mein Computer hat nur 4 GB RAM).

Meine Lösung, die ich noch nicht getestet habe, besteht darin, einen Carbon Copy-Klon der externen Festplatte zu erstellen, sie dann zu löschen und neu zu formatieren (mit dem Befehl „Partition“ des Festplatten-Dienstprogramms) als Mac OS Extended (Journaled) und dann wiederherzustellen mit CCC. Dies sollte mir meine VM zurückgeben.

Ich bin auf dieses Problem gestoßen, als ich auf Mojave aktualisiert habe. Mein Betriebssystem ist auf einer externen SSD installiert. Mein Fix war ähnlich wie der von Michael Golban, aber ich brauchte einen zusätzlichen Befehl.

Am Ende habe ich ein kleines Bash-Skript geschrieben und es mit einem LaunchDaemon geladen.

/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>

Sobald diese Befehle während des Tests ausgeführt wurden, zeigte die Zeile „Swap Used“ im Aktivitätsmonitor positive Werte.

Ich bin bei einer Gelegenheit auf dasselbe Problem gestoßen und habe es mit Michael Golbans einfachster Lösung oben behoben , dh das Hinzufügen einer Plist zum direkten Mounten des APFS-VM-Volumes.

Leider funktionierte diese Lösung nicht mit anderen Macs, da sich die Laufwerksnummerierung zufällig aus unbekannten Gründen änderte. Zu diesem Zeitpunkt begann ich, die verschiedenen oben genannten Skripte auszuprobieren, konnte aber kein 100% zuverlässiges finden. Der Vorschlag von Lint funktioniert nicht, wenn /private/var/vm/sleepimage vor dem Mounten des APFS-VM-Volumes auf /private/var/vm/ existiert, was in meinem Fall der Fall war. Also fing ich an, mein eigenes Skript zu schreiben, und stellte fest, dass das VM-Volume nach dem Booten immer noch nicht gemountet war, und erkannte, dass das Volume während des Bootvorgangs ausgehängt werden konnte. Nach vielen Umschreibungen und Tests teile ich jetzt gerne eine funktionierende Lösung.

/Library/LaunchDaemons/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>local.mountvm</string>
  <key>Program</key>
        <string>/usr/local/bin/mountvm.sh</string>
        <key>KeepAlive</key>
        <dict>
                <key>Crashed</key>
                <true/>
                <key>SuccessfulExit</key>
                <false/>
        </dict>
</dict>
</plist>

/usr/local/bin/mountvm.sh

#!/bin/bash
# set -x

# This script is intended to fix a problem where macOS (above 10.13) won't mount its dedicated virtual memory APFS volume 
# when run from an external SSD drive. Should work using macOS 10.13 and above (10.14.6 successfully tested). It logs its activity in /Library/Logs/mountvm.log.


# Just to make the rest more readable, -n is used to trigger echo -n and -c is used to clear the logfile
Log_input () {
    case $1 in
    "-c")
        echo "$(date) : $2" > /Library/Logs/mountvm.log 
        ;;
    "-n")
        echo -n "$(date) : " >> /Library/Logs/mountvm.log
        ;;
    *)
        echo "$(date) : $1" >> /Library/Logs/mountvm.log 
        ;;
    esac
}


# Makes sure we have an APFS Volume onboard, otherwise exits
if [ "$(/usr/sbin/diskutil ap list)" == "No APFS Containers found" ]; then
    Log_input "-c" "No APFS Volume found, exiting."
    exit 255
fi

# Grabs VM volume string from system disk (should work even with several OS disks connected)
ROOT_DISK=$(/usr/sbin/diskutil ap list | grep -B 2 -E '/$' | grep disk | awk '{ print $6 }' | cut -c 1-5)
VM_VOLUME=$(/usr/sbin/diskutil ap list | grep -A5 $ROOT_DISK | grep "(VM)" | awk '{ print $5 }')

# Makes sure we have a VM Volume to mount (if anyone can help with a regex matching disk0s1, disk1s4 etc. please reach out)
if [ "$(echo $VM_VOLUME | cut -c 1-4)" != "disk" ]; then
    Log_input "-c" "Unable to find a VM Volume to mount, exiting."
    exit 255
fi


# From here we should be safe to proceed

# Mount attemps counter
MOUNT_ATTEMPTS=0

# Clears log previous entries
Log_input "-c" "Starting mount_vm.sh, VM Volume is $VM_VOLUME"

# Mounts the VM volume, then keeps checking it remains so every ten seconds during 5 minutes 
while [ $SECONDS -lt 300 ]
do 
    /usr/sbin/diskutil ap list | grep -A5 $VM_VOLUME | grep "Not Mounted" >> /dev/null
    VM_status=$?
    case $VM_status in
    "0")
        ((MOUNT_ATTEMPTS++))
        Log_input "Attempt to mount $VM_VOLUME #$MOUNT_ATTEMPTS"
        Log_input "-n"
        /usr/sbin/diskutil mount -mountPoint /private/var/vm/ $VM_VOLUME >> /Library/Logs/mountvm.log
        ;;
    "1")
        Log_input "$VM_VOLUME is already mounted, waiting..."
        ;;
    *)
        Log_input "grep command error, exiting."
        exit 255
        ;;
    esac
    sleep 10
done


# Wait another 10 seconds...
sleep 10

# before writing final log input
case $VM_status in
"1")
    if [ $MOUNT_ATTEMPTS -eq 0 ]; then
        Log_input "$VM_VOLUME was alreaddy mounted at script startup and remained so until script exited after $SECONDS seconds elapsed." 
    else
        Log_input "$VM_VOLUME remained mounted after $MOUNT_ATTEMPTS attempt(s), exiting after $SECONDS seconds elapsed." 
    fi
    ;;
"0")
    if [ $MOUNT_ATTEMPTS -gt 0 ]; then
        Log_input "$VM_VOLUME kept getting unmounted after $MOUNT_ATTEMPTS attempts, exiting after $SECONDS seconds elapsed." 
    fi
    ;;
esac

exit 0

Anmerkungen :

  • Auf einigen Macs ist mir aufgefallen, dass mountvm.log ohne seine letzten Einträge enden kann, was bedeutet, dass das Skript beendet wurde. Es scheint, dass die in local.mountvm.plist festgelegten KeepAlive-Bedingungen nicht ausreichen, um das Skript neu zu starten, was zu einer nicht funktionierenden Situation des virtuellen Speichers führen kann.

  • Mir ist auch aufgefallen, dass der Ordner /private/var/vm und sein Inhalt möglicherweise dem lokalen Administratorkonto anstelle von root gehören, was ich selbst bei deaktiviertem SIP nicht korrigieren konnte.

Dies war die einzige, die bei mir funktioniert hat (Mojave 10.14.6), danke! Hier ist eine Regex-Bearbeitung für Ihr Skript: pastebin.com/raw/2ugisfvg

Der folgende Befehl hat das Problem auf meinem macOS Mojave (10.14.6) behoben. Ich verwende auch eine bootfähige externe Festplatte .

sudo defaults write /Library/Preferences/SystemConfiguration/autodiskmount AutomountDisksWithoutUserLogin -bool true

Dieser Befehl ermöglicht es dem System, das Laufwerk früher im Prozess (vor der Anmeldung) zu mounten. Ich denke also, dass es verfügbar ist, wenn das System (normalerweise zu früh) den Standardpfad des Swaps aktualisieren muss.

Geben Sie hier die Bildbeschreibung ein

Ich bin auch in dieser Situation und boote von einer über USB3 angeschlossenen Samsung T5 SSD. Ich habe die Lösung von lint ausprobiert, in meinem Fall jedoch den Befehl

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

erzeugt zwei Antworten, da sowohl die interne Festplatte als auch die externe SSD eine Swap-Partition (VM) enthalten. Ich kann selbst keine Lösung für dieses Problem finden (Automatisierung des Mountvorgangs beim Booten), also kann jemand helfen?


[Pinetops] Seltsamerweise kann ich keinen Kommentar hinzufügen, also werde ich stattdessen Ihre "Antwort" bearbeiten. Ich war in einer ähnlichen Situation (macOS Mojave bootet von einer Samsung T5 1 GB SSD). Ich sehe auch zwei Antworten, wenn ich den obigen diskutilBefehl ausführe, also denke ich, dass die Antwort von lint für mich nicht funktioniert (außerdem sehe ich eine Datei mit dem Namen, /private/var/vm/sleepimageobwohl die VM nicht gemountet ist). Ich habe jedoch Michael Golbans Antwort ausprobiert und es hat mit minimalem Aufwand funktioniert. Zuerst musste ich herausfinden, welche VM gemountet werden sollte, wenn ich von der Samsung-SSD boote. Ich habe dies mit dem folgenden Befehl getan und dann nachgesehen, auf welcher Festplatte gemountet wurde /.

/usr/sbin/diskutil ap list

Das für mich relevante Ergebnis war:

+-> Volume disk5s1 14706492-442E-3E44-84D8-C3A216EAB040
|   ---------------------------------------------------
|   APFS Volume Disk (Role):   disk5s1 (No specific role)
|   Name:                      Ext macOS (Case-insensitive)
|   Mount Point:               /
|   Capacity Consumed:         417911861248 B (417.9 GB)
|   FileVault:                 No

Jetzt weiß ich also, dass die VM auf disk5 sein sollte. Ich schaue weiter unten in die Ausgabe von diskutilund sehe:

+-> Volume disk5s4 8FF45FA5-EDB8-4812-947A-C1163BBDF5C4
    ---------------------------------------------------
    APFS Volume Disk (Role):   disk5s4 (VM)
    Name:                      VM (Case-insensitive)
    Mount Point:               Not Mounted
    Capacity Consumed:         10737463296 B (10.7 GB)
    FileVault:                 No

Viola! Es sollte disk5s4 als Auslagerungsspeicher gemountet werden. Also folgte ich Michael Golbans Antwort und ersetzte disk5s4alles, was er disk3s4in seinem spezifischen Beispiel verwendete. diskutil ap listZeigt nach einem Neustart an, dass es disk5s4richtig gemountet ist.

+-> Volume disk5s4 8FF45FA5-EDB8-4812-947A-C1163BBDF5C4
    ---------------------------------------------------
    APFS Volume Disk (Role):   disk5s4 (VM)
    Name:                      VM (Case-insensitive)
    Mount Point:               /private/var/vm
    Capacity Consumed:         10737463296 B (10.7 GB)
    FileVault:                 No

Zeigt auch vm_statNicht-0-Werte für Swapins und Swapouts an.

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                               15355.
Pages active:                           1504355.
Pages inactive:                         1006398.
Pages speculative:                       593600.
Pages throttled:                              0.
Pages wired down:                        695931.
Pages purgeable:                         217108.
"Translation faults":                  20908140.
Pages copy-on-write:                     566900.
Pages zero filled:                     14492420.
Pages reactivated:                      1136316.
Pages purged:                            693655.
File-backed pages:                      1424716.
Anonymous pages:                        1679637.
Pages stored in compressor:             1427995.
Pages occupied by compressor:            378113.
Decompressions:                          426681.
Compressions:                           3751860.
Pageins:                                2715810.
Pageouts:                                 14437.
Swapins:                                 438359.
Swapouts:                                917646.

Ich hatte eine ähnliche Erfahrung, aber mein Setup ist etwas ungewöhnlich. Ich habe:

  1. Ursprünglich ein Fusion Drive (128SSD+1TBHDD), bei dem ich die HDD gegen eine SSD eines Drittanbieters (Crucial MX500 (1TB)) getauscht habe. Und ja, ich habe das Fusion-Laufwerk nach dem Austausch neu erstellt. Jetzt bin ich also wieder beim ursprünglichen Fusion Drive mit 1,2 TB, aber bestehend aus zwei SSDs (beide APFS).
  2. Etwas mehr RAM als die meisten Systeme mit 32 GB (ursprünglich 16 GB, auf 32 GB aufgerüstet).
  3. Drei externe Laufwerke, 2 SSDs, die über USB 3.0 (AKA 3.1v1) verbunden sind, eines mit 500 GB (APFS) und das andere mit 256 GB (HFS+), und das dritte Laufwerk ist eine normale Festplatte mit 3 TB (HFS+), die ebenfalls über dasselbe verbunden ist USB-Bus.
  4. Mojave ausführen.

Nun, hier ist, wo/wann das Problem aufgetreten ist: Ich habe mich entschieden, die 256-GB-SSD in APFS zu konvertieren. Umbau hat gut geklappt. Keine Probleme. JEDOCH, sobald das fertig war, fing mein Überwachungstool (iStat) an, ein zusätzliches Laufwerk mit der Bezeichnung "VM" anzuzeigen. Ich war misstrauisch ... Ebenfalls einzigartig in meinem Fall: Ich betreibe virtuelle Maschinen mit Parallels. Wie gesagt, ich war neugierig, was dieses neue Laufwerk mit der Bezeichnung VM in meinem iStat-Menü macht ... Ich stocherte weiter herum und stellte fest, dass dies die Auslagerungsdatei sein sollte. Ich öffnete den Aktivitätsmonitor und zu meiner Überraschung war mein Speicher fast voll, und der Wert der Auslagerungsdatei lautete 0, was NICHT korrekt ist. OS X soll beginnen, Dinge auf das Auslagerungslaufwerk auszulagern, anstatt dass der Speicher ausgeht.

Ich hatte das Gefühl, dass dem Betriebssystem etwas fehlt, wenn es ein Volume in APFS konvertiert, und dass ein Neustart alles war, was ich brauchte, um die Dinge wieder in Ordnung zu bringen. Nun, in MEINEM Fall hat das funktioniert. Nach dem Neustart begann das System, wie es sollte, zur Auslagerungsdatei zurückzublättern, und iStat zeigte das "mysteriöse" VM-Laufwerk nicht mehr an. Und alle meine Laufwerke waren in ihren korrekten jeweiligen Dateisystemversionen.

Verzeihung. Ich weiß, dass dies wahrscheinlich nicht zur Lösung der ursprünglichen Frage beiträgt, aber es könnte etwas Licht auf das Innenleben des Problems werfen.

Macht es alle gut, Rapha.

Vielen Dank für diese Frage und Antworten! Ich habe monatelang nach einer Lösung für dieses Problem gesucht, bis ich auf diese Seite gestoßen bin.

Ich verwende einen iMac, der auf einer externen Thunderbolt-SSD gebootet wurde. Ich habe der Maschine neues Leben eingehaucht und möchte die Frontblende nicht abnehmen, um die Festplatte auszutauschen. Das Tolle an Thunderbolt ist, dass der Computer ein externes Laufwerk so behandelt, als wäre es intern angeschlossen.

Diese Antwort wurde von Lints Antwort geändert. Kredit an ihn für die Arbeit. Die Seite ließ mich seiner Antwort keinen Kommentar hinzufügen, also poste ich hier.

Einige Änderungen an seinem Skript vorgenommen:

  1. Ich habe einen Backup-Klon meines Betriebssystemlaufwerks, das auch ein VM-Volume hat. Lints Skript gab mir zwei VM-Ergebnisse zurück. Diese Änderung ermöglicht es Ihnen, den Festplattennamen Ihres Betriebssystems einzugeben, und das richtige VM-Volume wird zurückgegeben und bereitgestellt.

  2. Lints Skript sucht nach einem Schlafbild. Bei zwei Computern, auf die ich diesen Fix anwende, hat das Skript das Sleep-Image gefunden, obwohl die VM nicht gemountet war. Das Ergebnis war, dass das Skript die VM nicht gemountet hat.

  3. Ich habe die if-Anweisung entfernt, um nach einem gemounteten Volume zu suchen, und versuche einfach, das Volume 5 Mal zu mounten, egal was passiert. Wenn das Volume bereits gemountet ist, wird kein Schaden angerichtet und Sie erhalten eine Meldung, dass das Volume gemountet ist. Habe dies getan, weil auch ich Probleme mit dem Mounten mit dem Launchd-Daemon hatte.

  4. Echo-Anweisungen in eine Protokolldatei geschrieben, damit ich die Skriptausgabe beim Testen während eines Neustarts sehen konnte.

  5. Wenn Sie das Skript zum Testen ausführen, müssen Sie sudo sh mountvm.sh ausführen.

  6. Das VM-Volume wird deaktiviert, sobald sich ein Benutzer oder möglicherweise alle Benutzer abmelden. Ich habe den Launch-Daemon zu /Library/LaunchDaemons hinzugefügt, damit er als Root ausgeführt wird. Solange Sie sich nicht von Ihrem Benutzer abmelden, bleibt die VM gemountet. Wenn Sie den Computer neu starten, sollte das Skript die VM erneut bereitstellen.

Danke Lint! Und alle anderen, die geholfen haben, diese Frage zu beantworten! Ich habe jetzt einen Mac, der nicht abstürzt, weil der Speicher voll wird!

Ändern Sie die Variable OS_BOOT_NAME in den Namen der Festplatte, von der Sie booten.

#!/bin/bash
# Mount the APFS VM volume if it isn't already mounted
OS_BOOT_NAME="X"
echo $(date) > /Library/Logs/mountvm.log
VM_VOLUME=$(/usr/sbin/diskutil list | grep -A5 "APFS Volume $OS_BOOT_NAME " | grep "VM" | 

awk '{ print $7 }') 
echo "VM Volume is $VM_VOLUME"
echo "VM Volume is $VM_VOLUME" >> /Library/Logs/mountvm.log

for i in {1..5}
    do
        /usr/sbin/diskutil mount -mountPoint /private/var/vm/ $VM_VOLUME >> /Library/Logs/mountvm.log
                sleep 60
                echo "Mount Attempts: $i"
        echo "Mount Attempts: $i" >> /Library/Logs/mountvm.log
    done

exit 0

Mac OSX High Sierra ist eine Art Linux-Derivat, und viele Linux-Betriebssysteme empfehlen, Swap bei der Installation auf einer SSD zu deaktivieren, da der in einer Swap-Partition verwendete Speichertyp die magnetischen Medien der SSD auf potenziell destruktive Weise stark belastet. Ich würde also vermuten, dass High Sierra standardmäßig den Swap-Speicher auf SSDs deaktiviert. Meine bevorzugte Option ist, den Auslagerungsbereich auf einem separaten herkömmlichen Laufwerk zu installieren.

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

MacOS ist kein Linux-Derivat – tatsächlich ist das grundlegende Design älter als Linux. Sein Swap ist ziemlich anders - auch Swap auf Festplatte statt SSDS wird das System massiv verlangsamen.
Ich stimme Miller zu, dass es nicht ratsam ist, Swap auf Ihre primäre SSD zu legen. Swap auf jedem UNIX-System ist volatil und ständige Schreibvorgänge verursachen schließlich Probleme mit der SSD und Sektoren müssen aufgrund von ausgefallenen magnetischen Medien neu zugeordnet werden. Und wenn die Festplatte ausfällt, bootet Ihr System nicht. Eine nicht primäre SSD für den Austausch wäre definitiv viel schneller als eine herkömmliche externe Platte auf Plattenbasis und wäre der richtige Weg.
Was die linux<->macOS-Diskussion angeht: sind alles Derivate von Dennis Ritchies AT&T Unix. de.wikipedia.org/wiki/Unix