До сих пор я мог перемещать файлы подкачки виртуальной памяти Apple в выделенный раздел на моем жестком диске. Техника, которую я использовал, описана в ветке на forums.macosxhints.com.
Однако с предварительной версией Snow Leopard для разработчиков этот метод больше не работает. Кто-нибудь знает, как это можно сделать с новой ОС?
Обновление: я отметил ответ dblu как принятый, хотя он не вполне сработал, потому что он дал превосходные, подробные инструкции и потому что его предложение использовать в plutil
конечном итоге указало мне правильное направление. Полное, рабочее решение размещено здесь в вопросе, потому что у меня недостаточно репутации, чтобы редактировать принятый ответ.
Обновление № 2: Изменена процедура, чтобы проиллюстрировать технику 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.
Откройте преобразованный список с помощью вашего текстового редактора. (Я использую 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 оболочки (как это было предложено ZILjr ) перед запуском dynamic_pager. См. Примечание № 1, чтобы узнать, почему это необходимо. В следующем примере мой раздел называется «Swap», и я решил поместить файлы подкачки в скрытый каталог этого раздела с именем «.vm», чтобы убедиться, что указанный вами каталог действительно существует . XML должен выглядеть следующим образом:
<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.
Сохраните plist и вернитесь к терминалу. Используя pico
, команды будут:
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6.
Преобразовать измененный plist обратно в двоичный файл:
$ 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 запускается очень рано в процессе запуска. Если ваш раздел подкачки еще не был смонтирован при первой загрузке dynamic_pager (по моему опыту, это происходит в 99% случаев), тогда система будет фальсифицирована. Он создаст символическую ссылку в вашем каталоге / Volumes, имя которой совпадает с именем вашего раздела подкачки, но указывает на расположение файла подкачки по умолчанию (/ private / var / vm). Затем, когда ваш текущий раздел подкачки монтируется, ему будет присвоено имя Swap 1
(или YourDriveName 1
). Вы можете увидеть проблему, открыв Терминал и перечислив содержимое вашего каталога / Volumes:
$ 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 -> /
Обратите внимание, что этот сбой может быть очень трудно обнаружить. Если бы вы проверили файлы подкачки, как я покажу в шаге 12, вы все равно бы их увидели ! Символическая ссылка создаст впечатление, что ваши файлы подкачки были перемещены, даже если они на самом деле хранятся в расположении по умолчанию.
Заметка 2
Первоначально я не смог заставить это работать в Snow Leopard, потому что com.apple.dynamic_pager.plist хранился в двоичном формате. Я сделал копию исходного файла и открыл его с помощью редактора списков свойств Apple (доступного с Xcode), чтобы внести изменения, но этот процесс добавил некоторые расширенные атрибуты в файл plist, которые заставили систему игнорировать его и просто использовать значения по умолчанию , Как указал dblu, использование plutil
для преобразования файла в обычный XML работает как чудо.
Заметка 3
Вы можете проверить консольное приложение, чтобы увидеть любые сообщения, которые dynamic_pager_init выводят на экран. Если вы видите, что следующие строки повторяются снова и снова, есть проблема с настройкой. Я столкнулся с этими сообщениями, потому что я забыл создать каталог .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
Когда все работает должным образом, вы можете увидеть вышеупомянутое сообщение только пару раз, и тогда больше не будет сообщений «Возобновление дросселирования». Это означает, что система должна была ждать загрузки раздела, но в итоге она прошла успешно.
источник
wait4path
нерешительное решение, благодаря чему приложение Applicorn Xupport изменен для меня. Я опубликую полный ответ, как только выясню, как это сделать, но если коротко, то нужно заменить последний аргумент программы просто на новый путь (например<string>/Volumes/swap/.vm/swapfile</string>
, изменитьOnDemand
ключ<true/>
и добавитьStartOnMount
в конец ключ со значением). из<true/>
. PS Это решение отлично работает в Lion (для меня, по крайней мере).StartOnMount
Флаг был добавлен в соответствии с 10.5: mactech.com/articles/mactech/Vol.25/25.10/...Ответы:
ПРИМЕЧАНИЕ . См. (Также) исправленный / улучшенный ответ в самом вопросе.
Следующее решение сработало для меня:
Откройте терминал и создайте резервную копию com.apple.dynamic_pager.plist, который вы собираетесь изменить за секунду:
преобразовать двоичный plist в xml:
и откройте его в вашем любимом текстовом редакторе
это будет выглядеть примерно так:
В строке 17 измените / private / var / vm / swapfile (например, / Volumes / partition2 / swapfile), сохраните и закройте ваш редактор (": x" сделает оба в vim).
преобразовать файл plist обратно в двоичный файл:
После перезагрузки Mac вы должны найти файлы подкачки в указанном вами каталоге.
Если у вас возникнут какие-либо проблемы, вы можете восстановить резервную копию, созданную на первом шаге, с помощью:
источник
plutil
для конверсий. Я разместил полное решение в вопросе (так как у меня недостаточно представителей, чтобы добавить его к вашему ответу). См. Мою заметку № 1 для подробного описания проблем, с которыми я столкнулся, просто изменив список.Я принял эту идею и развил ее немного дальше, рассматривая стратегии роста и освоения.
Подробности на http://www.crypticide.com/dropsafe/article/3848 ; Я бы опубликовал ссылку на страницу проекта GoogleCode "dynamicpagerwrapper", но блог говорит мне, что у меня недостаточно репутационных очков ...
источник
просто вопрос: почему бы просто не отредактировать добавление файла .plist
wait4path
вместо использования промежуточногоdynamic_pager_init
?что-то вроде этого:
РЕДАКТИРОВАТЬ: как объяснено в комментарии e.James и моем следующем комментарии, сразу следующий блок XML не годится, и потому, что есть ошибка (отсутствует &&), и потому что только первый аргумент массива
ProgramArguments
анализируется как программа для запуска !но .. (прокрутите вниз)
конец неправильного блока xml
этот блок XML должен работать вместо:
пожалуйста, имейте в виду, что у меня все еще не было достаточно времени, чтобы безопасно попробовать этот параметр, но я попытался запустить различные другие команды оболочки, запущенные таким же образом, и все должно работать как положено
Как это работает:
base: executing
wait4path /path && command
означает, чтоcommand
запускается, только еслиwait4path
заканчивается и завершается без ошибок, и это происходит только тогда, когда/path
есть доступный путь, поэтому мы можем с уверенностью сказать,dynamic_pager
использовать этот том для файлов подкачки1) как написано в
launchd.plist
manpage, ключиProgram
иProgramArguments
отображаются наexecvp
вызов, это означает, что все, кроме первой строки в массиве, рассматривается как аргумент для первой строки в массиве, запускаемой программы;2) как написано в
bash
manpage, естьbash -c <string>
опция для запуска строки, переданной как команды1 + 2 = 3) что происходит с использованием этой командной строки в launchd plist ??
/bin/bash -c "wait4path /Volumes/Swap/ && /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile"
/bin/bash
запускаемая программа,-c
первый аргумент и строка в двойных кавычках второй аргументЯ предполагаю, что оно должно работать точно так же, как ваше решение, без промежуточного скрипта:
launchd
запустит сервис, который будет ждать заданного пути, а затем запуститdynamic_pager
..Обратите внимание, что:
* строка, которую вы хотите выполнить, должна быть заключена в двойные кавычки, если вы запускаете
bash -c
в Terminal, но это не двойные кавычки в файле plist! (я думаю, потому что это уже объявлено как строка с соответствующим тегом)* два
&
в строке должны быть изменены&
в файл plistPS: как всегда, действуйте на свой страх и риск, я не несу ответственности за проблемы, которые могут возникнуть при использовании этого параметра!
спасибо, что поделились с нами своей работой
источник
ProgramArguments
массив более одной программы , но это, безусловно, стоит того. Вы пробовали это?:)
Я знаю, что прошло много времени с тех пор, как была написана эта статья, но я подумал, что я бы добавил сюда свой собственный маленький пункт для тех, кто хочет сделать это ...
Я использовал вышеописанный трюк, чтобы переместить мои файлы подкачки на другой внутренний диск (мой загрузочный диск - SSD с микросхемами MLC, поэтому отключение vm может сохранить ожидаемый срок службы). В любом случае, после создания нового тома у меня был том подкачки в Finder, который я никогда не собираюсь использовать в самом Finder, поэтому я решил сделать том невидимым для Finder. Вам нужно установить Apple Developer Toolkit. Затем введите:
… И замените / Volumes / Swap на то, что вы назвали своим томом. Перезапустите Finder и нажмите «Престо», больше не меняйте громкость в Finder!
источник
Вы можете использовать wait4path для ожидания монтирования тома; в противном случае launchd будет перезапускать ваш скрипт dynamic_pager_init снова и снова, пока не произойдет ...
источник
wait4path
вместоif
/grep
комбинации, и это довольно хорошо очищает вещи. Спасибо за совет.Может быть, мы можем использовать Xupport, чтобы сделать эту грязную работу для нас :) http://www.applicorn.com/
Оптимизатор виртуальной памяти:
Изменение расположения файлов подкачки В Mac OS X информация о виртуальной памяти хранится в так называемых «файлах подкачки». Поскольку файлы подкачки являются наиболее интерактивными системными файлами, имеет смысл поместить их в отдельный раздел. Рекомендуется хранить файлы подкачки в первом разделе вашего самого быстрого внутреннего жесткого диска. Рекомендуемый минимальный размер раздела должен быть примерно в 3 или 4 раза больше размера физической встроенной памяти (например, 1 ГБ физической памяти = 4 ГБ раздела подкачки). Рекомендации и инструкции по оптимальной производительности системы:
1. Переразделите жесткий диск разделом подкачки как ПЕРВЫЙ раздел (используя установочный DVD Mac OS X). ВНИМАНИЕ: ПЕРЕЗАГРУЗКА ЖЕСТКОГО ДИСКА БУДЕТ УДАЛИТЬ ВСЕ ДАННЫЕ!
2. Восстановите системные данные или установите новую систему в системный раздел.
3. Загрузиться с системного раздела.
4. Если вы хотите, чтобы ваш том подкачки был невидим для Finder: • Запустите Xupport и выберите «Настройки» • Включите «Показать скрытые файлы и папки» и перезапустите Finder • Переименуйте том подкачки с «swap» на «.swap» (Точка делает его невидимым для Finder) • Отключите «Показать скрытые файлы и папки» и перезапустите Finder снова
5. Выберите новый раздел подкачки в разделе «Том хранилища подкачки». Затем нажмите кнопку «Установить», чтобы применить новые настройки местоположения файла подкачки (требуется перезагрузка).
Кстати, это работает для меня. Snow Leopard 10.6.2 @ Macbook Pro 2,4 ГГц, 4 ГБ оперативной памяти, 500 ГБ HD
источник
Скорее всего, это нежелательный ответ (поскольку я не могу комментировать после Diago), но почему вы действительно настаиваете, что это даст небольшой прирост производительности? Я прошел обсуждение на яблочных форумах и пришел к выводу, что это не очень хорошая идея. И я очень сопротивлялся, отказываясь от него. Не могли бы вы представить данные, доказывающие это хотя бы для себя, или это просто «чувство»?
С тех пор, как я использовал swap даже в Linux, 10 лет назад, а в настоящее время в Ubuntu, я никогда не видел улучшений в производительности. Моя причина этого была в том, чтобы предотвратить проблемы со свободным пространством в OSX и в Linux для возможности перехода в спящий режим. Это все обмен для меня.
Но я никогда не проводил более глубоких исследований ни самостоятельно, ни в сети.
источник
Это не ответ, но, возможно, очень полезное дополнение. Apple предоставляет бесплатный редактор списков рассылки PlistEdit Pro . Это позволяет вам безопасно редактировать эти файлы. Похоже, вы могли бы просто изменить аргумент со значением / private / var / vm / swapfile на что-то вроде / Volumes / OtherDrive / vm / myswapfilename, чтобы переместить файлы подкачки куда-то еще ...
Опять я не проверял это ...
источник