Przeniesienie XBMCLive do RAMDysku

Tutaj można zadać pytanie, jeśli Linuksa widzi się pierwszy raz w życiu ;)
Neotix
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 08 lip 2011, 10:53
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: Brak
Architektura: x86

Przeniesienie XBMCLive do RAMDysku

Post autor: Neotix »

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:

Kod: Zaznacz cały

sudo mkdir /dev/xbmcramdisk
Edytujemy fstab

Kod: Zaznacz cały

sudo nano /etc/fstab
Dodajemy na końcu i zapisujemy zmiany

Kod: Zaznacz cały

#XBMCLive Ramdysk
none    /dev/xbmcramdisk    tmpfs    defaults,size=2048m    0    0
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

Kod: Zaznacz cały

sudo mount -a
sudo chown -R xbmc:xbmc /dev/xbmcramdisk
sudo chmod -R 755 /dev/xbmcramdisk
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

Kod: Zaznacz cały

mkdir /home/.xbmcramdisk.disk
Teraz tworzymy skrypt do synchronizacji

Kod: Zaznacz cały

sudo nano /etc/init.d/xbmcramdisk.sh
W skrypcie wklejamy

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
Nadajemy uprawnienia

Kod: Zaznacz cały

sudo chmod +x /etc/init.d/xbmcramdisk.sh
Testujemy

Kod: Zaznacz cały

sudo /etc/init.d/xbmcramdisk.sh sync
Wszystko co wsadzimy do Ramdysku powinno być tam po restarcie.

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

Kod: Zaznacz cały

sudo service xbmc-live stop
Kopiujemy XBMC do Ramdysku

Kod: Zaznacz cały

cp -a /home/xbmc/.xbmc /dev/xbmcramdisk
Przenosimy XBMC znajdujący się na dysku do xbmc_backup (zawsze dobrze mieć kopię bezpieczeństwa)

Kod: Zaznacz cały

mv /home/xbmc/.xbmc /home/xbmc/.xbmc_backup
Tworzymy link przekierowujący do XBMC w Ramdysku

Kod: Zaznacz cały

ln -s /dev/xbmcramdisk/.xbmc /home/xbmc/.xbmc
Synchronizujemy pliki

Kod: Zaznacz cały

sudo /etc/init.d/xbmcramdisk.sh sync
Uruchamiamy XBMC

Kod: Zaznacz cały

sudo service xbmc-live stop
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

Kod: Zaznacz cały

update-rc.d -f xbmc-live remove
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

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
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.
ODPOWIEDZ

Wróć do „Przedszkole Linuksa”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 23 gości