6 votos

¿Cómo montar un disco RAM al arrancar?

Estoy tratando de montar un disco RAM en el arranque con esto:

/Usuarios/Aram/Desarrollo/Herramientas/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 a correr:

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

Pero me salen 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 pongo KeepAlive en true, pero entonces crea un disco RAM cada 10 segundos.

¿Hay alguna forma de retrasar el script 10 segundos antes de que se ejecute?

3voto

Pro Backup Puntos 2314

Puede retrasar la ejecución del comando diskutil en su ramdisk.sh script anteponiendo 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 el ramdisk.sh cada 10 segundos y sólo crear el disco RAM cuando no esté, es una solución. Vea este ejemplo script para una comprobación condicional:

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

Su error puede deberse a que /Volumes no está ya creado en el proceso de arranque en el momento en que se ejecuta su tarea launchd. Por lo tanto, podría comprobar primero la existencia de /Volumes antes de ejecutar el script, por ejemplo:

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 de launchctl hasta el próximo arranque.

1voto

Mob Puntos 167

Usando la gran respuesta de Pro Backup armé esto 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 guardara caché en mi SSD, así que borré esto:

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

Y creado un enlace simbólico:

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

EDITAR:

Acabo de añadir el script como 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í.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X