Làm cách nào tôi có thể di chuyển các tệp hoán đổi bộ nhớ ảo sang một ổ đĩa hoặc phân vùng khác?


33

lưu ý: Đây là một câu hỏi mà tôi đã hỏi trên SuperUser trước đây. Tôi đang đăng lại nó ở đây vì tôi nghĩ nó thuộc về nơi này.

Theo mặc định, Mac OS X lưu trữ các tệp hoán đổi của nó trong /private/var/vm/. Tôi muốn đặt các tập tin trao đổi ở một vị trí khác nhau. Nó được hoàn thiện bằng cách nào?


Xem xét bổ sung /private/var/vm/sleepimagetrong Siêu người dùng: Tôi có nên liên kết thư mục / private / var / vm của mình với một tập khác trong OS X Lion không? (2011-09-20) - có một câu trả lời khuyên bạn không nên sử dụng cùng một âm lượng riêng cho cả tệp hoán đổi bên ngoài và chế độ ngủ.
Graham Perrin

Dynamicpagerwrapper ( nguồn: Dynamic_pager_wrapper ) - trình bao bọc hiệu năng cho / sbin / Dynamic_pager trên OSX
Graham Perrin

Câu trả lời:


23

lưu ý: được sao chép từ SuperUser:

Đối với các phiên bản cũ hơn của OSX, xem chủ đề này trên forum.macosxhints.com.

Tín dụng đến dblu để giải thích việc sử dụng plutil, ZILjr để giới thiệuwait4path lệnh và ekl để đơn giản hóa toàn bộ 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 bạn 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 wait4pathlệnh shell 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 Swapvà 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 .vm là 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/ &amp;&amp;
/sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
</array>

5. Lưu số nguyên 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 nhấn giữ Command-s. Đ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, hãy khởi động 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 wait4pathkhô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 Dynamic_pager được tải 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ụngplutil để 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.

Loại trừ đường dẫn từ Time Machine

Trong OS X 10.7 trở lên, bạn có thể thực hiện việc này với tmutil . Thí dụ:

sudo tmutil addexclusion -p /Volumes/Swap/.vm

Ví dụ đó, để xem lại kết quả:

tmutil isexcluded /Volumes/Swap && tmutil isexcluded /Volumes/Swap/.vm

Nếu khối lượng được sử dụng để trao đổi không cần phải được lập chỉ mục

Sử dụng mdutil . Ví dụ, để tắt rồi xóa cửa hàng:

sudo mdutil -i off /Volumes/Swap && sudo mdutil -E /Volumes/Swap


Lần tới, chỉ cần liên kết câu hỏi / câu trả lời, có một nút liên kết của Wikipedia bên cạnh mỗi câu trả lời. ;)
Martin Marconcini

2
Có một liên kết đến câu hỏi SuperUser ở đầu câu hỏi này. Tôi không liên kết trực tiếp đến câu trả lời "the" trên SuperUser vì nó được xây dựng từ các phần của một số câu trả lời khác. Tuy nhiên, tôi đã thêm các liên kết vào từng câu trả lời một phần (sử dụng nút "liên kết" tiện dụng đó) trong đoạn thứ hai của câu trả lời này. Bạn muốn thêm bao nhiêu liên kết? ;)
e.James

2
Tôi thích nó ở đây, tôi đã tham khảo nó mọi lúc ..
alex Gray

Điều này không thành công đối với tôi dưới 10.10.3 - dường như không sử dụng số nguyên.
aramis

2
Theo El Capitan, việc cố gắng xóa trao đổi không được phép bởi Bảo vệ toàn vẹn hệ thống mới. / System / L Library / LaunchDaemons / com.apple.dynamic_pager.plist: Hoạt động không được phép trong khi Bảo vệ toàn vẹn hệ thống được tham gia <br> Khởi động vào phân vùng phục hồi, sau đó chọn Cấu hình bảo mật từ menu Tiện ích. Bạn có thể bỏ chọn Thực thi Bảo vệ toàn vẹn hệ thống, nhấp vào Áp dụng cấu hình và khởi động lại.
Meetai.com

4

Tôi đã không thể thiết lập giải pháp khởi động hệ thống vĩnh viễn, vì 10.10 không còn sử dụng /etc/.rc khi khởi động và phương thức com.apple.dynamic_pager.plist đã thất bại .... tuy nhiên ...

sudo mkdir /Volumes/Swap/s
sudo chmod 755 /Volumes/Swap/s
sudo sysctl vm.swapfileprefix=/Volumes/Swap/s

không thay đổi tiền tố được lưu trữ như báo cáo bởi

sysctl vm

trong suốt thời gian của phiên và nó vẫn tồn tại khi khởi động lại.

điều này có thể được gói như một lệnh unix vào một tệp văn bản:

$/bin/sh
sysctl vm.swapfileprefix=/Volumes/Swap/s

và chạy lúc đăng nhập.


-1

Giải pháp đơn giản:

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

SwapRelocator 1.1.2 hoạt động rất tốt trên Maverick!

Sử dụng (ví dụ) Hệ thống Công cụ Tinker để cho phép gắn kết khối lượng trước khi đăng nhập, giải quyết vấn đề duy nhất tôi gặp phải.

(Cảm ơn Filippo, cuối cùng tôi cũng có thể chuyển hoán đổi từ âm lượng khởi động được nhân đôi sang âm lượng bộ đệm bị sọc (tất cả SSD))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.