środa, 22 listopada 2017

Kopia bezpieczeństwa bazy, folderu Domoticz oraz innych elementów

Jak mówią, ludzie dzielą się na tych, którzy backupy robią i na takich, którzy będą robić.

Żeby za późno nie znaleźć się w tej drugiej grupie - szybki skrypt do tworzenia backupu (na przykład Domoticz i HABridge) na zewnętrzny dysk. W moim przypadku pendrive, z którego do dane czasem zgrywam na osobny dysk zewnętrzny. Jest co prawda mechanizm wbudowany w Domoticz, ale osobiście mi on nie odpowiadał - robi backup na tą samą kartę, na której jest Domoticz, więc sensu to nie ma...



Raz, dwa trzy, skrypt piszesz Ty. Nie ukrywam - jest to zmieniony pod moim kątem skrypt z Wiki Domoticz. Ale po to jest Wiki...

Zaczynamy więc od:

sudo nano /home/pi/domoticz/scripts/domoticz_backup.sh 

Wpisujemy (oczywiście zmieniając dane do Domoticz oraz foldery, na które chcecie kopiować). Ja, jak widać, dodatkowo robię sobie backup HABridge pod kątem Alexa.

DOMO_IP="192.168.1.200"  # Domoticz IP 
DOMO_PORT="80"        # Domoticz port 
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticzbackup_$TIMESTAMP.db" # backups will be named "domoticz_YYYYMMDDHHMMSS.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz

#Create backup and make tar archives
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /media/Dysk/Domoticz_backup/database/$BACKUPFILE
tar -zcvf /media/Dysk/Domoticz_backup/scripts/domoticz_scripts_$TIMESTAMP.tar.gz /home/pi/domoticz/scripts/
tar -zcvf /media/Dysk/Domoticz_backup/www/domoticz_wwwfolder_$TIMESTAMP.tar.gz /home/pi/domoticz/www/
tar -zcvf /media/Dysk/HABridge/HABridge_$TIMESTAMP.tar.gz /home/pi/habridge/data/

#Delete backups older than 31 days
/usr/bin/find /media/Dysk/Domoticz_backup/database/ -name '*.db' -mtime +31 -delete
/usr/bin/find /media/Dysk/Domoticz_backup/scripts/ -name '*.tar.gz' -mtime +31 -delete
/usr/bin/find /media/Dysk/Domoticz_backup/www/ -name '*.tar.gz' -mtime +31 -delete
/usr/bin/find /media/Dysk/HABridge/ -name '*.tar.gz' -mtime +31 -delete

Nadajemy uprawnienia do uruchamiania:

sudo chmod +x /home/pi/domoticz/scripts/domoticz_backup.sh

Efekt:



Ja ustawiłem sobie uruchamianie go na 1:30 w nocy w cron (czyli crontab -e):

30 1 * * * sudo /home/pi/domoticz/scripts/domoticz_backup.sh

Oby się Wam backup nigdy nie przydał... Ale niestety, podczas pracy z Raspberry Pi widzę, że nie jest to widzimisię, a konieczność! 

Oczywiście można go zmienić, aby backupy lądowały na zewnętrznym FTP, czy też dysku NAS. Dla mnie jednak ta forma jest wystarczająca.

