Я міг перенести свопфілі віртуальної пам’яті Apple на спеціальний розділ на своєму жорсткому диску до цього часу. Метод, який я використовую, описаний у темі на forums.macosxhints.com.
Однак із попереднім попереднім переглядом Snow Leopard цей метод більше не працює. Хтось знає, як це можна зробити з новою ОС?
Оновлення: я відзначив відповідь dblu як прийняту, хоча це не дуже спрацювало, тому що він дав чудові, детальні вказівки і тому, що його пропозиція використовувати в plutil
кінцевому підсумку вказала на мене в правильному напрямку. Повне, робоче рішення розміщене тут у запитанні, оскільки мені не вистачає репутації, щоб редагувати прийняту відповідь.
Оновлення №2: Змінено процедуру ілюстрації техніки ekl , яка значно спрощує все, усуваючи необхідність проміжного сценарію оболонки:
Повне рішення:
1.
Відкрийте термінал і зробіть резервну копію за замовчуванням Apple_mager.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), щоб використовувати команду shell4path shell (як запропонував ZILjr ) перед запуском динамического_pager. Детальну інформацію про те, чому це необхідно, див. У примітці №1. У наступному прикладі мій розділ називається "Зміна", і я вирішив помістити свопфіли в приховану папку на цьому розділі під назвою ".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.
Збережіть список і поверніться до підказки терміналу. Використовуючи 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
Змінювати аргументи на динамичний_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". Це означає, що системі довелося чекати завантаження розділу, але врешті-решт це було успішно.
wait4path
рішення, завдяки тому, що заявляє Xupport для мене модифікований. Я опублікую повну відповідь, як тільки зрозумію, як це зробити, але недолік цього - змінити останній аргумент програми на новий шлях (наприклад <string>/Volumes/swap/.vm/swapfile</string>
), змінити OnDemand
ключ <true/>
і додати StartOnMount
ключ до кінця зі значенням з <true/>
. PS Це рішення відмінно працює у Леві (як мінімум, для мене).
StartOnMount
Прапор був доданий відповідно до 10.5: mactech.com/articles/mactech/Vol.25/25.10 / ...