ฉันสามารถใส่ / tmp และ / var / log ใน ramdisk บน OS X ได้หรือไม่


20

สำหรับระบบ Linux ที่ไม่สำคัญฉันมักจะย้ายสิ่งต่าง ๆ เช่น / tmp และ / var / log ไปยัง tmpfs เพื่อบันทึกในการเขียนดิสก์บางอย่าง ฉันได้ทำสิ่งนี้มาหนึ่งปีหรือมากกว่านั้นและถ้าฉันต้องการบันทึกการรีบูตฉันแค่คอมเม้นท์บรรทัดใน / etc / fstab แล้วก็เริ่มดีบั๊ก

ไม่ว่าในกรณีใดฉันต้องการทำสิ่งเดียวกันใน OS X ฉันได้เห็นโพสต์เกี่ยวกับการสร้าง ramdisk สำหรับ OS X แต่ฉันกำลังมองหาโซลูชันที่ถาวรกว่าที่ใช้งานได้กับการบู๊ตทุกครั้ง ฉันต้องการ / tmp และ / var / log ติดตั้งใน ramdisk ด้วยความสามารถในการปิดการทำงานนั้นด้วยการแก้ไขบรรทัดคำสั่งเล็กน้อยใน vi หากฉันต้องทำ


ดูเหมือนว่าการเพิ่มประสิทธิภาพก่อนวัยอันควรสำหรับฉัน คุณกำลังเจอสถานการณ์มากมายที่คุณใช้ดิสก์ I / O-bound ดังนั้นคุณจำเป็นต้องบันทึกการเขียนดิสก์ทุกครั้งที่ทำได้
Spiff

ฉันจะยอมรับอย่างเปิดเผยว่านี่ไม่น่าจะเป็นการเพิ่มประสิทธิภาพอย่างมาก เดิมทีฉันทำมันบนระบบ Linux ที่ฉันกำลังบูทจากแท่ง USB ราคาถูกและพยายามหลีกเลี่ยงการเขียนมันให้มากที่สุดเท่าที่จะเป็นไปได้ในขณะที่ยังให้พื้นที่ log และ tmp ที่กระบวนการต่างๆต้องการ ความคิดนั้นติดขัดและฉันรู้สึกว่ากำลังยอมแพ้ (ไม่สามารถดูบันทึกเพื่อติดตามปัญหาที่ฉันสังเกตเห็นได้หลังจากที่มันเกิดขึ้นนอกเสียจากว่าฉันจะสามารถทำซ้ำได้) มีค่าต่อการซ่อมแซมนี้ สำหรับระบบ "ไม่ใช่คนจรจัด" ฉันจะไม่ทำเช่นนี้ แล็ปท็อป OS X ของฉันอยู่ในหมวดหมู่คนจรจัด
kbyrd

6
อีกเหตุผลที่ถูกต้อง ^ D ^ D ^ D ... เอ่อ ... การหาเหตุผลเข้าข้างตนเอง: macbook ของฉันมี SSD และถ้าฉันสามารถป้องกันการเขียนแบบสุ่มสำหรับสิ่งที่ฉันไม่สนใจมากทั้งระบบจะดีกว่า แล้วเรื่องนั้นล่ะ
kbyrd

คำตอบ:


6

นี่คือสคริปต์ในการสร้าง ramdisks ใน OS X ขออภัยไม่ตอบคำถามของคุณ คุณสามารถใช้สิ่งนี้เพื่อสร้างสิ่งที่ทำงานในการบูตแล้วติดตั้ง / tmp และ / var / log

#!/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 http://pastie.textmate.org/pastes/1417478/text?key=igcxuzqqvlmlbavxooj2uw


ขอบคุณมากสคริปต์นี้มีประโยชน์มากในการสร้างดิสก์ RAM ใน OS X
hanxue

6

แก้ไข: ฉันแค่จะยอมรับคำตอบของฉันเองเพราะมันแก้ปัญหาส่วนหนึ่งสำหรับฉัน หากใครบางคนโพสต์อะไรเช่น - ผูกใน Linux ฉันจะยอมรับคำตอบนั้น

ในความพยายามกระตุ้นคำตอบเพิ่มเติมฉันจะเริ่มตอบคำถามของฉันเองด้วยสิ่งที่ฉันค้นพบ

