Перемещение своп-файлов к специализированному разделу в Snow Leopard

Я смог переместить своп-файлы виртуальной памяти Apple в специализированный раздел на моем жестком диске вплоть до сих пор. Техника, которую я использовал, описана в потоке на forums.macosxhints.com.

Однако с предварительным просмотром разработчика Snow Leopard, этот метод больше не работает. Кто-либо знает, как это могло быть сделано с новой ОС?

Обновление: Я отметил ответ dblu, как принято даже при том, что он не вполне работал, потому что он дал превосходные, подробные инструкции и потому что его предложение для использования plutil в конечном счете указанный меня в правильном направлении. Полное, рабочее решение отправляется здесь в вопросе, потому что у меня нет достаточной репутации для редактирования принятого ответа.

Обновление № 2: Измененный процедура для иллюстрирования метода ekl, который значительно упрощает все это путем избавления от необходимости промежуточный сценарий оболочки:

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

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

$ 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 (как предложено ZILjr) до запуска dynamic_pager. См. примечание № 1 для получения дополнительной информации о том, почему это необходимо. В следующем примере мой раздел называют 'Подкачкой', и я принял решение поместить своп-файлы в скрытый каталог на том разделе, названном '.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. Преобразуйте измененный plist назад в двоичный файл:

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

7. Перезапустите свой Mac. Если Вы сталкиваетесь с проблемой, переключаетесь на подробный режим запуска удержанием Команды-v сразу после звона запуска. Это позволит Вам видеть все сообщения запуска, которые появляются во время запуска. Если Вы сталкиваетесь с еще худшей проблемой (т.е. Вы никогда не видите экран входа в систему), удержите Команды вместо этого. Это загрузит компьютер в однопользовательском режиме (никакой графический UI, просто командная строка) и позволит Вам восстанавливать резервную копию 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 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

Когда все работает правильно, можно видеть вышеупомянутое сообщение пару раз только и затем большую часть "Сообщений" переикры регулировки. Это означает, что система действительно должна была ожидать раздела для загрузки, но в конце это было успешно.

31
задан 20.03.2017, 12:04

8 ответов

Примечание: См. (также), исправил/улучшил ответ в самом вопросе.


Следующее решение работало на меня:

Откройте терминал и скопируйте com.apple.dynamic_pager.plist, который Вы собираетесь изменить за секунду:

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

преобразуйте двоичный файл plist в xml:

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

и откройте его со своим любимым текстовым редактором

$ sudo vim com.apple.dynamic_pager.plist

это будет выглядеть примерно так:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 3 <plist version="1.0">
 4 <dict>
 5     <key>EnableTransactions</key>
 6     <true/>
 7     <key>HopefullyExitsLast</key>
 8     <true/>
 9     <key>Label</key>
10     <string>com.apple.dynamic_pager</string>
11     <key>OnDemand</key>
12     <false/>
13     <key>ProgramArguments</key>
14     <array>
15         <string>/sbin/dynamic_pager</string>
16         <string>-F</string>
17         <string>/private/var/vm/swapfile</string>
18     </array>
19 </dict>
20 </plist>

В строке 17 изменяют/private/var/vm/swapfile (например,/Volumes/partition2/swapfile), сохраняют и закрывают Вашего редактора (":x" сделает обоих в энергии).

преобразуйте plist файл назад в двоичный файл:

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

После перезагрузки Вашего Mac необходимо найти своп-файлы в каталоге, который Вы указали.

При столкновении с какими-либо проблемами, можно восстановить резервное копирование, с которым Вы создали в первом шаге:

$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{_bak,}
10
ответ дан 07.12.2019, 09:14

Можно использовать wait4path для ожидания объема для монтирования; иначе launchd перезапустит Ваш dynamic_pager_init сценарий много раз и пока он не сделает...

1
ответ дан 07.12.2019, 09:14

Возможно, мы можем использовать Xupport, чтобы сделать их грязное задание для нас :) http://www.applicorn.com/

Оптимизатор виртуальной памяти:

Измените местоположение файлов подкачки В Mac OS X, информация виртуальной памяти хранится в так называемых "Своп-файлах". Поскольку своп-файлы являются файлами наиболее интерактивной системы, имеет смысл помещать их на отдельный раздел. Рекомендуется сохранить файлы подкачки на первом разделе Вашего самого быстрого внутреннего жесткого диска. Рекомендуемый минимальный размер раздела должен быть лагером приблизительно 3 или 4 раз, чем физическая встроенная емкость памяти (например, 1 ГБ физической памяти = раздел подкачки на 4 ГБ). Рекомендации и инструкции для оптимальной производительности системы:

1. Повторно разделите свой жесткий диск с объемом подкачки как ПЕРВЫЙ раздел (использующий Установку Mac OS X DVD). ПРЕДУПРЕЖДЕНИЕ: ПОВТОРНОЕ РАЗДЕЛЕНИЕ ЖЕСТКОГО ДИСКА БУДЕТ EREASE ВСЕ СУЩЕСТВУЮЩИЕ ДАННЫЕ!

2. Восстановите свои системные данные или установите новую систему на системном разделе.

3. Начальная загрузка от системного раздела.

4. Если Вы хотите, чтобы Ваш объем подкачки был невидим для Средства поиска: • Запустите Xupport и выберите "Settings" • Включите "Выставочные скрытые файлы и папки" и перезапустите Средство поиска • Переименуйте объем подкачки от "подкачки" до ".swap" (Точка делает это невидимым для Средства поиска), · Отключите "Выставочные скрытые файлы и папки" и перезапустите Средство поиска снова

