Sanal bellek takas dosyalarını farklı bir sürücüye veya bölüme nasıl taşırım?


33

not: Bu,bir süre önce SuperUser'da sorduğumbir soru . Buraya yeniden gönderiyorum çünkü buraya ait olduğunu düşünüyorum.

Varsayılan olarak, Mac OS X, takas dosyalarını saklar /private/var/vm/. Takas dosyalarını farklı bir yere yerleştirmek istiyorum. Nasıl yapılabilir?


Ek dikkate /private/var/vm/sleepimageSüper Kullanıcı: Meli I OS X Lion başka bir birime benim / özel / var / vm dir sembolik köprüyü? (2011-09-20) - Hem harici takas dosyaları hem de uyku görüntüleri için aynı ayrı birimin kullanılmamasını öneren bir cevap var.
Graham Perrin

dynamicpagerwrapper ( kaynak: dynamic_pager_wrapper ) - OSX'de / sbin / dynamic_pager için performans sarmalayıcısı
Graham Perrin

Yanıtlar:


23

not: SuperUser'dan kopyalandı:

OSX'in eski sürümleri için forums.macosxhints.com adresinde bu konuya bakın.

Kredi gider dblu kullanımını açıklayan plutil, ZILjr tanıştırmak için wait4pathkomutu ve EKL ve benzeri yazarları bir ara kabuk komut dosyası ihtiyacını ortadan kaldırarak her şeyi basitleştirmek için.

Tam çözüm:

1. Terminal'i açın ve Apple'ın varsayılan dynamic_pager.plist'in bir yedek kopyasını alın:

$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}

2. Plist'i ikiliden düz XML'e dönüştürün:

$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

3. Dönüştürülmüş düzeneği seçtiğiniz metin editörünüzle açın. ( picoKullanıyorum, dblu'nun cevabını kullanarak bir örnek için bakınız vim):

$ sudo pico -w com.apple.dynamic_pager.plist

Aşağıdaki gibi görünmeli:

<?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.wait4path dynamic_pager'ı başlatmadan önce shell komutunu kullanmak için ProgramArguments dizisini (satır 13 - 18) değiştirin . Bunun neden gerekli olduğuna ilişkin detaylar için not 1'e bakınız. Aşağıdaki örnekte Swapbölümüm çağrılıyor ve takas alanlarını bu bölümdeki gizli bir dizine koymayı seçtim, adlandırdığınız .vm dizinin gerçekten bulunduğundan emin olun . XML aşağıdaki gibi görünmelidir:

<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. Çubuğu kaydedin ve terminal istemine geri dönün. Kullanarak pico, komutlar şöyle olurdu:

<ctrl+o> to save the file
<enter>  to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit

6. Değiştirilen pist'i tekrar ikili dosyaya dönüştürün:

$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

7. Mac'inizi yeniden başlatın. Başınız belaya girerse, başlangıç ​​zilinden hemen sonra Command-v tuşunu basılı tutarak ayrıntılı başlangıç ​​moduna geçin. Bu, başlangıç ​​sırasında görüntülenen tüm başlangıç ​​iletilerini görmenizi sağlar. Daha da kötüsü ile karşılaşırsanız (örneğin, giriş ekranını hiç görmezsiniz), bunun yerine Command tuşlarını basılı tutun. Bu, bilgisayarı tek kullanıcılı modda önyükler (grafik kullanıcı arabirimi yok, yalnızca bir komut istemi) ve 1. adımda yaptığınız com.apple.dynamic_pager.plist dosyasının yedek kopyasını geri yüklemenizi sağlar.

8. Bilgisayar önyüklendikten sonra Terminal'i ateşleyin ve takas dosyalarının gerçekten taşındığını doğrulayın:

$ cd /Volumes/Swap/.vm
$ ls -l

Böyle bir şey görmelisin:

-rw-------  1 someUser  staff  67108864 18 Sep 12:02 swapfile0

9. Eski takas dosyalarını silin:

$ cd /private/var/vm
$ sudo rm swapfile*

10. Kar!

Not 1

Argümanlardaki kullanmadan dinamik_pager parametresini değiştirmek wait4pathher zaman işe yaramaz ve başarısız olduğunda bunu olağanüstü sessiz bir şekilde gerçekleştirir. Sorun, dynamic_pager'ın başlangıç ​​işleminde çok erken başlatılmasından kaynaklanıyor. Takas bölümünüz henüz dynamic_pager ilk yüklendiğinde henüz monte edilmediyse (deneyimlerime göre, bu zamanın% 99'u oluyor), o zaman sistem kendi yolunu izleyecektir. / Ciltler dizininde, takas bölümünüzle aynı ada sahip, ancak varsayılan takas dosyası konumuna (/ private / var / vm) işaret eden sembolik bir bağlantı oluşturur. Ardından, gerçek takas bölümünüz monte edildiğinde, ona ad Swap 1(veya YourDriveName 1) verilir. Terminal'i açıp / Volumes dizininizin içeriğini listeleyerek sorunu görebilirsiniz:

