Come montare un disco RAM all'avvio?

5

Sto provando a montare un disco RAM all'avvio con questo:

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

E poi in esecuzione:

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

Ma li ho nella console:

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

Funziona se imposto KeepAlive su true, ma poi crea un disco RAM ogni 10 secondi.

C'è un modo per ritardare lo script per 10 secondi prima di eseguire?

    
posta Aram Kocharyan 01.08.2012 - 05:51
fonte

2 risposte

0

Usando l'ottima risposta di Pro Backup, lo metto insieme e funziona:

#!/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

Avevo bisogno di questo in modo che il mio browser non memorizzasse nella cache il mio SSD, quindi l'ho eliminato:

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

E ha creato un link simbolico:

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

Modifica

Ho appena aggiunto lo script come applicazione di avvio nelle impostazioni utente sul mio Mac, funziona sempre, anche se lascia un terminale aperto. Nessun grosso problema per me.

    
risposta data 14.04.2013 - 04:51
fonte
2

Puoi ritardare l'esecuzione del comando diskutil nello script ramdisk.sh anteponendo la riga sleep 10 .

Sospensione sospende l'esecuzione per un intervallo di tempo, in secondi.

Il tuo nuovo ramdisk.sh diventa:

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

Aggiornamento n. 1: l'avvio di ramdisk.sh ogni 10 secondi e la creazione del disco RAM solo quando non è presente, è una soluzione alternativa. Vedi questo script di esempio per un controllo condizionale di questo tipo:

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

Il tuo errore potrebbe essere causato dal fatto che / Volumes non è già stato creato nel processo di avvio nel momento in cui viene eseguito il tuo lavoro di avvio. Pertanto è possibile prima verificare l'esistenza di / Volumes prima ancora di eseguire lo script, ad esempio:

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

E quando la creazione ha esito positivo, potresti voler scaricare il tuo com.aram.ramdisk.plist da launchctl fino al prossimo avvio.

    
risposta data 01.08.2012 - 09:58
fonte

Leggi altre domande sui tag