5. Выберите новый раздел подкачки под "Томом Подкачки". Затем нажмите кнопку "Set" для применения новых настроек местоположения файла подкачки (Требуемый перезапуск).

BTW, это работает на меня. Snow Leopard 10.6.2 MacBook Pro 2.4 ГГц, 4 ГБ Ram, HD на 500 ГБ

1
ответ дан 07.12.2019, 09:14

Я принял эту идею и взял ее немного далее путем обращения к стратегиям роста и восстановления.

Детали по http://www.crypticide.com/dropsafe/article/3848; я отправил бы ссылку на страницу проекта "dynamicpagerwrapper" GoogleCode, но блог говорит мне, что у меня нет достаточного количества точек репутации...

3
ответ дан 07.12.2019, 09:14

Это наиболее вероятно нежелательный ответ (так как я не могу прокомментировать после Diago), но почему действительно Вы настаиваете, что это даст маленькое увеличение производительности? Я имею, прошел обсуждение форумов яблока, и заключение состояло в том, что это не хорошая идея вообще. И я был очень стойким при отказе от него. Вы могли придумать данные, доказывающие, что, по крайней мере, для себя, или это - просто "чувство"?

С каждого раза, когда я использовал подкачку даже на Linux, назад 10 лет назад, и в наше время на человечности, я никогда не мог видеть улучшения на производительности. Моя причина желания его состояла в том, чтобы предотвратить проблемы со свободным пространством на OSX и, на Linux, для способности быть в спящем режиме. Это - вся подкачка, мне.

Но я, никогда не имею действительно провел более глубокое исследование или самостоятельно или в межсетях.

1
ответ дан 07.12.2019, 09:14

просто вопрос: почему не просто редактирование .plist добавления файла wait4path, вместо того, чтобы использовать промежуточное звено dynamic_pager_init ?

что-то вроде этого:

Править: как объяснено в комментарии e. James и мой после комментария, сразу после блока XML не хороши, оба, потому что существует ошибка (отсутствующий &&) и потому что только первый аргумент массива ProgramArguments это анализируется как программа для выполнения!

но.. (прокрутить вниз)

 ...
13     <key>ProgramArguments</key>
14     <array>
15         <string>/bin/wait4path</string>
16         <string>/Volumes/Swap/</string>
17         <string>/sbin/dynamic_pager</string>
18         <string>-F</string>
19         <string>/Volumes/Swap/.vm/swapfile</string>
20     </array>
 ...

конец несправедливости xml блок


этот блок XML должен работать вместо этого:

   ...
    13     <key>ProgramArguments</key>
    14     <array>
    15         <string>/bin/bash</string>
    16         <string>-c</string>
    17         <string>/bin/wait4path /Volumes/Swap/ &amp;&amp; /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
    18     </array>
     ...

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

Как это работает:

основа: выполнение wait4path /path && command средства это command выполняется только если wait4path концы и выходы без ошибок, и это происходит только когда /path доступный путь, таким образом, мы можем безопасно сказать dynamic_pager использовать тот объем для своп-файлов

1) как записано в launchd.plist страница справочника, ключи Program и ProgramArguments отображаются на execvp звоните, который означает, что все кроме первой строки в массиве рассматривают как аргумент в пользу первой строки в массиве, программа для выполнения;

2) как записано в bash страница справочника, существует a 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 в Терминале, но это дважды не заключается в кавычки в plist файле! (я предполагаю, потому что это уже объявляется как строка с надлежащим тегом),
* два & в строке должен быть изменен на &amp; в plist файле

PS: как всегда, продолжите двигаться на Ваш собственный риск, я не беру на себя ответственности за проблемы, у Вас может быть использование этой установки!

благодарит совместно использовать Вашу работу с нами

3
ответ дан 07.12.2019, 09:14

Это не ответ, но возможно очень полезное последующее дополнение. Apple предоставляет свободному plist редактору здесь PlistEdit Pro. Это позволяет Вам редактировать эти файлы безопасно. Взгляды, как будто Вы могли просто изменить спор со значением/private/var/vm/swapfile к чему-то как/Volumes/OtherDrive/vm/myswapfilename для перемещения файлов подкачки где-то в другом месте...

Снова я не протестировал это...

1
ответ дан 07.12.2019, 09:14

Я знаю, что это было некоторое время, так как эта статья была написана, но я думал, что добавлю свой собственный небольшой объект здесь для для тех, кто хочет сделать это также …

Я использовал вышеупомянутый прием для перемещения моих файлов подкачки прочь в другой внутренний диск (моим загрузочным диском является SSD с микросхемами MLC, таким образом перемещение vm прочь может сохранить продолжительность жизни). Так или иначе после создания нового объема у меня был объем Подкачки в Средстве поиска, которое я никогда не собираюсь использовать в самом Средстве поиска, таким образом, я решил сделать объем невидимым для Средства поиска. Вам нужен установленный Инструментарий Разработчика Apple. Затем введите:

/Developer/Tools/SetFile -a V /Volumes/Swap/

… и замена/Volumes/Swap с тем, что Вы назвали своим объемом. Средство поиска перезапуска и престо, больше никакого объема Подкачки в Средстве поиска!

2
ответ дан 07.12.2019, 09:14

Теги

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