Как я могу перемещать файлы подкачки виртуальной памяти на другой диск или раздел?

Примечание: Это

29 голосов | спросил e.James 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 12 Sep 2010 21:48:43 +0400 2010, 21:48:43

3 ответа


20

примечание: скопировано из SuperUser:

Для более старых версий OSX см. этот поток на форумах .macosxhints.com.

Кредит переходит на dblu для объяснения использования plutil, ZILjr для введения команды wait4path и ekl для упрощения всего, устраняя необходимость в промежуточном сценарии оболочки.

Полное решение:

1. Откройте терминал и создайте резервную копию динамического_памятника Apple по умолчанию:

$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}

2. Преобразование plist из двоичного в обычный XML:

$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

3. Откройте преобразованный plist с помощью выбранного текстового редактора. (Я использую pico, см. Ответ dblu для примера, используя vim):

$ sudo pico -w 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$
<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. Измените массив ProgramArguments (строки с 13 по 18), чтобы использовать команду оболочки wait4path до запуска dynamic_pager. См. Примечание №1 для получения подробной информации о том, почему это необходимо. В следующем примере мой раздел называется Swap, и я решил поместить swapfiles в скрытый каталог на этом разделе, называемый .vm , чтобы убедиться, что каталог, который вы указываете, фактически существует . XML должен выглядеть следующим образом:

<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. Сохраните plist и вернитесь к подсказке терминала. Используя pico, следующие команды:

<ctrl+o> to save the file
<enter>  to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit

6. Преобразовать измененный диск обратно в двоичный:

$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

7. Перезагрузите Mac. Если вы столкнулись с трудностями, переключитесь на подробный режим запуска, удерживая Command-v сразу же после звукового сигнала запуска. Это позволит вам увидеть все сообщения о запуске, которые появляются во время запуска. Если вы столкнулись с еще более серьезными проблемами (например, вы никогда не видите экран входа в систему), вместо этого удерживайте Command-s. Это приведет к загрузке компьютера в однопользовательском режиме (без графического интерфейса пользователя, просто командной строки) и позволит вам восстановить резервную копиюcom.apple.dynamic_pager.plist, который вы сделали на шаге 1.

8. Как только компьютер загрузится, запустите терминал и убедитесь, что файлы подкачки действительно были перемещены:

$ cd /Volumes/Swap/.vm
$ ls -l

Вы должны увидеть что-то вроде этого:

-rw-------  1 someUser  staff  67108864 18 Sep 12:02 swapfile0

9. Удалите старые файлы подкачки:

$ cd /private/var/vm
$ sudo rm swapfile*

10. Прибыль!

Примечание 1

Изменение аргументов dynamic_pager в plist без использования wait4path не всегда работает, и когда он терпит неудачу, он делает это очень эффектно. Проблема связана с тем, что dynamic_pager запускается очень рано в процессе запуска. Если ваш раздел подкачки еще не был установлен, когда динамическая_папка загружена (по моему опыту, это происходит в 99% случаев), тогда система будет подделывать свой путь. Он создаст символическую ссылку в каталоге /Volumes, которая имеет то же имя, что и ваш раздел подкачки, но указывает на местоположение swapfile по умолчанию (/private /var /vm). Затем, когда ваш реальный раздел подкачки монтируется, ему будет присвоено имя Swap 1 (или YourDriveName 1)). Вы можете увидеть проблему, открыв терминал и указав содержимое своего каталога /томов:

$ cd /Volumes
$ ls -l

Вы увидите что-то вроде этого:

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

Обратите внимание, что этот сбой может быть very трудно различимым. Если бы вы проверили файлы подкачки, как показано на шаге 12, , вы все равно увидите их ! Символическая ссылка заставит вас казаться, что ваши файлы подкачки были перемещены, даже если они фактически были сохранены в местоположении по умолчанию.

Примечание 2

Мне изначально не удалось заставить это работать в Snow Leopard, потому что com.apple.dynamic_pager.plist хранился в двоичном формате. Я сделал копию исходного файла и открыл его с помощью редактора свойств Apple (доступного с помощью Xcode), чтобы внести изменения, но этот процесс добавил некоторые расширенные атрибуты в файл plist, из-за чего система проигнорировала его и просто использовала значения по умолчанию , Как отметил dblu, использование plutil для преобразования файла в обычный XML работает как шарм.

Примечание 3

Вы можете проверить приложение Консоль, чтобы увидеть какие-либо сообщения, на которые динамический_pager_init echos на экран. Если вы видите, что следующие строки повторяются снова и снова, возникает проблема с настройкой. Я столкнулся с этими сообщениями, потому что забыл создать каталог «.vm», который я указал в 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

Когда все работает правильно, вы можете увидеть это сообщение пару раз, а затем больше не отправлять сообщения «Throttling respawn». Это означает, что системе пришлось ждать загрузки раздела, но в итоге это было успешно.

Исключить путь из Time Machine

В OS X 10.7 и позже вы можете сделать это с помощью tmutil . Пример:

sudo tmutil addexclusion -p /Volumes/Swap/.vm

В этом примере, чтобы просмотреть результат:

tmutil isexcluded /Volumes/Swap && tmutil isexcluded /Volumes/Swap/.vm

Если объем, используемый для подкачки, не нужно индексировать

Используйте mdutil . Например, чтобы отключить, удалите хранилище:

sudo mdutil -i off /Volumes/Swap && sudo mdutil -E /Volumes/Swap

ответил e.James 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 12 Sep 2010 22:12:39 +0400 2010, 22:12:39
4

Мне не удалось установить постоянное системное решение для загрузки, так как 10.10 больше не использует /etc/.rc при загрузке, а метод com.apple.dynamic_pager.plist потерпел неудачу .... однако ...

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

изменяет сохраненный префикс, о котором сообщает

sysctl vm

в течение всего сеанса, и он выживает при перезагрузке.

это может быть завершено как команда unix в текстовый файл:

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

и запустите при входе в систему.

ответил aramis 11 Mayam15 2015, 00:12:56
-1

Простое решение:

http://www.macupdate.com/app/mac/10771/своп- средства перемещения

SwapRelocator 1.1.2 отлично работает на Maverick!

Используйте (например) Tinker Tool System, чтобы позволить томам монтироваться до входа в систему, что решает единственную проблему, с которой я столкнулся.

(Спасибо, Филиппи, я могу, наконец, перенести своп из зеркального загрузочного тома в чередуемый кэш-тома (все SSD))

ответил BKE 26 FriEurope/Moscow2014-12-26T20:49:43+03:00Europe/Moscow12bEurope/MoscowFri, 26 Dec 2014 20:49:43 +0300 2014, 20:49:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132