Przeniesienie XBMCLive do RAMDysku
: 08 lip 2011, 11:50
Obecnie w moim htpc jest zainstalowany XBMCFreak (modyfikacja XBMCLive pod komputery z ION2) na pendrive. Transfery są niestety bardzo mizerne i równie mizernie działa cały zestaw. Zaczęło mi to bardzo przeszkadzać dlatego zainteresowałem się Ramdyskami. Obecnie w htpc zainstalowane jest 4GB więc jest na czym się bawić.
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:
Edytujemy fstab
Dodajemy na końcu i zapisujemy zmiany
Można również użyć ramfs zamiast tmpfs. Główna różnica jest taka, że ramfs rozrasta się dynamicznie w zależności od ilości danych (może zapchać cały ram) zaś tmpfs nie pozwoli na zapis powyżej ustawionej wielkości Ramdysku.
Zostaje jeszcze tylko zamontować Ramdysk i przydzielić uprawnienia
Teraz mamy automatycznie montowany Ramdysk o wielkości 2GB w katalogu /dev/xbmcramdisk przy każdym starcie systemu.
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
Teraz tworzymy skrypt do synchronizacji
W skrypcie wklejamy
Nadajemy uprawnienia
Testujemy
Wszystko co wsadzimy do Ramdysku powinno być tam po restarcie.
Dodajemy do rc by skrypt synchronizacji uruchamiał się przy każdym starcie systemu
W rezultacie powinniśmy otrzymać Ramdysk, który będzie przywracany przy każdym restarcie kompa.
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
Kopiujemy XBMC do Ramdysku
Przenosimy XBMC znajdujący się na dysku do xbmc_backup (zawsze dobrze mieć kopię bezpieczeństwa)
Tworzymy link przekierowujący do XBMC w Ramdysku
Synchronizujemy pliki
Uruchamiamy XBMC
Powinien się uruchomić już z Ramdysku.
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
Komenda ta zostawia skrypt startowy xbmc-live w katalogu init.d przez co teoretycznie nadal powinna działać komenda service xbmc-live start
Zmodyfikowany skrypt synchronizacji
Nie wiem czy nie popełniłem błędu, ale wydaje mi się, że nie. Nie wiem jeszcze czy skrypt basha uruchamia kolejne komendy po zakończeniu poprzedniej, czy robi to po kolei niezależnie. Chodzi dokładnie to to czy uruchomienie xbmc nastąpi dopiero po zakończeniu komendy rsync.
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