Jak zamontować dysk RAM podczas uruchamiania?

6

Próbuję zamontować dysk RAM podczas uruchamiania za pomocą tego:

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

A następnie działa:

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

Ale dostaję je w konsoli:

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

Działa, jeśli ustawię KeepAlive na true, ale wtedy tworzy dysk RAM co 10 sekund.

Czy istnieje sposób na opóźnienie skryptu o 10 sekund przed uruchomieniem?

Aram Kocharyan
źródło
Jakiej wersji OSX używasz?
de_an777
Mountain Lion ...
Aram Kocharyan

Odpowiedzi:

2

Możesz opóźnić wykonanie polecenia diskutil w skrypcie ramdisk.sh, przygotowując wiersz sleep 10.

Tryb uśpienia zawiesza wykonanie na pewien czas, w sekundach.

Twój nowy ramdisk.sh staje się:

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

Aktualizacja nr 1: uruchamianie ramdisk.sh co 10 sekund i tworzenie dysku RAM tylko wtedy, gdy go nie ma, jest obejściem. Zobacz ten przykładowy skrypt dla takiej kontroli warunkowej:

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

Twój błąd może być spowodowany, ponieważ / Volumes nie jest już tworzone w procesie rozruchu w momencie uruchomienia uruchomionego zadania. Dlatego możesz najpierw sprawdzić obecność / Volumes, zanim jeszcze wykonasz skrypt, na przykład:

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

A gdy tworzenie się powiedzie, możesz chcieć zwolnić com.aram.ramdisk.plist od launchctl do następnego uruchomienia.

Pro Backup
źródło
2
Może to być dobre zastosowanie dla QueueDirectoriessłowa kluczowego w uruchomionej konfiguracji (aby upewnić się, że /Volumesjest dostępne)
nohillside
Mam ten sam problem ze skryptem tworzenia dysku RAM. I ten sam problem, działa tylko wtedy, gdy dodam sleep 10na początku. Chciałbym dowiedzieć się dokładnie, dlaczego sen jest potrzebny. Próbowałem sprawdzić / Volumes, ale jest tam od samego początku, więc musi to być coś innego.
l008com
0

Korzystając ze świetnej odpowiedzi Pro Backup, zestawiłem to i działa:

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

Potrzebowałem tego, aby moja przeglądarka nie buforowała mojego dysku SSD, więc usunąłem to:

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

I utworzył dowiązanie symboliczne:

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

EDYTOWAĆ:

Właśnie dodałem skrypt jako aplikację startową w ustawieniach użytkownika na moim komputerze Mac, zawsze działa, chociaż pozostawia terminal otwarty. Nic wielkiego dla mnie.

Aram Kocharyan
źródło
Dlaczego nie chcesz, aby Twoja przeglądarka buforowała dysk SSD? Aby uzyskać więcej miejsca?
Shane Hsu
1
Głównie w celu zmniejszenia drobnych zapisów przy każdej zmianie pamięci podręcznej. Potrzebuję pamięci podręcznej, aby przyspieszyć przeglądanie, i używam komputera przez cały dzień, więc posiadanie go w pamięci RAM nie ma żadnego innego wpływu niż ograniczenie użycia dysku. Możliwe, że różnica w oczekiwanej długości życia nie wpłynie na mnie, ale przez wiele lat może być różnica.
Aram Kocharyan