ฉันสามารถย้าย swapfiles หน่วยความจำเสมือนของ Apple ไปยังพาร์ติชันเฉพาะบนฮาร์ดไดรฟ์ของฉันได้จนถึงปัจจุบัน เทคนิคที่ฉันใช้อยู่นั้นได้อธิบายไว้ในเธรดบน forums.macosxhints.com
อย่างไรก็ตามด้วยภาพตัวอย่างนักพัฒนาของ Snow Leopard วิธีนี้ใช้งานไม่ได้อีกต่อไป ไม่มีใครรู้ว่ามันสามารถทำได้กับระบบปฏิบัติการใหม่หรือไม่?
อัปเดต:ฉันได้ทำเครื่องหมายคำตอบของ dbluว่าเป็นที่ยอมรับแม้ว่ามันจะไม่ได้ผลเพราะเขาให้คำแนะนำที่ยอดเยี่ยมและมีรายละเอียดและเพราะคำแนะนำของเขาในการใช้plutil
ชี้ไปที่ฉันในที่สุด โซลูชันที่สมบูรณ์และใช้งานได้โพสต์ที่นี่ในคำถามเนื่องจากฉันไม่มีชื่อเสียงเพียงพอที่จะแก้ไขคำตอบที่ยอมรับได้
อัปเดต # 2:เปลี่ยนขั้นตอนเพื่อแสดงให้เห็นถึงเทคนิคของ eklซึ่งช่วยลดความยุ่งยากทั้งหมดโดยลดความต้องการสคริปต์เชลล์ขั้นกลาง:
โซลูชั่นที่สมบูรณ์:
1.
เปิด Terminal และทำสำเนาสำรองของ dynamic_pager.plist ที่เป็นค่าเริ่มต้นของ Apple:
$ 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.
เปิดโปรแกรมแปลงข้อความพร้อมตัวแก้ไขข้อความที่คุณเลือก (ฉันใช้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 สำหรับรายละเอียดเกี่ยวกับสาเหตุที่จำเป็น ในตัวอย่างต่อไปนี้พาร์ทิชันของฉันเรียกว่า 'Swap' และฉันเลือกที่จะใส่ swapfiles ในไดเรกทอรีที่ซ่อนอยู่ในพาร์ติชันที่เรียกว่า '.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.
บันทึก 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 ของคุณ หากคุณประสบปัญหาให้เปลี่ยนเป็นโหมดเริ่มต้นอย่างละเอียดโดยกด Command-v ค้างไว้หลังจากเริ่มการทำงาน นี่จะช่วยให้คุณเห็นข้อความเริ่มต้นทั้งหมดที่ปรากฏขึ้นระหว่างการเริ่มต้น หากคุณพบปัญหาที่เลวร้ายยิ่งขึ้น (เช่นคุณไม่เคยเห็นหน้าจอเข้าสู่ระบบ) ให้กด Command-s ค้างไว้แทน สิ่งนี้จะทำการบูตคอมพิวเตอร์ในโหมดผู้ใช้คนเดียว (ไม่มีกราฟิก UI เพียงแค่พร้อมรับคำสั่ง) และให้คุณกู้คืนสำเนาสำรองของ com.apple.dynamic_pager.plist ที่คุณทำไว้ในขั้นตอนที่ 1
8.
เมื่อคอมพิวเตอร์บู๊ตแล้วให้เปิด Terminal ขึ้นมาแล้วตรวจสอบว่าได้ทำการย้ายไฟล์ swap แล้ว:
$ cd /Volumes/Swap/.vm
$ ls -l
คุณควรเห็นสิ่งนี้:
-rw------- 1 someUser staff 67108864 18 Sep 12:02 swapfile0
9.
ลบ swapfiles เก่า:
$ cd /private/var/vm
$ sudo rm swapfile*
10.
กำไร!
หมายเหตุ 1
การแก้ไขข้อโต้แย้งเป็น dynamic_pager ในการวางแผนโดยไม่ใช้wait4path
ไม่ได้ผลเสมอไปและเมื่อมันล้มเหลวมันจะทำอย่างเงียบ ๆ ปัญหาเกิดขึ้นจากการที่ dynamic_pager เปิดตัวเร็วมากในกระบวนการเริ่มต้น หากพาร์ทิชัน swap ของคุณยังไม่ได้เมานท์เมื่อโหลด dynamic_pager เป็นครั้งแรก (จากประสบการณ์ของฉันสิ่งนี้เกิดขึ้นได้ 99% ของเวลา) ระบบจะทำการปลอม มันจะสร้างลิงก์สัญลักษณ์ในไดเรกทอรี / Volumes ของคุณซึ่งมีชื่อเดียวกับพาร์ทิชัน swap ของคุณ แต่จะกลับไปที่ตำแหน่ง swapfile เริ่มต้น (/ private / var / vm) จากนั้นเมื่อ swap พาร์ติชันที่แท้จริงของคุณติดตั้งมันจะได้รับชื่อSwap 1
(หรือYourDriveName 1
) คุณสามารถเห็นปัญหาได้ด้วยการเปิด Terminal และแสดงรายการเนื้อหาของไดเรกทอรี / 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 -> /
โปรดทราบว่าความล้มเหลวนี้อาจเป็นจุดที่ยากมาก หากคุณต้องตรวจสอบ swapfiles ตามที่ฉันแสดงในขั้นตอนที่ 12 คุณจะยังคงเห็นพวกเขา ! ลิงก์สัญลักษณ์จะทำให้ดูเหมือนว่า swapfiles ของคุณถูกย้ายแล้วแม้ว่าจะถูกเก็บไว้ในตำแหน่งเริ่มต้นจริง ๆ ก็ตาม
โน้ต 2
เดิมทีฉันไม่สามารถทำงานใน Snow Leopard ได้เพราะ com.apple.dynamic_pager.plist ถูกเก็บไว้ในรูปแบบไบนารี ฉันทำสำเนาของไฟล์ต้นฉบับและเปิดด้วยตัวแก้ไขรายการทรัพย์สินของแอปเปิ้ล (พร้อมใช้งานกับ 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
เมื่อทุกอย่างทำงานอย่างถูกต้องคุณอาจเห็นข้อความด้านบนสองสามครั้งเท่านั้นและไม่มีข้อความ "Throttling respawn" อีกต่อไป นี่หมายความว่าระบบไม่ต้องรอให้พาร์ติชันโหลด แต่ท้ายที่สุดก็ประสบความสำเร็จ
wait4path
วิธีการแก้ปัญหาขอบคุณสิ่งที่ Applicorn Xupport ได้รับการแก้ไขสำหรับฉัน ฉันจะโพสต์คำตอบแบบเต็มเมื่อฉันรู้วิธี แต่สั้น ๆ คือเปลี่ยนอาร์กิวเมนต์โปรแกรมล่าสุดเป็นเพียงเส้นทางใหม่ (เช่น<string>/Volumes/swap/.vm/swapfile</string>
) เปลี่ยนOnDemand
คีย์เป็น<true/>
และเพิ่มStartOnMount
คีย์ไปยังจุดสิ้นสุดด้วยค่า <true/>
ของ ป.ล. โซลูชั่นนี้ทำงานได้ดีใน Lion (สำหรับฉันอย่างน้อย)
StartOnMount
ธงถูกเพิ่มเข้ามาใน 10.5 ตาม: mactech.com/articles/mactech/Vol.25/25.10/...