Niestety moja znajomość Linuksa jest bardzo uboga ponieważ pierwszą styczność z nim mam właśnie poprzez XBMCLive. Niemniej grzebałem i szukałem jakiś informacji. W końcu niedawno trafiłem na temat traktujący o przeniesieniu XBMC do Ramdysku.
Źródło: http://forum.xbmc.org/showthread.php?t=102462
Niby wszystko wygląda pięknie i prosto, ale dla totalnego laika nie jest to takie oczywiste. Dlatego postanowiłem przepisać całość tak, by każdy mógł zrozumieć (w myśl zasady "tłumacz, tłumacz aż zrozumiesz"). Całość jednak wymaga weryfikacji, poprawy oraz uzupełnienia w czym mam nadzieję pomogą użytkownicy forum.
Ogólnie to powinno wyglądać tak:
1 - start systemu
2 - automatyczne utworzenie Ramdysku
3 - synchronizacja XBMC z dysku do Ramdysku
4 - uruchomienie XBMC z Ramdysku po zakończonej synchronizacji
5 - synchronizacja XBMC z Ramdysku na dysk co jakiś czas poprzez Crona
6 - synchronizacja XBMC z Ramdysku na dysk przy każdym wyłączeniu kompa
UWAGA: Poniższy sposób nie został przetestowany. Każdy, kto postanowi wypróbować go w praktyce robi to na własne ryzyko. Nie ponoszę odpowiedzialności za jakiekolwiek szkody oraz utratę danych.
Bardziej szczegółowo, krok po kroku:
1 - Instalacja XBMCLive
Tutaj nie ma co pisać bo jest to proces intuicyjny i opisany w manualu XBMCLive.
2 - Utworzenie Ramdysku
XBMCLive bazuje na Ubuntu, a więc już na starcie mamy do dyspozycji dynamiczny Ramdysk, który zamontowany jest w /dev/shm/
Jednak wiele osób (w tym ja) woli utworzyć odrębny Ramdysk dla XBMC z góry określoną maksymalną wielkością (u mnie będzie to 2GB).
Tworzymy katalog dla naszego Ramdysku:
Kod: Zaznacz cały
sudo mkdir /dev/xbmcramdisk
Kod: Zaznacz cały
sudo nano /etc/fstab
Kod: Zaznacz cały
#XBMCLive Ramdysk
none /dev/xbmcramdisk tmpfs defaults,size=2048m 0 0
Zostaje jeszcze tylko zamontować Ramdysk i przydzielić uprawnienia
Kod: Zaznacz cały
sudo mount -a
sudo chown -R xbmc:xbmc /dev/xbmcramdisk
sudo chmod -R 755 /dev/xbmcramdisk
3 - Utrwalenie Ramdysku
Jak wiadomo RAM ma to do siebie, że traci dane przy każdym restarcie. Tak więc by tego uniknąć trzeba synchronizować je pomiędzy Ramdyskiem, a HDD. Wtedy przy każdym wyłączeniu kompa dane z Ramdysku będą zgrywane na dysk twardy i po włączeniu przywracane z powrotem.
Tworzymy katalog do synchronizacji naszego Ramdysku
Kod: Zaznacz cały
mkdir /home/.xbmcramdisk.disk
Kod: Zaznacz cały
sudo nano /etc/init.d/xbmcramdisk.sh
Kod: Zaznacz cały
#! /bin/sh
# /etc/init.d/xbmcramdisk.sh
#
case "$1" in
start)
echo "Kopiowanie danych z HDD do Ramdysku"
rsync -av /home/.xbmcramdisk.disk/ /dev/xbmcramdisk/
#echo [`date +"%Y-%m-%d %H:%M"`] Kopiowanie danych z HDD do Ramdysku: gotowe >> /var/log/xbmcramdisk_sync.log
;;
sync)
echo "Synchronizacja danych z Ramdysky na HDD"
#echo [`date +"%Y-%m-%d %H:%M"`] Synchronizacja danych z Ramdysku na HDD: gotowe >> /var/log/xbmcramdisk_sync.log
rsync -av --delete --recursive --force /dev/xbmcramdisk/ /home/.xbmcramdisk.disk/
;;
stop)
echo "Synchronizacja danych z Ramdysky na HDD"
#echo [`date +"%Y-%m-%d %H:%M"`] Synchronizacja danych z Ramdysku na HDD: gotowe >> /var/log/xbmcramdisk_sync.log
rsync -av --delete --recursive --force /dev/xbmcramdisk/ /home/.xbmcramdisk.disk/
;;
*)
echo "Usage: /etc/init.d/xbmcramdisk.sh {start|stop|sync}"
exit 1
;;
esac
exit 0
Kod: Zaznacz cały
sudo chmod +x /etc/init.d/xbmcramdisk.sh
Kod: Zaznacz cały
sudo /etc/init.d/xbmcramdisk.sh sync
Dodajemy do rc by skrypt synchronizacji uruchamiał się przy każdym starcie systemu
Kod: Zaznacz cały
sudo update-rc.d xbmcramdisk.sh defaults 00 99
Dla bezpieczeństwa powinno się dodać do Crona by synchronizacja danych z Ramdysku na HDD odbywała się cyklicznie co jakiś czas. Niestety nie znam się na Cronie (moje pierwsze próby opanowania go okazały się porażką).
4 - Przeniesienie XBMC do Ramdysku
Zatrzymujemy XBMC
Kod: Zaznacz cały
sudo service xbmc-live stop
Kod: Zaznacz cały
cp -a /home/xbmc/.xbmc /dev/xbmcramdisk
Kod: Zaznacz cały
mv /home/xbmc/.xbmc /home/xbmc/.xbmc_backup
Kod: Zaznacz cały
ln -s /dev/xbmcramdisk/.xbmc /home/xbmc/.xbmc
Kod: Zaznacz cały
sudo /etc/init.d/xbmcramdisk.sh sync
Kod: Zaznacz cały
sudo service xbmc-live stop
Największym mankamentem owej metody jest to, że start xbmc i skryptu synchronizującego są niezależne. Może się zdarzać, że system będzie chciał uruchomić xbmc zanim się on w pełni zsynchronizuje w Ramdysku. Wg autora rozwiązaniem problemu może być przeniesienie komendy uruchamiającej do skryptu synchronizacji. W teorii brzmi banalnie, ale w praktyce nie mam pojęcia jak to wykonać (nie znam składni skryptów sh).
Tak więc jeśli jest coś nie tak w powyższym opisie to prośba o wskazanie błędu i propozycję jego poprawy. Przydało by się też uzupełnić opis o edycję Crona oraz przeniesienia autostartu do skryptu.
P.S. Jak zaznaczyłem na początku to nie ja jestem autorem tutoriala. Jedynie przepisałem go ze źródła i uzupełniłem o swoje komentarze tak, by całość była bardziej zrozumiała dla początkujących użytkowników.
-- 11 lip 2011, o 11:07 --
Trochę poczytałem i zdaje mi się, że znalazłem sposób na to by xbmc uruchamiał się wyłącznie z Ramdysku.
Usunięcie XBMC z autostartu
Kod: Zaznacz cały
update-rc.d -f xbmc-live remove
Zmodyfikowany skrypt synchronizacji
Kod: Zaznacz cały
#! /bin/sh
# /etc/init.d/xbmcramdisk.sh
#
case "$1" in
start)
echo "Kopiowanie danych z HDD do Ramdysku"
rsync -av /home/.xbmcramdisk.disk/ /dev/xbmcramdisk/
#echo [`date +"%Y-%m-%d %H:%M"`] Kopiowanie danych z HDD do Ramdysku: gotowe >> /var/log/xbmcramdisk_sync.log
service xbmc-live start
#echo [`date +"%Y-%m-%d %H:%M"`] Uruchomienie XBMCLive z Ramdysku >> /var/log/xbmcramdisk_sync.log
;;
sync)
echo "Synchronizacja danych z Ramdysky na HDD"
#echo [`date +"%Y-%m-%d %H:%M"`] Synchronizacja danych z Ramdysku na HDD: gotowe >> /var/log/xbmcramdisk_sync.log
rsync -av --delete --recursive --force /dev/xbmcramdisk/ /home/.xbmcramdisk.disk/
;;
stop)
echo "Synchronizacja danych z Ramdysky na HDD"
#echo [`date +"%Y-%m-%d %H:%M"`] Synchronizacja danych z Ramdysku na HDD: gotowe >> /var/log/xbmcramdisk_sync.log
rsync -av --delete --recursive --force /dev/xbmcramdisk/ /home/.xbmcramdisk.disk/
;;
*)
echo "Usage: /etc/init.d/xbmcramdisk.sh {start|stop|sync}"
exit 1
;;
esac
exit 0