मैं वर्चुअल मेमोरी स्वैप फ़ाइलों को एक अलग ड्राइव या विभाजन में कैसे स्थानांतरित कर सकता हूं?


33

नोट: यह एक सवाल है जो मैंने कुछ समय पहले SuperUser पर पूछा था। मैं इसे यहाँ पोस्ट कर रहा हूँ क्योंकि मुझे लगता है कि यह यहाँ है।

डिफ़ॉल्ट रूप से, मैक ओएस एक्स अपनी स्वैप फ़ाइलों को स्टोर करता है /private/var/vm/। मैं स्वैप फ़ाइलों को एक अलग स्थान पर रखना चाहूंगा। यह कैसे किया जा सकता है?


/private/var/vm/sleepimageसुपर यूजर में अतिरिक्त विचार : क्या मुझे ओएस एक्स लायन में एक और वॉल्यूम के लिए अपने / निजी / var / vm dir को सिमिलर करना चाहिए? (2011-09-20) - एक जवाब है जो बाहरी स्वैप फ़ाइलों और स्लीपेज दोनों के लिए एक ही अलग वॉल्यूम का उपयोग नहीं करने की सलाह देता है।
ग्राहम पेरिन

डायनामिकपेजरवॉपर ( स्रोत: डायनेमिक_पेजर_वापर ) - OSX पर / sbin /
ग्राहम पेरिन

जवाबों:


23

नोट: SuperUser से कॉपी किया गया:

OSX के पुराने संस्करणों के लिए, इस धागे को forum.macosxhints.com पर देखें।

क्रेडिट को जाता है dblu के उपयोग के स्पष्टीकरण के लिए plutil, ZILjr शुरू करने के लिए wait4pathआदेश, और EKL एक मध्यवर्ती खोल स्क्रिप्ट की आवश्यकता को समाप्त द्वारा पूरी बात को सरल बनाने के लिए।

पूर्ण समाधान:

1. टर्मिनल खोलें और ऐप्पल के डिफ़ॉल्ट dynam_pager.plist की एक बैकअप प्रतिलिपि बनाएँ:

$ 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. Program_rguments सरणी को संशोधित करें (लाइनें 13 के माध्यम से 13) शेल_ wait4pathकमांड को डायनामिक_पेजर लॉन्च करने से पहले उपयोग करने के लिए । नोट # 1 देखें कि यह क्यों आवश्यक है। निम्नलिखित उदाहरण में, मेरे विभाजन को कहा जाता है Swap, और मैंने उस विभाजन पर एक छिपी हुई निर्देशिका में स्वैपफ़ाइल्स डालना चुना, .vm यह सुनिश्चित करें कि आपके द्वारा निर्दिष्ट निर्देशिका वास्तव में मौजूद है । XML को निम्नानुसार देखना चाहिए:

<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. प्लिस्ट को बचाएं, और टर्मिनल प्रॉम्प्ट पर लौटें। का उपयोग कर 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. अपने मैक को पुनरारंभ करें। यदि आप मुसीबत में हैं, तो स्टार्टअप चाइम के तुरंत बाद कमांड-वी को दबाकर क्रिया मोड चालू करें। यह आपको स्टार्टअप के उन सभी संदेशों को देखने देगा जो स्टार्टअप के दौरान दिखाई देते हैं। यदि आप और भी अधिक परेशानी में हैं (यानी आप लॉगिन स्क्रीन कभी नहीं देखते हैं), इसके बजाय कमांड-एस दबाए रखें। यह कंप्यूटर को एकल-उपयोगकर्ता मोड (कोई ग्राफ़िकल यूआई, बस एक कमांड प्रॉम्प्ट) में बूट करेगा और आपको चरण 1 में किए गए com.apple.dynamic_pager.plist की बैकअप प्रतिलिपि को पुनर्स्थापित करने की अनुमति देगा।

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

बिना उपयोग किए प्लास्ट में डायनेमिक_पेजर के तर्कों को संशोधित करना wait4pathहमेशा काम नहीं करता है, और जब यह विफल हो जाता है, तो यह एक शानदार चुप तरीके से ऐसा करता है। समस्या इस तथ्य से उपजी है कि डायनामिक_पेजर को स्टार्टअप प्रक्रिया में बहुत पहले लॉन्च किया जाता है। यदि डायनामिक_पेजर पहले लोड किया गया है, तो आपके स्वैप विभाजन को अभी तक माउंट नहीं किया गया है (मेरे अनुभव में, यह समय का 99% होता है), तो सिस्टम इसके माध्यम से नकली होगा। यह आपके / वॉल्यूम निर्देशिका में एक प्रतीकात्मक लिंक बनाएगा, जिसका नाम आपके स्वैप विभाजन के समान है, लेकिन डिफ़ॉल्ट स्वैप स्थान (/ निजी / var / vm) पर वापस इंगित करता है। फिर, जब आपका वास्तविक स्वैप विभाजन आरोहित होता है, तो उसे नाम 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

