OS X'te bir ramdisk içerisine / tmp ve / var / log komutlarını koyabilir miyim?


20

Kritik olmayan Linux sistemleri için, genellikle / tmp ve / var / log gibi şeyleri bazı disk yazmalarından tasarruf etmek için tmpfs'e taşırım. Bunu bir yıldan beri yapıyorum ve yeniden başlatmalar arasındaki günlüklere ihtiyacım olursa, sadece / etc / fstab içindeki bir satırı yorumlayıp hata ayıklamaya başladım.

Her durumda, OS X'te de aynı şeyi yapmak istiyorum. OS X için bir ramdisk oluştururken yazılar gördüm, ancak her önyüklemede çalışan daha kalıcı bir çözüm arıyorum. Her zaman bir ramdisk içerisine / tmp ve / var / log komutunu takmak isterim, gerekirse bunu vi'da bir komut satırı düzenlemesiyle kapatabilirim.


Bu bana erken optimizasyon gibi geliyor. Gerçekten disk G / Ç bağlı olduğunuz birçok durumda mı çalışıyorsunuz, bu yüzden mümkün olduğunda disk yazmalarını kaydetmeniz gerekir?
Spiff

Açıkçası, bunun büyük bir optimizasyon olmadığını kabul edeceğim. Aslında ucuz bir USB bellekten başlattığım bir Linux sistemde yaptım ve hala birçok işlemin istediği log ve tmp alanını sunarken mümkün olduğunca yazmaktan kaçınmaya çalışıyordum. Fikir sıkışıp kaldı ve ne bıraktığımı hissettim (günlükleri görüntüleyemedim, çoğalmazsam ne olduğunu anladıktan sonra bir problemi izlemek için göremiyorum) buna değerdi. "Tinker olmayan" bir sistem için bunu yapmazdım. OS X dizüstü bilgisayarım tamirci kategorisine giriyor.
kbyrd

6
Başka bir haklı ^ D ^ D ^ D ... err ... rasyonelleştirme: Macbook'umun bir SSD'si var ve çok fazla umursamadığım şeyler için rasgele yazmaları engelleyebilirsem, tüm sistem daha iyi durumda. Peki ya bu?
kbyrd

Yanıtlar:


6

İşte OS X'te ramdisks oluşturmak için bir betik. Üzgünüm, sorunuza cevap vermiyor. Bunu açılışta çalışan bir şey oluşturmak için kullanabilir ve ardından / tmp ve / var / log komutunu kullanabilirsiniz.

#!/bin/bash  
ramfs_size_mb=1024  
mount_point=~/volatile  

ramfs_size_sectors=$((${ramfs_size_mb}*1024*1024/512))  
ramdisk_dev=`hdid -nomount ram://${ramfs_size_sectors}`  
newfs_hfs -v 'Volatile' ${ramdisk_dev}  
mkdir -p ${mount_point}  
mount -o noatime -t hfs ${ramdisk_dev} ${mount_point}  

echo "remove with:"  
echo "umount ${mount_point}"  
echo "diskutil eject ${ramdisk_dev}"  

@ Salvatore'dan http://pastie.textmate.org/pastes/1417478/text?key=igcxuzqqvlmlbavxooj2uw


Çok teşekkürler, bu senaryo OS X'de RAM diskleri oluşturmak için çok kullanışlıdır
hanxue

6

EDIT: Sadece kendi cevabımı kabul edeceğim, çünkü benim için sorunun bir bölümünü çözdü. Birisi Linux'ta daha çok --bind gibi bir şey gönderirse, bu cevabı kabul edeceğim.

Daha fazla cevabı teşvik etmek için, bulduklarımla kendi soruma cevap vermeye başlayacağım.

Adım 1, her seferinde açılışta bir ramdisk'in monte edilmesidir. Bunu yapmak için, bash betiğini ve açılışta bash betiğini çağırmak için bir launchd girişi oluşturdum.

Böyle bir bash betiği yazın:

RD=ramdisk
if [ ! -e "/Volumes/$RD" ];  then
    diskutil erasevolume HFS+ "$RD" `hdiutil attach -nomount`
fi

mkdir -p /Volumes/$RD/private/tmp
mkdir -p /Volumes/$RD/private/var/log
mkdir -p /Volumes/$RD/private/var/tmp

Ardından, aşağıdaki içerikle birlikte /Library/LaunchDaemons/com.my.ramdisk.plist adlı bir dosya oluşturarak başlatmayı ekleyerek önyüklemede çağrılmasını sağlayın:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.my.ramdisk</string>
    <key>ProgramArguments</key>
    <array>
            <string>/usr/local/sbin/ramdisk.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Sıkıldığım yer, / tmp, / var / log ve / var / tmp adresindeki ramdisk içindeki dizinleri birbirine bağlamanın veya bağlamanın bir yoludur. Bu üç klasörün tümü sistemimde / private / tmp, / private / var / log ve / private / var / tmp ile işaretlenmiştir. Sembolik bağlantıları / Volumes / ramdisk / ... olarak gösterdiğimde sistem açılmıyor. Bunun önyükleme zamanında, bir şey istediğim / tmp ve / var / log com.my.ramdisk betiğimden önce ramdisk'i bağlaması. Başka bir şey çalıştırılmadan önce kök takıldıktan hemen sonra ramdisk'i monte etmenin bir yoluna ihtiyacım var.

Not Geçici alana / var / log (çekirdek, arka plan programı ve diğer kritik kullanıcı alanı günlükleri) eklerseniz, bir sonraki açılışta içeriğini kaybedersiniz. Bu teşhis koyma yeteneğinizi engelleyebilir.


Muhtemelen bunu yapamayacağın iyi, ve yapabilsen bile, harcanan zamana kesinlikle değmeyecek. Eğer gerçekten denemeye eğilimliyseniz, önyükleme döngüsüyle ilgili tüm genel belgeler burada bulunur: bit.ly/d1kAPd
Hasaan Chop

@NSD: Bağlantı için teşekkürler. Dostum, gerçekten istiyorum - montajı yapıyorum.
kbyrd

Sen olabilir muhtemelen bir çekirdek uzantısı yazmadan Logger çıktısını yönlendirmek, ama aslında hiç denemedim.
Hasaan Chop

2
Bunun eski bir sorun olduğunun farkındayım ve doğru bir cevap yazamıyorum, ancak aramalarda belirgin bir şekilde ortaya çıkıyor. Soruyu cevaplamak için, hdik -drivekey system-image=yes -nomount ram://262144128 MB'lık bir RAM disk oluşturmak, daha sonra newfs_hfsbiçimlendirmek ve daha sonra mount -o union,nobrowse,noatimebirimi bağlamak için kullanmak istersiniz /tmp. Bu şekilde, mevcut dosyalara /tmpdokunulmaz, ancak yeni dosyalar ram diskinize gider.
Haravikk

1
Diğer tek yorumum, bunu yapmaktan çekinmemeniz gerektiği; oysa tmpfsgerekirse takas kullanacaktır, RAM disk, bu nedenle aktif RAM bir parça kaybedersiniz olmaz, ufak tutmak isteyeceksiniz bu araçlar, içinde ancak bazı görevler /tmpdaha fazla bellek gerektirebilir ve başarısız olur, böyle olmaya Tahsis ettiğinden daha fazla alana ihtiyaç duyması durumunda kaçtığına dikkat et.
Haravikk
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.