44 komentarze:

  1. Cześć
    Nie do końca rozumiem gdzie wybierasz miejsce na backup.
    Czy to ścieżka:
    /media/Dysk/Domoticz_backup/database.
    Czy wystarczy podpiąć nośnik USB i RBpi go wykrywa pod /media/?

    Tomek

    OdpowiedzUsuń
    Odpowiedzi
    1. Wersja Stretch na pewno wykryje pendrive, aby się upewnić zrobiłem tak jak w ogólnym opisie konfiguracji: http://cezarowy.blogspot.com/2017/11/raspberry-pi-raspbian-domoticz-od-zera.html?m=1. Pendrive mapuje się u mnie pod /media/ Dysk. Później wszystko ląduje w folderze Domoticz_backup

      Usuń
  2. Cezary powiedz mi po zrobieniu skryptu i nadaniu uprawnień powinien z automatu stworzyć sie folder? Bo jakoś nie wiedzę u siebie na pendrive nic.

    OdpowiedzUsuń
    Odpowiedzi
    1. Cezar, nie Cezary :D Muszę chyba zmienić nazwę bloga ;)

      Ale tak na poważnie - folderów skrypt nie tworzy - musisz je założyć sam.

      Usuń
  3. crontab: installing new crontab
    new crontab file is missing newline before EOF, can't install.
    Do you want to retry the same edit? (y/n)
    co jest nie tak?

    OdpowiedzUsuń
    Odpowiedzi
    1. Chociaż w tmp są trzy foldery z nazwą cron a w srodku plik tekstowy między innymi z komendą o uruchamianiu skryptu bezpośrednio pod ostatnią linijką

      Usuń
    2. Co dokładnie wklejasz do cron? Komenda jest w jednej linii?

      Usuń
  4. Witam
    Chciałem na początek wykonać kopię na tej samej karcie co uruchamia się system. Zrobiłem tak:
    #!/bin/bash
    DOMO_IP="192.168.0.100" # Domoticz IP
    DOMO_PORT="8080" # Domoticz port
    ### END OF USER CONFIGURABLE PARAMETERS
    TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
    BACKUPFILE="domoticzbackup_$TIMESTAMP.db" # backups will be named "domoticz_YYYYMMDDHHMMSS.db.gz"
    BACKUPFILEGZ="$BACKUPFILE".gz

    #Create backup and make tar archives
    /usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /home/domoticz/backup/database/$BACKUPFILE
    tar -zcvf /home/domoticz/backup/scripts/domoticz_scripts_$TIMESTAMP.tar.gz /home/domoticz/domoticz/scripts/
    tar -zcvf /home/domoticz/backup/www/domoticz_wwwfolder_$TIMESTAMP.tar.gz /home/domoticz/domoticz/www/



    #Delete backups older than 10 days
    /usr/bin/find /home/domoticz/backup/database/ -name '*.db' -mtime +10 -delete
    /usr/bin/find /home/domoticz/backup/scripts/ -name '*.tar.gz' -mtime +10 -delete
    /usr/bin/find /home/domoticz/backup/www/ -name '*.tar.gz' -mtime +10 -delete

    sudo chmod +x /home/domoticz/domoticz/scripts/domoticz_backup.sh

    uruchamiam tak:
    0 1 * * * sudo ~/domoticz/scripts/domoticz_backup.sh

    kopia ma być
    /home/domoticz/backup/database
    /home/domoticz/backup/scripts
    /home/domoticz/backup/www

    domoticz mam zainstalowany w /home/domoticz/domoticz

    ale nic nie zapisuje

    OdpowiedzUsuń
  5. Dobra fałszywy alarm - brakowało curl
    po sudo apt install curl

    działa

    Pozdrawiam
    Wesołych Świąt

    OdpowiedzUsuń
    Odpowiedzi
    1. Cześć
      Daj znać jak uda Ci się z zewnętrznym pendrivem.

      Usuń
  6. Witaj,
    Poległem na tym :-(
    czy ścieżka ze skryptu powinna zgadzać się ze ścieżką z folderu docelowego?
    np: wg opisu u ciebie jest:
    media/Dysk/Domoticz_backup/scripts/domoticz_scripts
    w załącznikach z folderu docelowego masz bez "domoticz scripts"
    Mam wszystko wg. opisu i nie działa..
    podejrzewam że coś z folderem docelowym na USB

    OdpowiedzUsuń
    Odpowiedzi
    1. Zaraz zaraz. Folder to media/Dysk/Domoticz_backup/scripts/ i tam ląduje skompresowany plik z nazwą domoticz_scripts_$TIMESTAMP, czyli z kolejnymi dniami.

      Usuń
    2. Ten komentarz został usunięty przez autora.

      Usuń
    3. zmieniłem wpis w cron na :
      30 1 * * * /home/pi/domoticz/scripts/domoticz_backup.sh
      i działa:-)

      Usuń
    4. Ajjjjj kurde. Masz rację! Zapomniałem o tym pisząc z pamięci. Już poprawiam!

      Usuń
    5. Ale przez to się trochę nauczyłem:-) i raz jeszcze dzięki za dobrą robotę dużo korzystam z Twojego bloga!

      Usuń
    6. Ostatnio trochę spowolniłem, bo 'nie wyrabiam na zakrętach' :) Za dużo rzeczy naraz chcę zrobić.

      Usuń
    7. nie chce tu zaśmiecać ale polecisz jakiś dysk ssd do raspberry na domoticz i czy twój opis będzie sie nadawał do jego uruchomienia(masz wpis )
      koniecznie chce przenieść całość na dysk bo karta -wiesz jak jest.

      Usuń
    8. W sumie to słyszałem, że najlepiej coś 80-120 GB, ważne aby miały obsługę TRIM.

      Usuń
  7. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  8. Cezar, potrzebuję pomocy :-)
    Dostałem mojego aktywnego huba - przeniosłem wszystko na dysk hdd :-). I poszedłem krok dalej, chciałem zrobić kopię na pendrive. I tu pojawia się mój problem. Kopie tworzą się zgodnie z utworzonym skryptem i już moja radość była wielka :-). Ale zastanowiło mnie jedno - mam zarówno kartę SD 32 GB jak i pendrive 32 GB. I okazało się, że u mnie prawdopodobnie pod sda - pojawia się karta SD, natomiast pendrive widać jako: Disk /dev/mmcblk0: 28,8 GiB, 30953963520 bytes, 60456960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x729b2349

    Zmieniłem więc lokalizację w pliku fstab i w położeniu pliku podałem prawidłową lokalizację:/dev/mmcblk0

    I teraz nie wiem, czy to już wystarczy, aby kopie pojawiały się we właściwym miejscu? Czy powinienem jeszcze coś zmienić? Zmieniłem w cronie czas kopii, aby sprawdzić, czy kopia utworzy się prawidłowo - i w pliku media/Dysk/database (i pozostałe) pojawia się kopia. Tylko nie bardzo wiem, jak sprawdzić, gdzie fizycznie znajdują się te pliki. Próbowałem sprawdzić pendrive w laptopie (przy Windows10), ale pendrive wydaje się czysty. To był nowy pendrive - czy wcześniej wymagany był jakiś format? I ewentualnie na jaki system plików?

    OdpowiedzUsuń
    Odpowiedzi
    1. Na mój stan wiedzy - jeżeli cokolwiek się 'mountuje', to na pewno karta SD NIE na sda, sdb, itp.

      Usuń
  9. I jeszcze jedno zmieniłem komendę przy montowaniu
    z sudo mount -t auto /dev/sda /media/Dysk
    na sudo mount -t auto /dev/mmcblk0/media/Dysk
    Więc teraz wygląda na to, że mam kopie jak chciałem,tylko nie bardzo wiem w jakiej lokalizacji. :-)

    OdpowiedzUsuń
  10. Kurcze, czytam teraz chyba wszystko, co jest dostępne w necie, żeby sprawdzić jakie są fizyczne lokalizacje moich plików (co mam na HDD, co na pendrive i co na SD). I trochę rośnie mój informatyczny chaos. Bo być może poszedłem złym tropem i jednak pendrive przedstawiał się u mnie jako /dev/sda (całe zamieszanie przez taką samą pojemność pendrive i SD).
    Nie wiem jak można dodać tutaj zrzut (podlinkuję https://www.fotosik.pl/zdjecie/2203fe2d86212fe0). Wydaje mi się, że skoro boot nastepuje z /dev/sdal - to jednak pendrive jest na /dev/mmcblk0..

    OdpowiedzUsuń
  11. Jednak chyba jestem w błędzie - system jest na /dev/mmcblk0 - coś co się zgłasza powyżej, natomiast pendrive montuje się z automatu jako dev/sda. Więc chyba muszę znowu zmienić fsdal na pierwotny, zgodnie z Twoim poradnikiem...

    OdpowiedzUsuń
  12. Zrobiłem testy (po wyjęciu pendrive z huba - fdisk nie pokazuje dysku /dev/sda), po wpięciu ten dysk się pojawia. Zrobiłem więc wszystko zgodnie z instrukcją. Wykonałem test zrobienia backupu - w ścieżce /media/Dysk/(podfoldery) pojawia się kopia. Pytanie tylko czy można sprawdzić jakoś fizycznie, czy te pliki zapisały się na pendrive? z poziomu maliny? z poziomu pc z windows?

    OdpowiedzUsuń
    Odpowiedzi
    1. Przepraszam, że długo nie odpisuję, codzienne obowiązki wciągają... Widzę, że z większością już sobie poradziłeś. Co do plików nie bardzo rozumiem - jeżeli je widzisz to są. Uruchom mc (Midnight Commander), albo jak mówisz sprawdź pendrive na komputerze, czy też wejdź na Raspberry przez FTP lub Samba - (oba trzeba doinstalować) i pliki muszą być widoczne w podfolderach.

      Usuń
  13. A więc jak widzisz walczę (i wychodzi niestety moja ignorancja w linuxie). A więc jak napisałem, kopie wszystkiego co zostało zdefiniowane się pojawiają. W mc widzę w ścieżce: media/Dysk/i kolejne podfoldery wszystkie pliki z datą i godzina zdefiniowaną w cron'ie. Tylko nie do końca jestem przekonany, gdzie fizycznie się znajdują (czy na pendrive, czy na SD albo HDD). Jak wyjmuję pendrive i sprawdzam w laptopie (windows 10), to pokazuje mi pustą zawartość. Aczkolwiek jak sprawdzam we właściwościach, to mam zajęte kilkadziesiąt MB. Być może wiąże się to, z różnymi systemami plików miedzy Linux a Windows (i dlatego nic nie widzę w zawartości). I nie wiem jak to do końca sprawdzić.
    PS. Wczoraj walczyłem z podłączeniem żarówki Yeelight do Domoticz (dalej do HAB i Alexy). Chińczycy wprowadzili jakieś małe zmiany i teraz trochę inaczej to wygląda, niż w Twoim poradniku. Ale w końcu osiągnąłem sukces :-)

    OdpowiedzUsuń
  14. Korzystając z okazji - mógłbyś powiedzieć jak przywrócić ewentualnie dane z plików w backup'ie? Czy zrobić to jakimś skryptem? Czy można fizycznie (np. w mc) przekopiować rozpakowane pliki do właściwych lokacji? (wiem, może znowu prozaiczne pytanie początkującego). :-)

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie ma nic złego w pytaniu innych. Ta kopia jest bardzo prosta - Domoticz oparty jest na bazie SQLite, która jest bazą plikową - wystarczy zastąpić plik, tak samo jak z folderami www, scripts, itp.

      Usuń
  15. Czyli rozumiem, że w backup'ie tworzą się codziennie pliki. W przypadku przywracania wybieram ostatni (albo ten, który chcę) i rozpakowuję do właściwego katalogu Domoticza (www do www, scripts do scripts, itd). Czyli reasumując - przywrócenie określonego pliku z każdego z podfolderów do odpowiadających im nazwom folderom Domoticza (rozumiem, ze dla HAB i innych dokładnie tak samo).

    OdpowiedzUsuń
    Odpowiedzi
    1. Dokładnie. Jak się uprzeć, to możesz zrobić jedną kopię - całego folderu Domoticz :D

      Usuń
  16. Super, dzięki wielkie za wsparcie :-)

    Wracając do fizycznej lokalizacji plików backup. Mógłbyś mi ewentualnie powiedzieć, czy jeżeli wkładam pendrive do laptopa (windows), to powinny być widoczne pliki? Widzę, że jest jakaś alokacja na kilkadziesiąt MB (windows mówi, że dysk jest pusty), ale mogą to być jakieś wewnętrzne informacje. Bo wydaje mi sie, że być może te pliki, które powstają alokują się na SD.
    Tak się zastanawiam, czy jak wyjmę pendrive z huba, to pliki będą widoczne czy nie np. w mc (wtedy wynik testu byłby jasny).
    Przepraszam, że tak Cię absorbuję moimi pytaniami, ale być może inni początkujący znajdą tu odpowiedź na te same pytania.

    OdpowiedzUsuń
    Odpowiedzi
    1. Tak, oczywiście powinny być widoczne. To przecież nic innego jak pliki. Pytanie - w jakim formacie plików masz sformatowany pendrive. Ja mam na przykład FAT32 właśnie po to, żeby mógł sobie go użyć gdziekolwiek chcę - laptop, Malina, cokolwiek. A pytam dlatego, że Windows domyślnie nie widzi ext4 - nie wiem jak masz Ty.

      Się nie przejmuj - pisz. Każdy kiedyś zaczynał. Jak wolisz, to możemy przejść na priv, będzie szybciej.

      Usuń
  17. No więc właśnie nie widać u mnie plików. A skoro mc je widzi, to znaczy, że są gdzieś w innej lokacji. Pendrive mam chyba w ntfs (pisze "chyba" bo wcześniej miałem w FAT32 i też nie było plików). Wrócę po pracy to zaraz sprawdzę i ewentualnie zrobię format do FAT32 i kolejne próby :-).
    Jeżeli możesz podać priv to byłoby super - nie będę zaśmiecał bloga moimi stricte technicznymi problemami. :-)

    OdpowiedzUsuń
  18. Żadne to zaśmiecanie, wiele osób może skorzystać. Jedno nie jest dla mnie jasne - zawartość przecież powinna być widoczna tam gdzie zrobiłeś mount i założyłeś folder. U mnie na przykład /media/Dysk/. Podaj adres e-mail, ale rozdziel odpowiednio, żeby boty nie wyłapały.

    OdpowiedzUsuń
  19. Założyłem folder zgodnie z Twoją instrukcją w mc pojawia się w media/Dysk...(jeżeli dobrze pamiętam, to muszę wyjść poziom wyżej z użytkownika)
    Mój mail: maciekkow(at)poczta.fm (mam nadzieje, że przejdzie.

    OdpowiedzUsuń
  20. Jak tylko wrócę z pracy to zaraz dokładnie to przejrzę. Zmieniałem to kilka razy, więc chwilowo nie wiem, czy nie ma tam gdzieś prostego błędu.
    Email jest widoczny, czy go odfiltrowało?

    OdpowiedzUsuń
  21. Co może być powodem, że pliki w katalogu database mają wielkość 0, kopia skryptów i stron- w porządku.

    OdpowiedzUsuń
  22. Też jestem zainteresowany tym, że plik database jest równy 0.

    OdpowiedzUsuń
    Odpowiedzi
    1. Wyglada mi na to, że skrypt robiący kopię nie działa poprawnie/jest źle wywoływany.

      Usuń
  23. Cezarze, jeszcze jedno pytanie - dzisiaj jestem już trochę mądrzejszy niż w lutym, ale czasami mam problemy z podstawami. :-) W którym miejscu rozpakować pliki z backupu Influx? Z pozostałymi nie ma problemu - katalogi sa zdefiniowane, HABridge też jest prosty. Ale nie bardzo wiem, gdzie rozpakować Influxa?

    OdpowiedzUsuń
    Odpowiedzi
    1. Tutaj musisz użyć komendy influxd restore - sam zadba aby dane znalazły się w dobrym miejscu.

      Usuń