मैं मूल रूप से स्नो लेपर्ड में काम करने में असमर्थ था क्योंकि com.apple.dynamic_pager.plist को बाइनरी प्रारूप में संग्रहीत किया गया था। मैंने मूल फ़ाइल की एक प्रतिलिपि बनाई और इसे बदलने के लिए Apple के प्रॉपर्टी लिस्ट एडिटर (Xcode के साथ उपलब्ध) के साथ खोला, लेकिन इस प्रक्रिया ने plist फ़ाइल में कुछ विस्तारित विशेषताओं को जोड़ा जिससे सिस्टम इसे अनदेखा कर देता है और बस चूक का उपयोग करता है । जैसा कि dblu ने बताया, plutilफ़ाइल को सादे XML में बदलने के लिए उपयोग करना एक आकर्षण की तरह काम करता है।

नोट 3

आप किसी भी संदेश को देखने के लिए कंसोल एप्लिकेशन की जांच कर सकते हैं जो कि स्क्रीन पर डायनामिक_पेजर_इन इकोस है। यदि आपको बार-बार निम्न पंक्तियाँ दिखाई देती हैं, तो सेटअप के साथ समस्या है। मैं इन संदेशों में भाग गया क्योंकि मैं '.vm' निर्देशिका बनाना भूल गया था जिसे मैंने डायनामिक_पेजर_इनिट में निर्दिष्ट किया था।

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

जब सब कुछ ठीक से काम कर रहा हो, तो आप उपरोक्त संदेश को एक-दो बार ही देख सकते हैं, और फिर "थ्रॉटलिंग रेस्पॉन्स" इन संदेशों से अधिक नहीं। इसका मतलब है कि सिस्टम को लोड होने के लिए इंतजार करना पड़ा, लेकिन अंत में यह सफल रहा।

टाइम मशीन से रास्ता छोड़ दें

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


अगली बार बस प्रश्न / उत्तर को लिंक करें, प्रत्येक उत्तर के आगे एक "लिंक" बटन है। ;)
मार्टिन Marconcini

2
इस सवाल में सबसे ऊपर सुपरयूजर प्रश्न का लिंक है। मैंने सुपरयूजर पर सीधे "" उत्तर से लिंक नहीं किया क्योंकि इसका निर्माण कई अन्य उत्तरों के कुछ हिस्सों से किया गया है। हालाँकि, मैंने इस उत्तर के दूसरे पैराग्राफ में प्रत्येक आंशिक उत्तर (उस आसान "लिंक" बटन का उपयोग करके) के लिंक जोड़े। आप और कितने लिंक चाहते हैं? ;)
ई.जम्स

2
मुझे लगता है कि यह यहाँ है ... मैं इसे हर समय संदर्भित करता हूं ..
एलेक्स ग्रे

यह मेरे लिए १०.१०.३ के तहत विफल रहता है - यह प्लिस्ट का उपयोग नहीं करता है।
अरामिस

2
एल Capitan के तहत, स्वैप करने की कोशिश करने की अनुमति नए सिस्टम इंटीग्रिटी प्रोटेक्शन द्वारा नहीं दी जाती है। /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist: सिस्टम वफ़ादारी की अनुमति नहीं है, जबकि सिस्टम इंटीग्रिटी प्रोटेक्शन लगी हुई है। रिकवरी विभाजन में बूट है, और फिर यूटिलिटीज़ मेनू से सुरक्षा कॉन्फ़िगरेशन चुनें। आप सिस्टम इंटिग्रिटी प्रोटेक्शन को लागू करने के लिए अनचेक कर सकते हैं, कॉन्फ़िगरेशन लागू करें पर क्लिक करें, और पुनरारंभ करें।
मीटाई.कॉम

4

मैं एक स्थायी सिस्टम बूट समाधान स्थापित करने में असमर्थ रहा हूँ, क्योंकि 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

सत्र की अवधि के लिए, और यह रिबूट से बचता है।

इसे एक यूनिक्स कमांड के रूप में टेक्स्ट फाइल में लपेटा जा सकता है:

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

और लॉगिन पर चलाएं।


-1

सरल समाधान:

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

SwapRelocator 1.1.2 Maverick पर बढ़िया काम करता है!

उपयोग (उदाहरण के लिए) टिंकर टूल सिस्टम लॉग-इन से पहले वॉल्यूम को माउंट करने के लिए, जो मेरे सामने आई एकमात्र समस्या को हल करता है।

(धन्यवाद फ़िलिपो, मैं अंत में स्वैप किए गए बूट वॉल्यूम से धारीदार कैश वॉल्यूम (सभी SSD) पर स्वैप को स्थानांतरित कर सकता हूं)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.