ขั้นตอนที่ 1 คือการติดตั้ง ramdisk ทุกครั้ง เมื่อต้องการทำสิ่งนี้ฉันสร้างสคริปต์ทุบตีและจากนั้นรายการ launchd เพื่อโทรหาสคริปต์ทุบตีเมื่อบู๊ต

เขียนสคริปต์ทุบตีเช่นนี้:

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

จากนั้นเรียกใช้งานเมื่อเริ่มระบบโดยเพิ่มลงใน launchd โดยสร้างไฟล์ชื่อ /Library/LaunchDaemons/com.my.ramdisk.plist ด้วยเนื้อหาต่อไปนี้:

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

ที่ฉันติดอยู่เป็นวิธี symlink หรือเมานต์ไดเรกทอรีภายใน ramdisk ที่ / tmp, / var / log และ / var / tmp ไดเรกทอรีทั้งสามนี้มี symlinked ทั้งหมดในระบบของฉันไปยัง / private / tmp, / private / var / log และ / private / var / tmp เมื่อฉันเปลี่ยน symlink ให้ชี้ไปที่ / Volumes / ramdisk / ... ระบบจะไม่บูต ฉันคาดหวังว่านี่เป็นเพราะตอนบูตเครื่องมีบางอย่างที่ต้องการ / tmp และ / var / log ก่อนที่สคริปต์ com.my.ramdisk ของฉันจะเมานท์ ramdisk ฉันต้องการวิธีในการติดตั้ง ramdisk ทันทีหลังจากติดตั้งรูทก่อนที่จะมีอะไรอื่นทำงานอีก

หมายเหตุหากคุณเมานต์ / var / log (เคอร์เนล daemon และบันทึกพื้นที่ผู้ใช้สำคัญอื่น ๆ ) ในพื้นที่ชั่วคราวคุณจะสูญเสียเนื้อหาในการรีบูตครั้งถัดไป สิ่งนี้อาจขัดขวางความสามารถในการวินิจฉัยของคุณ


อัตราต่อรองเป็นสิ่งที่ดีที่คุณจะไม่สามารถทำเช่นนี้และแม้ว่าคุณจะสามารถทำได้มันจะไม่คุ้มค่ากับเวลาที่ใช้ไป เอกสารสาธารณะทั้งหมดในวงจรการบูตมีให้ที่นี่ถ้าคุณพยายามงอจริง ๆ : bit.ly/d1kAPd
Hasaan Chop

@NSD: ขอบคุณสำหรับลิงค์ ผู้ชายฉันต้องการผูกติด -
kbyrd

คุณอาจจะเปลี่ยนเส้นทางการส่งออกของคนตัดไม้โดยไม่ต้องเขียนส่วนขยายเคอร์เนล แต่ฉันไม่เคยลองจริง
Hasaan Chop

2
ฉันรู้ว่านี่เป็นปัญหาเก่าและฉันไม่สามารถโพสต์คำตอบที่เหมาะสม แต่ปรากฏขึ้นอย่างเด่นชัดในการค้นหา เพื่อที่จะตอบคำถามที่คุณต้องการใช้hdik -drivekey system-image=yes -nomount ram://262144ในการสร้าง 128MB RAM ดิสก์แล้วnewfs_hfsจัดรูปแบบแล้วใช้ในการติดตั้งไดรฟ์มากกว่าmount -o union,nobrowse,noatime /tmpด้วยวิธีนี้ไฟล์ที่มีอยู่/tmpจะไม่ถูกแตะต้อง แต่ไฟล์ใหม่จะไปที่ ram disk ของคุณ
Haravikk

1
ความคิดเห็นอื่น ๆ ของฉันคือคุณควรระวังในการทำเช่นนี้ ในขณะที่tmpfsจะใช้ swap หากจำเป็นดิสก์ RAM จะไม่ทำดังนั้นคุณจะสูญเสีย RAM ที่ใช้งานซึ่งหมายความว่าคุณจะต้องทำให้มันเล็ก แต่งานบางอย่างใน/tmpอาจต้องใช้หน่วยความจำเพิ่มเติมและจะล้มเหลวดังนั้นจึงเป็น ระวังสิ่งที่คุณเรียกใช้ในกรณีที่ต้องการพื้นที่มากกว่าที่คุณจัดสรร
Haravikk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.