Posso colocar / tmp e / var / log em um ramdisk no OS X?

20

Para sistemas Linux não críticos, muitas vezes movo coisas como / tmp e / var / log para tmpfs para economizar em alguma gravação em disco. Eu tenho feito isso por um ano ou mais e se eu precisar dos logs através de reinicializações, eu apenas comento uma linha em / etc / fstab e então inicio a depuração.

Em qualquer caso, gostaria de fazer o mesmo no OS X. Já vi postagens sobre a criação de um ramdisk para o OS X, mas estou procurando uma solução mais permanente que funcione em todas as inicializações. Eu sempre quero / tmp e / var / log montado em um ramdisk, com a capacidade de desativar isso com um pouco de edição de linha de comando no vi se for necessário.

    
por kbyrd 20.03.2010 / 05:16

2 respostas

7

EDIT: Eu só vou aceitar minha própria resposta, pois resolveu uma parte do problema para mim. Se alguém postar algo mais como --bind no Linux, aceitarei essa resposta.

Em um esforço para gerar mais respostas, começarei a responder minha própria pergunta com o que descobri.

O passo 1 é obter um ramdisk na inicialização toda vez. Para fazer isso, eu crio um script bash e, em seguida, uma entrada launchd para chamar o script bash na inicialização.

Escreva um script bash como este:

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

Em seguida, execute-o ao inicializar, adicionando-o ao launchd criando um arquivo chamado /Library/LaunchDaemons/com.my.ramdisk.plist com o seguinte conteúdo:

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

Onde eu estou preso é uma maneira de criar links simbólicos ou montar diretórios dentro do ramdisk em / tmp, / var / log, e / var / tmp. Esses três diretórios são todos links simbólicos em meu sistema para / private / tmp, / private / var / log e / private / var / tmp. Quando eu mudei os links simbólicos para apontar para / Volumes / ramdisk / ..., o sistema não inicializa. Espero que isso ocorra porque, no momento da inicialização, algo deseja / tmp e / var / log ANTES de o meu script com.my.ramdisk montar o ramdisk. Eu preciso de uma maneira de montar o ramdisk logo após a raiz ser montada, antes que qualquer outra coisa seja executada.

Observação Se você montar o / var / log (kernel, daemon e outros logs críticos do espaço do usuário) no espaço temporário, você perderá seu conteúdo nos próximos reinicialize. Isso pode inibir sua capacidade de diagnosticar.

    
por 24.03.2010 / 03:23
5

Aqui está um script para criar ramdisks no OS X. Desculpe, ele não responde à sua pergunta. Você pode usar isso para construir algo que é executado na inicialização e depois monta / tmp e / 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}"  

De @salvatore link

    
por 18.04.2011 / 03:07