Як я можу перемістити файли для заміни віртуальної пам'яті на інший диск або розділ?


33

Примітка. Це питання, яке я задав на SuperUser деякий час тому. Я його повторно розміщую тут, тому що думаю, що він тут належить.

За замовчуванням Mac OS X зберігає свої файли підкачки в /private/var/vm/. Я хотів би розмістити файли свопу в іншому місці. Як це можна зробити?


Додатковий розгляд /private/var/vm/sleepimageу програмі Super User: Чи слід символізувати мій / private / var / vm dir до іншого тома в OS X Lion? (2011-09-20) - є відповідь, яка рекомендує не використовувати однаковий окремий том як для зовнішніх файлів, так і для режиму сну.
Грем Перрін

dynamicpagerwrapper ( Джерело: dinamički_pager_wrapper ) - обгортка продуктивності для / sbin / dynamic_pager на OSX
Грем Перрін

Відповіді:


23

Примітка: скопійовано з SuperUser:

Для старих версій OSX дивіться цю тему на forums.macosxhints.com.

Заслуга dblu для пояснення використання plutil, ZILjr для введення wait4pathкоманди і EKL для спрощення все це за рахунок усунення необхідності в проміжному сценарії оболонки.

Повне рішення:

1. Відкрийте термінал і зробіть резервну копію за замовчуванням на програмі динамичного_пагер.plist Apple:

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

2. Перетворіть список із бінарного в звичайний 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), щоб використовувати команду wait4pathshell перед запуском динамического_пагера. Детальну інформацію про те, чому це необхідно, див. У примітці №1. У наступному прикладі називається мій розділ Swap, і я вирішив помістити свопі файли в приховану папку на цьому розділі, який називається .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. Збережіть список і поверніться до підказки терміналу. Використовуючи 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. Як тільки комп'ютер завантажиться, запустіть термінал і переконайтеся, що файли swap дійсно переміщені:

$ 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

Змінювати аргументи на динамичний_pager у плісті без використання wait4pathне завжди працює, а коли він не працює, це робить ефектно безшумно. Проблема випливає з того, що dynam_pager запускається дуже рано в процесі запуску. Якщо ваш розділ swap ще не змонтований під час першого завантаження динамичного_пагера (на мій досвід, це трапляється 99% часу), тоді система пройде підробку. Це створить символічне посилання у вашому каталозі / Volumes, яке має те саме ім’я, що і ваш розділ swap, але вказує на розташування swapfile за замовчуванням (/ private / var / vm). Потім, коли ваш фактичний swap-розділ змонтується, йому буде надано ім’я 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 -> /

Зауважте, що цю невдачу можна помітити дуже важко. Якби ви перевіряли наявність свопфілів, як я показую на кроці 12, ви б їх все одно побачили ! Символічне посилання виглядає так, ніби ваші свопфіли були переміщені, навіть якщо вони фактично зберігаються у стандартному місці.

Примітка 2

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

Примітка 3

Ви можете перевірити додаток Console, щоб побачити будь-які повідомлення, які в динамічному звуку перегукуються на екран. Якщо ви бачите, що наступні рядки повторюються знову і знову, виникає проблема з налаштуванням. Я наткнувся на ці повідомлення, тому що забув створити каталог ".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". Це означає, що системі довелося чекати завантаження розділу, але врешті-решт це було успішно.

Виключіть шлях із машини часу

В 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


Наступного разу просто зв’яжіть питання / відповідь, біля кожної відповіді є кнопка "посилання". ;)
Мартін Маркончіні

2
В самому верху цього питання є посилання на питання SuperUser. Я не посилався безпосередньо на відповідь "" на SuperUser, тому що він побудований з частин кількох інших відповідей. Однак я додав посилання на кожну часткову відповідь (використовуючи зручну кнопку "посилання") у другому абзаці цієї відповіді. Скільки ще посилань вам потрібно? ;)
e.James

2
Мені подобається, що вона тут… я весь час посилаюсь на неї
alex grey

Мені це не вдається під 10.10.3 - він, здається, не використовує пліст.
араміс

2
Відповідно до El Capitan, спроба очистити своп заборонена новою системою захисту цілісності. /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist: Операція заборонена, якщо Захист цілісності системи включений. Завантажте розділ відновлення, а потім виберіть Конфігурація безпеки з меню Утиліти. Ви можете зняти прапорці Enforce Protection Integrity Protection (Захистити цілісність системи), натиснути кнопку «Застосувати конфігурацію» та перезапустити.
Meetai.com

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

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


-1

Просте рішення:

http://www.macupdate.com/app/mac/10771/swap-relocator

SwapRelocator 1.1.2 відмінно працює на Maverick!

Використовуйте (наприклад) Систему інструментів Tinker, щоб дозволити збільшити обсяги перед входом у систему, що вирішує єдину проблему, з якою я стикався.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.