$ cd /Volumes
$ ls -l

Bunun gibi bir şey göreceksiniz:

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 -> /

Bu hatanın tespit edilmesinin çok zor olabileceğini unutmayın . 12. adımda gösterdiğim gibi swapfilfilerine bakacak olsanız, hala göreceksiniz ! Sembolik bağlantı, takas dosyalarınız taşınıyormuş gibi görünmesini sağlar, aslında varsayılan konumda depolanmış olsalar bile.

Not 2

Com.apple.dynamic_pager.plist ikili biçimde saklandığından başlangıçta bunun Snow Leopard'da çalışmasını sağlayamadım. Orijinal dosyanın bir kopyasını yaptım ve değişiklik yapmak için Apple'ın Özellik Listesi Düzenleyicisiyle (Xcode ile mevcut) açtım, ancak bu işlem sistemin onu görmezden gelmesine ve sadece varsayılanları kullanmasına neden olan plist dosyasına bazı genişletilmiş özellikler ekledi . Dblu'nun işaret ettiği gibi plutil, dosyayı düz XML'e dönüştürmek bir tılsım gibi çalışır.

Not 3

Konsol uygulamasını, dynamic_pager_init ekrana yansıyan mesajları görmek için kontrol edebilirsiniz. Aşağıdaki satırların tekrar tekrar tekrarlandığını görüyorsanız, kurulumda bir sorun vardır. Bu mesajları koştum, çünkü dynamic_pager_init'te belirttiğim '.vm' dizinini oluşturmayı unuttum.

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

Her şey düzgün çalıştığında, yukarıdaki mesajı yalnızca birkaç kez görebilir ve daha sonra "Throttling respawn" mesajlarından daha fazlasını göremezsiniz. Bu, sistemin bölmenin yüklenmesini beklemek zorunda kaldığı, ancak sonuçta başarılı olduğu anlamına gelir.

Yolu Time Machine'den dışla

OS X 10.7 ve sonraki sürümlerinde bunu tmutil ile yapabilirsiniz . Örnek:

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

Bu örnekte, sonucu incelemek için:

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

Değişim için kullanılan hacmin endekslenmesi gerekmiyorsa

Mdutil kullanın . Örneğin, kapatıp ardından mağazayı silmek için:

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


Bir dahaki sefere sadece soru / cevap link, her cevap yanında bir "link" düğmesi var. ;)
Martin Marconcini

2
Bu sorunun en üstünde Süper Kullanıcı sorusuna bir bağlantı var. SuperUser'daki "" "cevabına doğrudan bağlantı vermedim çünkü diğer birkaç cevabın kısımlarından oluşturuldu. Bununla birlikte, bu cevabın ikinci paragrafındaki her bir kısmi cevaba bağlantılar ekledim (bu kullanışlı "bağlantı" düğmesini kullanarak). Kaç tane daha bağlantı istiyorsun ;)
e.James

2
Burada olmasını seviyorum… Her zaman referans ediyorum ..
alex grey

Bu benim için 10.10.3'ün altında başarısız oluyor - pist kullanmıyor gibi görünüyor.
aramis

2
El Capitan altında, takasın silinmeye çalışılmasına yeni Sistem Bütünlüğü Koruması izin vermez. /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist: Sistem Bütünlüğü Koruması devreye girdiğinde işleme izin verilmiyor <br> Kurtarma bölümünde önyükleme yapın ve ardından Yardımcı Programlar menüsünden Güvenlik Yapılandırması'nı seçin. Sistem Bütünlüğü Korumasını Koru seçeneğinin işaretini kaldırabilir, Yapılandırmayı Uygula'yı tıklatabilir ve yeniden başlatabilirsiniz.
Meetai.com Nisanda

4

Kalıcı bir sistem önyükleme çözümü oluşturamadım, çünkü 10.10 artık önyüklemede /etc/.rc kullanmıyor ve com.apple.dynamic_pager.plist yöntemi başarısız oldu.

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

tarafından saklandığı gibi saklanan öneki değiştirir

sysctl vm

oturumu süresince ve yeniden başlatma hayatta kalır.

bu bir metin dosyasına bir unix komutu olarak kaydırılabilir:

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

ve giriş sırasında çalıştırın.


-1

Basit çözüm:

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

SwapRelocator 1.1.2 Maverick'te harika çalışıyor!

(Örneğin) Tinker Tool System'i kullanarak oturum açmadan önce birimlerin monte edilmesini sağlayın, karşılaştığım tek sorunu çözdü.

(Teşekkür Filippo, takas nihayet yansıtılmış önyükleme biriminden çizgili bir önbellek birimine (tüm SSD) taşıyabilirim)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.