OS X의 램 디스크에 / tmp 및 / var / log를 넣을 수 있습니까?


20

중요하지 않은 Linux 시스템의 경우 디스크 쓰기를 절약하기 위해 종종 / tmp 및 / var / log와 같은 것을 tmpfs로 옮깁니다. 나는 1 년 동안 이것을 해왔고 재부팅을 통해 로그가 필요하다면 / etc / fstab에 줄을 주석 처리 한 다음 디버깅을 시작하십시오.

어쨌든 OS X에서도 같은 작업을하고 싶습니다. OS X 용 램 디스크 생성에 대한 게시물을 보았지만 모든 부팅에서 작동하는보다 영구적 인 솔루션을 찾고 있습니다. 필자는 항상 / tmp 및 / var / log를 램 디스크에 마운트하고, vi에서 약간의 명령 줄 편집을 사용하여 끄고 싶을 수 있습니다.


이것은 나에게 조기 최적화처럼 들립니다. 디스크 I / O 바인딩 상태의 많은 상황에서 실제로 실행 중이므로 가능하면 디스크 쓰기를 저장해야합니까?
Spiff

나는 이것이 큰 최적화가 아님을 공개적으로 인정 할 것입니다. 필자는 원래 저렴한 USB 스틱으로 부팅하는 Linux 시스템 에서이 작업을 수행했으며 많은 프로세스가 원하는 로그 및 tmp 공간을 제공하면서 가능한 한 쓰기를 피하려고했습니다. 아이디어가 멈춰서 포기한 것을 느꼈습니다 (재현 할 수 없으면 일어나지 않은 것을 발견 한 문제를 추적하기 위해 로그를 볼 수 없음). "비 팅커"시스템의 경우,이 작업을 수행하지 않습니다. 내 OS X 랩톱은 땜장이 범주에 속합니다.
kbyrd

6
또 다른 정당한 ^ D ^ D ^ D ... err ... rationalization : 내 맥북에는 SSD가 있으며별로 신경 쓰지 않는 것들에 대한 무작위 쓰기를 막을 수 있다면 전체 시스템이 더 좋습니다. 어떻게에 대한?
kbyrd

답변:


6

다음은 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


대단히 감사합니다.이 스크립트는 OS X에서 램 디스크를 만드는 데 매우 유용합니다
hanxue

6

편집 : 나는 문제의 한 부분을 해결했기 때문에 내 자신의 대답을 받아 들일 것입니다. 누군가 Linux에서 --bind와 같은 것을 게시하면 그 대답을 받아들입니다.

더 많은 답변을 얻기 위해, 내가 찾은 것으로 내 자신의 질문에 대답하기 시작합니다.

1 단계는 부팅 할 때마다 램 디스크를 마운트하는 것입니다. 이를 위해 bash 스크립트를 만든 다음 부팅시 bash 스크립트를 호출하기 위해 시작된 항목을 만듭니다.

다음과 같이 bash 스크립트를 작성하십시오.

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

그런 다음 다음 내용으로 /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>

내가 붙어있는 곳은 램 디스크의 디렉토리를 / tmp, / var / log 및 / var / tmp에 symlink하거나 마운트하는 방법입니다. 이 세 디렉토리는 모두 시스템에서 / private / tmp, / private / var / log 및 / private / var / tmp로 심볼릭 링크되어 있습니다. 심볼릭 링크가 / Volumes / ramdisk / ...를 가리 키도록 변경하면 시스템이 부팅되지 않습니다. 부팅 할 때 내 com.my.ramdisk 스크립트가 램 디스크를 마운트하기 전에 / tmp 및 / var / log를 원하기 때문입니다. 루트가 마운트 된 직후, 다른 것이 실행되기 전에 램 디스크를 마운트하는 방법이 필요합니다.

참고 임시 공간에 / var / log (커널, 데몬 및 기타 중요한 사용자 공간 로그)를 마운트하면 다음에 다시 부팅 할 때 내용이 손실됩니다. 이것은 진단 능력을 방해 할 수 있습니다.


확률은 당신이 이것을 할 수 없을 것이라는 점이며, 가능하더라도 시간을 낭비 할 가치가 없습니다. 부트 사이클에 대한 모든 공개 문서는 여기에서 실제로 구부러진 경우 여기에서 볼 수 있습니다. bit.ly/d1kAPd
Hasaan Chop

@NSD : 링크 주셔서 감사합니다. 남자, 저는 바인드 마운팅을 정말로 원합니다.
kbyrd

당신은 할 수 아마도 커널 확장을 작성하지 않고 로거의 출력을 리디렉션하지만 실제로는 한 번도 안 써봤.
Hasaan Chop

2
나는 이것이 오래된 문제라는 것을 알고 있으며 적절한 답변을 게시 할 수는 없지만 검색에서 눈에 띄게 나타납니다. 이 질문에 대답하려면 hdik -drivekey system-image=yes -nomount ram://262144128MB 램 디스크를 생성 한 다음 newfs_hfs포맷 mount -o union,nobrowse,noatime하여 볼륨을 마운트하십시오 /tmp. 이 방법으로 기존 파일 /tmp은 그대로 유지되지만 새 파일은 램 디스크로 이동합니다.
하라 빅

1
나의 유일한 다른 의견은 당신이 이것을하는 것에 조심해야한다는 것입니다; 반면, tmpfs필요하다면 스왑을 사용, RAM 디스크는, 그래서 당신은 활성 RAM의 덩어리를 잃게되지 않습니다, 당신은 작은 그것을 유지하려는 것이 수단에 그러나 일부 작업 /tmp에 더 많은 메모리를 필요로 할 수 있고 실패 할 것이다, 그래서 수 할당하는 것보다 더 많은 공간이 필요한 경우에주의하십시오.
하라 빅
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.