¿Cómo montar un disco RAM en el inicio?

5

Estoy intentando montar un disco RAM en el inicio con esto:

/Users/Aram/Development/Tools/ramdisk.sh

diskutil erasevolume HFS+ "RamDisk" 'hdiutil attach -nomount ram://800000'

com.aram.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.aram.ramdisk</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>/Users/Aram/Development/Tools/ramdisk.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Y luego corriendo:

  • sudo chown root:wheel /Library/LaunchDaemons/com.aram.ramdisk.plist
  • sudo launchctl load -w /Library/LaunchDaemons/com.aram.ramdisk.plist

Pero los consigo en la consola:

1/08/12 1:29:25.982 PM fseventsd[64]: could not open <</Volumes/RamDisk/.fseventsd/fseventsd-uuid>> (No such file or directory)
1/08/12 1:29:25.982 PM fseventsd[64]: log dir: /Volumes/RamDisk/.fseventsd getting new uuid: 102D7293-F1F1-4640-AA50-D547C365339F

1/08/12 1:29:24.561 PM sudo[1193]:     Aram : TTY=ttys000 ; PWD=/Library/LaunchDaemons ; USER=root ; COMMAND=/bin/launchctl load -w /Library/LaunchDaemons/com.aram.ramdisk.plist

1/08/12 1:40:17.052 PM com.apple.launchd[1]: (com.aram.ramdisk) Throttling respawn: Will start in 8 seconds

Funciona si configuro KeepAlive en true, pero luego crea un disco RAM cada 10 segundos.

¿Hay alguna forma de retrasar el script durante 10 segundos antes de ejecutarse?

    
pregunta Aram Kocharyan 01.08.2012 - 05:51

2 respuestas

0

Usando la gran respuesta de Pro Backup, puse esto junto y funciona:

#!/bin/bash
NAME="RamDisk"
while [ ! -d /Volumes ]
do
    echo "waiting..."
    sleep 2
done
if [ ! -d /Volumes/$NAME ]; then
    echo "creating ramdisk..."
    diskutil erasevolume HFS+ $NAME 'hdiutil attach -nomount ram://800000'
fi

Necesitaba esto para que mi navegador no se cacheara en mi SSD, así que eliminé esto:

rm -rf /Users/Aram/Library/Caches/Google/Chrome/Default

Y creó un enlace simbólico:

ln -s /Volumes/RamDisk/ /Users/Aram/Library/Caches/Google/Chrome/Default

EDIT:

Acabo de agregar el script como una aplicación de inicio en la configuración de usuario en mi mac, siempre funciona, aunque deja un terminal abierto. No es gran cosa para mí.

    
respondido por el Aram Kocharyan 14.04.2013 - 04:51
2

Puede retrasar la ejecución del comando diskutil en su script ramdisk.sh al anteponer la línea sleep 10 .

Suspender la ejecución durante un intervalo de tiempo, en segundos.

Tu nuevo ramdisk.sh se convierte en:

sleep 10
diskutil erasevolume HFS+ "RamDisk" 'hdiutil attach -nomount ram://800000'

Actualización # 1: lanzar ramdisk.sh cada 10 segundos y solo crear el disco RAM cuando no está allí, es una solución. Vea este script de ejemplo para una comprobación condicional de este tipo:

sleep 10
RD=RamDisk
if [ ! -e "/Volumes/$RD" ];  then
    diskutil erasevolume HFS+ "$RD" 'hdiutil attach -nomount ram://800000'
fi

Su error podría deberse a que / Volumes aún no se ha creado en el proceso de arranque en el momento en que se ejecuta su trabajo launchd. Por lo tanto, primero puede verificar la existencia de / Volumes antes de seguir ejecutando el script, como:

if [ -e "/Volumes" ];  then
    RD=RamDisk
    if [ ! -e "/Volumes/$RD" ];  then
        diskutil erasevolume HFS+ "$RD" 'hdiutil attach -nomount ram://800000'
    fi
fi

Y cuando la creación tenga éxito, es posible que desee descargar su com.aram.ramdisk.plist desde launchctl hasta el próximo arranque.

    
respondido por el Pro Backup 01.08.2012 - 09:58

Lea otras preguntas en las etiquetas