6 votes

Comment monter un disque RAM au démarrage ?

J'essaie de monter un disque RAM au démarrage avec ceci :

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

Et puis courir :

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

Mais j'ai ça dans la 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

Cela fonctionne si je mets KeepAlive à true, mais alors il crée un disque RAM toutes les 10 secondes.

Existe-t-il un moyen de retarder le script de 10 secondes avant son exécution ?

3voto

Pro Backup Points 3456

Vous pouvez retarder l'exécution de la commande diskutil dans votre script ramdisk.sh en faisant précéder la ligne sleep 10 .

Sleep suspend l'exécution pendant un intervalle de temps, en secondes.

Votre nouveau ramdisk.sh devient :

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

Update#1 : lancer le ramdisk.sh toutes les 10 secondes et ne créer le disque RAM que lorsqu'il n'est pas là, est une solution de contournement. Voir cet exemple script pour une telle vérification conditionnelle :

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

Votre erreur peut être causée par le fait que /Volumes n'est pas déjà créé dans le processus de démarrage au moment où votre job launchd est exécuté. Par conséquent, vous pourriez d'abord vérifier l'existence de /Volumes avant même d'exécuter le script, comme :

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

Et lorsque la création réussit, vous pouvez décharger votre com.aram.ramdisk.plist de launchctl jusqu'au prochain démarrage.

1voto

Aram Kocharyan Points 1051

En utilisant l'excellente réponse de Pro Backup, j'ai assemblé ceci et cela fonctionne :

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

J'en avais besoin pour que mon navigateur ne mette pas en cache mon SSD, donc je l'ai supprimé :

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

Et j'ai créé un lien symbolique :

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

EDITAR:

Je viens d'ajouter le script comme application de démarrage dans les paramètres de l'utilisateur sur mon mac, cela fonctionne toujours, mais laisse un terminal ouvert. Ce n'est pas un problème pour moi.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X