หมายเหตุ:นี่เป็นคำถามที่ฉันถามใน SuperUser เมื่อไม่นานมานี้ ฉันโพสต์ใหม่ที่นี่เพราะฉันคิดว่ามันเป็นของที่นี่
ตามค่าเริ่มต้น Mac OS X จะเก็บไฟล์สลับ/private/var/vm/
ไว้ ฉันต้องการวางไฟล์ swap ในตำแหน่งอื่น จะทำอย่างไร?
หมายเหตุ:นี่เป็นคำถามที่ฉันถามใน SuperUser เมื่อไม่นานมานี้ ฉันโพสต์ใหม่ที่นี่เพราะฉันคิดว่ามันเป็นของที่นี่
ตามค่าเริ่มต้น Mac OS X จะเก็บไฟล์สลับ/private/var/vm/
ไว้ ฉันต้องการวางไฟล์ swap ในตำแหน่งอื่น จะทำอย่างไร?
คำตอบ:
หมายเหตุ:คัดลอกมาจาก SuperUser:
สำหรับ OSX เวอร์ชันเก่าดูที่กระทู้นี้ใน forums.macosxhints.com
เครดิตไปที่dbluสำหรับการอธิบายการใช้งานplutil
, ZILjrสำหรับการแนะนำwait4path
คำสั่งและ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. เปิด Plist ที่แปลงด้วยตัวแก้ไขข้อความที่คุณเลือก (ฉันใช้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
คำสั่ง shell ก่อนที่จะเรียกใช้ 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" อีกต่อไป ซึ่งหมายความว่าระบบไม่ต้องรอให้พาร์ติชันโหลด แต่ท้ายที่สุดก็ประสบความสำเร็จ
ใน 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
;)
ฉันไม่สามารถสร้างโซลูชันการบูตระบบแบบถาวรได้ตั้งแต่ 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
และทำงานที่เข้าสู่ระบบ
วิธีแก้ปัญหาง่าย ๆ :
http://www.macupdate.com/app/mac/10771/swap-relocator
SwapRelocator 1.1.2 ใช้งานได้ดีบน Maverick!
ใช้ (ตัวอย่าง) Tinker Tool System เพื่อให้วอลุ่มเมาต์ก่อนลงชื่อเข้าใช้ซึ่งแก้ปัญหาเดียวที่ฉันพบ
(ขอบคุณ Filippo ฉันสามารถย้ายการแลกเปลี่ยนจากปริมาณการบูตที่มิร์เรอร์ไปยังไดรฟ์แคชแบบสไทรพ์ (SSD ทั้งหมด))
/private/var/vm/sleepimage
ในผู้ใช้ขั้นสูง: ฉันควรเชื่อมโยง / ส่วนตัว / var / vm dir ของฉันกับโวลุ่มอื่นใน OS X Lion หรือไม่ (2011-09-20) - มีคำตอบที่แนะนำว่าไม่ควรใช้วอลลุ่มแยกเดียวกันสำหรับไฟล์ swap ภายนอกและ sleepimage