Tôi đã có thể di chuyển các bộ nhớ hoán đổi bộ nhớ ảo của Apple sang một phân vùng chuyên dụng trên ổ cứng cho đến bây giờ. Kỹ thuật tôi đang sử dụng được mô tả trong một chủ đề trên forum.macosxhints.com.
Tuy nhiên, với bản xem trước dành cho nhà phát triển của Snow Leopard, phương pháp này không còn hoạt động. Có ai biết làm thế nào nó có thể được thực hiện với hệ điều hành mới?
Cập nhật: Tôi đã đánh dấu câu trả lời của dblu là được chấp nhận mặc dù nó không hoạt động tốt vì anh ấy đã đưa ra hướng dẫn chi tiết, xuất sắc và vì đề nghị sử dụng của anh ấy plutil
cuối cùng đã chỉ cho tôi đi đúng hướng. Giải pháp hoàn chỉnh, hiệu quả được đăng ở đây trong câu hỏi vì tôi không đủ uy tín để chỉnh sửa câu trả lời được chấp nhận.
Cập nhật # 2: Thay đổi quy trình để minh họa kỹ thuật của ekl , giúp đơn giản hóa toàn bộ mọi thứ bằng cách loại bỏ sự cần thiết của một tập lệnh shell trung gian:
Giải pháp hoàn chỉnh:
1.
Mở Terminal và tạo một bản sao lưu của Dynamic_pager.plist mặc định của Apple:
$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}
2.
Chuyển đổi số nguyên từ nhị phân sang XML đơn giản:
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
3.
Mở bảng chuyển đổi với trình soạn thảo văn bản của bạn lựa chọn. (Tôi sử dụng pico
, xem câu trả lời của dblu để biết ví dụ sử dụng vim
):
$ sudo pico -w com.apple.dynamic_pager.plist
Nó sẽ trông như sau:
<?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.
Sửa đổi mảng ProgramArgument (dòng 13 đến 18) để sử dụng lệnh shell Wait4path (như được đề xuất bởi ZILjr ) trước khi khởi chạy Dynamic_pager . Xem ghi chú số 1 để biết chi tiết về lý do tại sao điều này là cần thiết. Trong ví dụ sau, phân vùng của tôi được gọi là 'Hoán đổi' và tôi đã chọn đặt các tệp hoán đổi trong một thư mục ẩn trên phân vùng đó, được gọi là '.vm', hãy chắc chắn rằng thư mục bạn chỉ định thực sự tồn tại . XML sẽ trông như sau:
<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.
Lưu lại bảng và quay lại dấu nhắc thiết bị đầu cuối. Sử dụng pico
, các lệnh sẽ là:
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6.
Chuyển đổi plist đã sửa đổi trở lại nhị phân:
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7.
Khởi động lại máy Mac của bạn. Nếu bạn gặp rắc rối, hãy chuyển sang chế độ khởi động dài dòng bằng cách nhấn giữ Command-v ngay sau tiếng chuông khởi động. Điều này sẽ cho phép bạn xem tất cả các thông báo khởi động xuất hiện trong khi khởi động. Nếu bạn gặp phải rắc rối thậm chí còn tồi tệ hơn (tức là bạn không bao giờ thấy màn hình đăng nhập), hãy giữ phím Command thay vào đó. Điều này sẽ khởi động máy tính ở chế độ một người dùng (không có UI đồ họa, chỉ là một dấu nhắc lệnh) và cho phép bạn khôi phục bản sao lưu của com.apple.dynamic_pager.plist mà bạn đã thực hiện ở bước 1.
8.
Khi máy tính khởi động, kích hoạt Terminal và xác minh rằng các tệp hoán đổi đã thực sự được di chuyển:
$ cd /Volumes/Swap/.vm
$ ls -l
Bạn sẽ thấy một cái gì đó như thế này:
-rw------- 1 someUser staff 67108864 18 Sep 12:02 swapfile0
9.
Xóa các tập tin hoán đổi cũ:
$ cd /private/var/vm
$ sudo rm swapfile*
10.
Lợi nhuận!
Lưu ý 1
Sửa đổi các đối số thành Dynamic_pager trong phần chính mà không sử dụng wait4path
không phải lúc nào cũng hoạt động và khi thất bại, nó sẽ thực hiện theo cách im lặng ngoạn mục. Vấn đề bắt nguồn từ thực tế là Dynamic_pager được khởi chạy từ rất sớm trong quá trình khởi động. Nếu phân vùng trao đổi của bạn chưa được gắn kết khi tải động_pager lần đầu tiên (theo kinh nghiệm của tôi, điều này xảy ra 99% thời gian), thì hệ thống sẽ giả mạo theo cách của nó. Nó sẽ tạo một liên kết tượng trưng trong thư mục / Tập tin có cùng tên với phân vùng trao đổi của bạn, nhưng trỏ lại vị trí hoán đổi mặc định (/ private / var / vm). Sau đó, khi phân vùng trao đổi thực tế của bạn gắn kết, nó sẽ được đặt tên Swap 1
(hoặc YourDriveName 1
). Bạn có thể thấy vấn đề bằng cách mở Terminal và liệt kê nội dung của thư mục / Tập của bạn:
$ cd /Volumes
$ ls -l
Bạn sẽ thấy một cái gì đó như thế này:
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 -> /
Lưu ý rằng thất bại này có thể rất khó phát hiện. Nếu bạn đã kiểm tra các hoán đổi như tôi trình bày ở bước 12, bạn vẫn sẽ thấy chúng ! Liên kết tượng trưng sẽ làm cho nó có vẻ như các tệp hoán đổi của bạn đã được di chuyển, mặc dù chúng thực sự được lưu trữ ở vị trí mặc định.
Lưu ý 2
Ban đầu tôi không thể làm cho nó hoạt động trong Snow Leopard vì com.apple.dynamic_pager.plist được lưu trữ ở định dạng nhị phân. Tôi đã tạo một bản sao của tệp gốc và mở nó bằng Trình chỉnh sửa danh sách tài sản của Apple (có sẵn với Xcode) để thực hiện các thay đổi, nhưng quá trình này đã thêm một số thuộc tính mở rộng vào tệp plist khiến hệ thống bỏ qua nó và chỉ sử dụng mặc định . Như dblu đã chỉ ra, sử dụng plutil
để chuyển đổi tệp thành XML đơn giản hoạt động như một nét quyến rũ.
Lưu ý 3
Bạn có thể kiểm tra ứng dụng Console để xem bất kỳ thông báo nào động_pager_init vang lên màn hình. Nếu bạn thấy các dòng sau lặp đi lặp lại nhiều lần, có một vấn đề với việc thiết lập. Tôi gặp phải những thông báo này vì tôi quên tạo thư mục '.vm' mà tôi đã chỉ định trong 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
Khi mọi thứ đều hoạt động bình thường, bạn chỉ có thể thấy thông báo trên một vài lần, và sau đó không còn tin nhắn "Hồi sinh hồi hộp" nữa. Điều này có nghĩa là hệ thống đã phải chờ phân vùng tải, nhưng cuối cùng nó đã thành công.
wait4path
giải pháp không , nhờ vào những gì Applicorn Xupport sửa đổi cho tôi. Tôi sẽ đăng một câu trả lời đầy đủ khi tôi tìm ra cách, nhưng rút gọn là thay đổi đối số chương trình cuối cùng thành đường dẫn mới (ví dụ <string>/Volumes/swap/.vm/swapfile</string>
), thay đổi OnDemand
khóa thành <true/>
và thêm StartOnMount
khóa vào cuối bằng một giá trị của <true/>
. PS Giải pháp này hoạt động tốt trong Lion (ít nhất là đối với tôi).
StartOnMount
lá cờ đã được bổ sung trong 10,5 theo: mactech.com/articles/mactech/Vol.25/25.10/...