Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Budowanie NAS

Zaczęty przez sebekoo, Luty 03, 2019, 02:02:52 PM

Poprzedni wątek - Następny wątek

sebekoo

Jeśli jeszcze coś to napisz.

TataPingu

Cytat: sebekoo w Kwiecień 08, 2019, 10:41:26 PM
Jeśli jeszcze coś to napisz.

Na razie OK, jutro skupię sie nad tym i doprowadzimy to do stanu "używalności"...

Jedynie, co mógłbyś teraz potestować, to prawidłowo działającą komendę rsynca...
- startujesz "ręcznie" Zyxela (ZyxelSTART.sh) i "ręcznie" startujesz (z roota) rsync...

sebekoo

#377
wszystko wykonywałem przez VNC jako root
Uruchomiłem "ręcznie' ZyxelSTART.sh jako root. Zyxel uruchomił się i serwer pod-montował zasób Zyxela.
W jednym oknie uruchomiony ZyxelSTART.sh co trzy minuty wzbudzał zyxel-a.
W kolejnym oknie uruchomiłem sudo rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H --exclude=/Backup/ --exclude=/proc/ --exclude=/sys/ / /Backup/BackupZYXEL
Backup wykonywał się ok 10 minut. zakończył się powodzeniem.
sent 4 492 735 028 bytes received 267 389 bytes 12 061 751,46 byste/sec
total size is 903 422 111,019 speedup is 201,07
rsync error: some files/sttrs were not transfered (see previous error) (code 23) at main.c(1196) [sender=3.1.2]


To wszystko
A nie napisałem jeszcze o dodatkowym skopiowanym (powielonym) katalogu ok 480MB
Również pojawił się po backupie na zyxelu

TataPingu

Cytat: sebekoo w Kwiecień 09, 2019, 02:47:37 PM
Backup wykonywał się ok 10 minut. zakończył się powodzeniem.

rsync error: some files/sttrs were not transfered (see previous error) (code 23) at main.c(1196) [sender=3.1.2]

Jedynie ten drobny błąd, ale prawdopodobnie związane jest to z "nietypowymi" prawami któregoś z plików systemowych, albo, co właściwie bardziej możliwe, "pozostałością" na Zyxelu z poprzednich testów.
Gdy wszystko doprowadzimy do porządku to zrobisz sobie jeszcze raz "świeży" backup.
Ogólnie widzę, że Zyxel "pozwala" na zapisywanie praw katalogów i plików, a to jest wielkim plusem.

Cytat: sebekoo w Kwiecień 09, 2019, 02:47:37 PM
A nie napisałem jeszcze o dodatkowym skopiowanym (powielonym) katalogu ok 480MB
Również pojawił się po backupie na zyxelu

No to fajnie, to i to mamy sprawdzone...
- gdybyś teraz ten sam katalog zlikwidował na serwerze i ponownie zrobił backup, to powinien zniknąć również na Zyxelu

Acha, jeszcze jeden plik zmanipulowaliśmy (/etc/rc.local), ten również możesz podesłać...

sebekoo

/etc/rc.local

#!/bin/sh
#---Beim Ladefehler abschalten "-e" (löschen)
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#
#

#----------START ACPI - WakeOnLAN----
ethtool -s enp2s0 wol g
#----------START ACPI - WakeOnLAN----

#---------Dopisany WOL ZYXEL --------
#####/bin/sleep 15 && /usr/bin/wakeonlan xx:xx:xx:xx:xx:xx
#--------Wybudzenie ZYXEL------------

#----AUTO-do prawidlowego wylaczenie.sh (np przy zawieszeniu serwera, wylaczeniu pradu itp)----
cp /usr/local/bin/wylaczenie.sh.DZIENNE /usr/local/bin/wylaczenie.sh
sleep 1s

#--UWAGA --- EXIT ZAWSZE NA KOŃCU ---
exit 0

sebekoo

#380
Doszliśmy do końca tworzenia serwera NAS. Serwer NAS zbudowany na płycie głównej Asus P5QLE, procesor Intel pentium Dual Core 2, 4GB RAM, dysk 80 GB na system (UBUNTU) i 2x2TB na dane, karta graficzna.
Przyjmujemy że zainstalowany jest podstawowy system UBUNTU serwer.
Celem tego poradnika jest dostosowanie systemu Ubuntu do działania jako serwer NAS w połaczeniu z wykonywaniem backup-a na osobnym urządzeniu NAS (w tym przypadku ZYXEL NSA325-v2).

Poniżej wykaz skryptów i opis co i jak wykonać krok po kroku. Wszystko jest sprawdzone i działa prawidłowo (trzeba tylko odpowiednio dostosować do własnej sieci, adresy MAC, IP, ścieżki NFS, i czasy (sleep) gdyż każde urządzenie uruchamia się w inny czasie)
Skrypty są autorstwa TataPingu

TataPingu

#381
Wstęp i wyjaśnienie
===============================================================
Ze względu na wcześniejszą, bardzo długą i haotyczną korespondencją (haotyczną pod kątem różnorodności omawianych tematów) z autorem tego wątku przy stawianiu i konfiguracji jego nowo budowanego  małego serwera pozwoliłem sobie zebrać i uściślić omawiane przez nas tematy w różnych punktach naszej dyskusji.

Poniżej stworzyłem mały,  4-punktowy "poradnik" przygotowania serwera, którego działanie jest w pełni "zautomatyzowane", a zużycie energii, na ile to możliwe, zminimalizowane.
===============================================================

Domowy serwer bazujący na UbuntuLTS i jego "automatyzacja"

Część I - opis funkcji i przygotowanie sprzętu

A więc, naszym celem jest postawienie małego serwera bazującego na Ubuntu 18.04 LTS.

Domowa sieć składa się z:
- routera
- serwer
- małego NAS (Zyxel - na którym robione będą regularne kopie serwera)
- i kilku/kilkunastu mieszanych "klientów" ("windy", linuxksy, smartfony itd)

Założeniami "automatyzacji" serwera są:
- serwer zostaje automatycznie wystartowany wraz ze startem pierwszego klienta (funkcja WoL na klieńcie)
- po starcie serwer regularnie kontroluje, czy klienci są w kontakcie z serwerem
- po wylogowaniu się ostatniego klienta przygotowany zostaje sprzęt na którym będzie robiony backup danych z serwera (w tym przypadku to Zyxel)
- za pomocą rsync przeprowadzona zostaje synchronizacja danych (backup) serwer -> Zyxel
- po zakończeniu synchronizacji Zyxel zostaje odmontowany i wygaszony
- jako ostatni wyłącza się serwer.

Warunkami prawidłowego funkcjonowania całego procesu są:
- router z serwerem DHCP, którym przydzielamy odpowiednie IP sprzętom w sieci (ew. odpowiednia konfiguracja stałego IP na każdym sprzęcie)
- serwer z kartą sieciową, która reaguje na WoL (WakeOnLan)
- jakiś nośnik do odkładania danych backupa (w tym przypadku Zyxel, ale może to być dodatkowy HDD w serwerze)
- ustalenie prawidłowego zakresu adresów IP w sieci (klieńci, którzy inicjują włączenie się, czy wyłączenie serwera muszą znajdować się w określonym zakresie, router, serwer, Zyxel i ew. inne muszą być poza zakresem)

Zakładam, iż serwer z UbuntuLTS został już zainstalowany i wstępnie skonfigurowany

Ustalenie adresów IP w sieci:

router - 192.168.1.1
serwer - 192.168.1.3
Zyxel - 192.168.1.20
"zakres klientów" - od 192.168.1.21 do 192.168.1.50 (lub 192.168.1.21-50)

W pierwszym rzędzie preparujemy serwer do zdalnego włączania (WoL), instalujemy w terminalu (nie zapomnieć wcześniej włączyć tej funkcji w BIOSie, bo najczęściej jest nieaktywna):
sudo apt-get update
sudo apt-get install ethtool
sudo apt-get install nmap


Potem:
sudo ethtool -s enp2s0 wol g

Można też do:
/etc/systemd/system/network-online.target.wants/networking.service
nanieść jedną, dodatkową linię:
ExecStartPost=/sbin/ethtool -s eth0 wol g

i jeśli jeszcze nie ma to go tworzymy, a jeśli już jest to do pliku /etc/rc.local, nanosimy:

#!/bin/sh
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#
#

#----------START ACPI - WakeOnLAN----
ethtool -s enp2s0 wol g
#----------START ACPI - WakeOnLAN----

#----potrzebne do naszego procesu "automatyzacji"----
cp /usr/local/bin/wylaczenie.sh.DZIENNE /usr/local/bin/wylaczenie.sh
sleep 1s

exit 0


Plikowi nadajemy prawa root i uprawnienia 755 (odnosi się to do wszystkich tworzonych później plików-skryptów)

Po restarcie, serwer powinien reagować na "budzenie" WoLem z dowolnego klienta w sieci

==========================================================
Dodatkowa funkcja FSARCHIVER
To, co podaję poniżej nie stanowi części naszego zaplanowanego procesu, ale zwiększa bezpieczeństwo i ułatwia prędkie przywrócenie OSa do stanu pierwotnego w razie jakiejś awarii partycji systemowej.
http://www.fsarchiver.org/

Oczywiście, istnieją różne sposoby na takie przypadki. Osobiście używam do tego celu programu fsarchiver.
Sam program nie jest zbyt "przyjazny" w obsłudze, więc "rozszerzyłem" go małym skryptem, całkowicie automatyzującym zrobienie zwierciadlanej kopii systemu (czas trwania to kilka min)

W pierwszym rzędzie instalujemy sam program:
sudo apt-get install fsarchiver

Następnie, pod /home/user/Skrypty stworzymy skrypt o nazwie FSA-Backup_OS-Ubuntu_SDB2
/home/user/Skrypty/FSA-Backup_OS-Ubuntu_SDB2

o zawartości:

#!/bin/bash
#
# TataPingu z https://linuxiarze.pl/forum/
#
###
# CONFIG-----OS-Ubuntu-Server_sdb2 -> /home/BackupOS/
# sdb2 -> lokalizacja partycji z OS
# /home/BackupOS/ -> cel zrobienia kopii
#
#----DOPASOWAC-WAZNE---
QUELL_PARTITION=sdb2
ZIEL_DATEI=UbuntuOS
ZIEL_MEDIA=/home
#----
ZIEL_COPY="${ZIEL_MEDIA}"/BackupOS
#----DOPASOWAC-WAZNE---
#
#
QUELLE_SYS=/dev/"${QUELL_PARTITION}"
DISTRO_NAME="${ZIEL_DATEI}"_"${QUELL_PARTITION}"
#
LOGFILE_SYS=/var/log/FSarviver_Backup_"${DISTRO_NAME}".log
ZIEL_ORDNER="${ZIEL_COPY}"/"${DISTRO_NAME}"
ZIEL_SYS="${ZIEL_ORDNER}"/"${DISTRO_NAME}".fsa
ZIEL_LABEL="${DISTRO_NAME}"-"${ZIEL_MEDIA}"
DISTRO=$(/usr/bin/lsb_release -d -s)
DISTRO_FILE=/var/log/DISTRO.INFO
#
# END CONFIG
#
echo "Backup przeprowadzony pod: "${DISTRO}"" > "${DISTRO_FILE}"
#
#
echo "Dnia $(date) FSarchiver-"${ZIEL_DATEI}"-backup ("${DISTRO}") rozpoczety" >> "${LOGFILE_SYS}"
#
echo "Stworzenie katalogu docelowego..."
#
mkdir "${ZIEL_ORDNER}"
#
sleep 1s
#
echo "Tworzony klon partycji "${QUELLE_SYS}" ("${DISTRO}"), prosze czekac..."
#
#
fsarchiver -L "${ZIEL_LABEL}" savefs -o -v -A -j 2  "${ZIEL_SYS}" "${QUELLE_SYS}"
sleep 1s
#
#---CONFIG1---
ARCHIV_INFO_DATEI="${ZIEL_ORDNER}"/"${DISTRO_NAME}".txt
#---CONFIG1---
#
fsarchiver archinfo "${ZIEL_SYS}" 2> "${ARCHIV_INFO_DATEI}"
#
#----ZAKONCZENIE---
#
echo "Dnia $(date) FSarchiver-"${ZIEL_DATEI}"-backup ("${DISTRO}") pomyslnie zakonczony" >> "${LOGFILE_SYS}"
sleep 1s

cp -a "${LOGFILE_SYS}" "${ZIEL_ORDNER}"
cp -a "${DISTRO_FILE}" "${ZIEL_ORDNER}"
#
sleep 1s
#
exit 0


Przed uruchomieniem skryptu istotne jest wpierw stworzyć katalog /home/BackupOS
- skrypt uruchamiamy z roota (w konsoli lub terminalu):
sudo /home/user/Skrypty/./FSA-Backup_OS-Ubuntu_SDB2

Ponowne przywrócenie systemu z wykonanej kopii FSA

Do wykonania tych czynności potrzebna jest jakaś dystrybucja live, która zawiera kilka narzędzi (najlepiej z graficznym GUI), którymi będziemy w stanie sformatować naszą uszkodzoną partycję z systemem i wgrać ponownie naszą kopię.
Do tego celu może się nadawać dowolna dystrybucja zawierająca Gparted plus Qt4-Fsarchiver lub Qt5-Fsarchiver. W naszym przypadku preferowane jest Qt5, z tego względu, iż nasz serwer Ubuntu posiada najnowszą wersje fsarchivera, która nie jest kompatybilna z Qt4.

Takim systemem może być SystemRescueCd, który polecany jest przez twórców fsarchivera:
http://www.system-rescue-cd.org/

Osobiście polecam jednak livea bazującego na Xubuntu i zawierającego wymagane programy:
https://sourceforge.net/projects/qt4-fsarchiver/files/qt5-fsarchiver/

Sciągamy którąś ISO (Live-DVD), tworzymy z niej botowalnego DVD lub USB, startujemy z tego nośnika nasz system i po kolei wykonujemy następujące czynności (ważna informacja - hasło roota w live to ubuntu):

- za pomocą Gpartded formatujemy naszą  partycję systemową na HDD (np. EXT4, ale jest to mało istotne, bo po ponownym wgraniu FSA partycja będzie taka, jak podczas przeprowadzania ostatniej kopii)

- po przeprowadzeniu tej operacji odmontowujemy naszą partycję (Gpartedem)

- montujemy nośnik na którym mamy naszą kopię FSA (to może być inna partycja, niż nasza systemowa na HDD, ew. USB-HDD itp, ważne jest tylko wiedzieć, iż zostanie podmontowana pod nasz system live w katalogu /media/....)

- startujemy z menu Qt5-Fsarchiver i instalujemy ponownie kopię FSA na naszej partycji systemowej...

Wszystko....

Jedynie, trzeba zwrócić szczególną uwagę przy podawaniu celu w Qt5-Fsarchiverze (fsa1, fsa2, fsa3... itd), bo po przeprowadzeniu operacji ponownego kopiowania, wybrany przez nas cel zostanie bezpowrotnie przepisany!

Koniec dodatkowej funkcji FSARCHIVER
==========================================================

TataPingu

#382
Część II - automatyka wyłączania serwera

Następnym "krokiem" jest przygotowanie skryptu "wyłączającego". Pod /usr/local/bin tworzymy skrypt wylaczenie.sh.DZIENNE
/usr/local/bin/wylaczenie.sh.DZIENNE

do którego nanosimy:


#!/bin/bash
#
# TataPingu z https://linuxiarze.pl/forum/
# /usr/local/bin/wylaczenie.sh.DZIENNE -> wylaczenie.sh
#
###
# KONFIGURACJA - wylaczenie.sh.DZIENNE -> wylaczenie.sh - poczatek
###
#
# Filename of the statusfile
STATUSFILE="/tmp/wylaczenie-status"
#
# which ip range should be checked?
# this example looks in "192.168.5.10 to 192.168.5.30"
# and "192.168.178.20 to 192.168.178.30"
#RANGE="192.168.1.178.10-30"
#
RANGE="192.168.1.21-50"
#
# how many clients are always on
MINCLIENTS=0
#
# shutdown after how many retries?
RETRIES=2
#
###
# KONFIGURACJA - wylaczenie.sh.DZIENNE -> wylaczenie.sh - koniec
###

NUMCLIENTS=`nmap -sP $RANGE -oG - | grep "^Host" | wc -l`

if [ $NUMCLIENTS -le $MINCLIENTS ]; then
    if [ ! -f "$STATUSFILE" ]; then
        echo "COUNT=$RETRIES" > $STATUSFILE
    fi
    . $STATUSFILE
    if [ $COUNT -le $MINCLIENTS ]; then
#----- OTWORZYC do backupa RSYNC_BACKUP_SERVER
########/usr/local/bin/./usr/local/bin/rsync_backup.sh.DZIENNY
########exit 0
#----- OTWORZYC do backupa RSYNC_BACKUP_SERVER
#
#----- ZAMKNAC do backupa RSYNC_BACKUP_SERVER
        echo "Shutdown, kolego (my dear)..."
        shutdown -h now;
#----- ZAMKNAC do backupa RSYNC_BACKUP_SERVER
    else
        let COUNT=$COUNT-1
        echo "COUNT=$COUNT" > $STATUSFILE
    fi;
else
    if [ -f "$STATUSFILE" ]; then
        rm $STATUSFILE
    fi
fi


Następnie, restartujemy serwer i po ponownym załadowaniu nadajemy odpowiednie prawa nowo powstałemu plikowi-skryptowi:
sudo chmod 755 /usr/local/bin/wylaczenie.sh

Teraz czas na crontab...
- edytujemy plik /etc/crontab i na samym końcu dopisujemy poniższe:

#
#-----SERVER-WYLACZENIE----------
#---sprawdzenie co 3 minuty, czy w sieci sa aktywne sprzety
*/3 * * * * root /usr/local/bin/wylaczenie.sh
#---sprawdzenie co 6 minut, czy w sieci sa aktywne sprzety
#####*/6 * * * * root /usr/local/bin/wylaczenie.sh
#-----SERVER-WYLACZENIE----------


Na nowo startujemy serwer i UWAGA:
- od tego momentu, jeśli nie ma żadnego klienta z naszego "zakresu" IP (RANGE="192.168.1.21-50") (w pliku /usr/local/bin/wylaczenie.sh.DZIENNE) w sieci, to serwer automatycznie wyłączy się po kilku minutach!

TataPingu

#383
Część III - "neutralizacja" automatyki wyłączania serwera i przygotowanie sprzętów do automatycznego backupa na NASie (Zyxel)

Zyxel bazuje na linuksie, który, pomimo, że odbiega od przyjętych standardów, (producent przystosował go do optymalnego działania swojego produktu), umożliwia zapisywanie na nim danych w linuksowym "standardzie" (prawa, właściciel itd). Poza tym, Zyxel udostępnia oprócz SMB i FTP również NFS.
Ostatni jest nie dość, że szybki, to i wygodny w użyciu w sieci wewnętrznej, więc backup bazować będzie na tym protokole. Do synchronizacji-backupa danych użyty zostanie sprawdzony rsync.

Gwoli informacji, dla tych, którzy ew. chcą sobie podobny system przygotować w przyszłości...
- najlepszym rozwiązaniem byłby dodatkowy, podpięty do serwera HDD

Wielu jednak, podobnie, jak w przypadku naszego pytającego Kolegi, może być w posiadaniu starszego NASa, który chętnie wykorzystaliby również do takiego celu. Jest to możliwe, tylko co poniektóre sprzęty trzeba wpierw odpowiednio "dopasować" do tego celu. Wówczas trzeba również "dopasować" nasze skrypty do danego sprzętu.
Np. ostatnio wpadł mi w ręce stary BUFFALO (również NAS), który w ogóle nie udostępniał NFS, jedynie FTP i SMB (bardzo stara, więc "niebezpieczna" wersja). Jego automatyka "zasypiania" była zupełnie różna od Zyxela, więc skrypty musiały zupełnie inaczej wyglądać.
Na pewno, jeśli taki sprzęt bazuje na linuksie (najczęściej), można dostosować go do takich zadań. Jedynie, nie można podpowiedzieć uniwersalnego rozwiązania.

W naszym przypadku, w pierwszym rzędzie przygotujemy teraz skrypt "wybudzający", "podpinający" (pod serwer) i "utrzymujący" Zyxela w stanie "gotowości".
Do tego celu tworzymy nowy skrypt:
/usr/local/bin/ZyxelSTART.sh

do którego nanosimy:

#!/bin/bash
#
# TataPingu z https://linuxiarze.pl/forum/
#
#-ZyxelNAS - podpiecie stacji
#--------
#
#------CONFIG-poczatek
#
# - odpowiednio dopasowac (MAC karty sieciowej)
ZYXEL_MAC="xx:xx:xx:xx:xx:xx"
#
# - tutaj odpowiednio dopasowac IP i katalog NFS na Zyxelu (punkt podpiecia
# - gdzie beda robione kopie na Zyxelu)
HOST_ZYXEL="192.168.1.20"
NAS_DIR="/i-data/44026ef7/nfs/BackupSERWER"
# - tutaj odpowiednio dopasowac do katalogu na serwerze, do ktorego
# - podpinamy udostepniony katalog z Zyxela
MOUNT_DIR="/Backup/BackupZYXEL"
#
#------CONFIG ENDE
#
#---DO NORMALNEGO DZIALANIA ZAMKNIETE
#if [ ! "$(ping -c1 ${HOST_ZYXEL)" ]; then
#   DISPLAY=:0.0 zenity --error
#   --title="Zyxel nie zostal znaleziony w sieci"
#   --text="i adres IP ${HOST_ZYXEL} nie reaguje na ping."
#   exit 1
#fi
#---DO NORMALNEGO DZIALANIA ZAMKNIETE
#
/usr/bin/wakeonlan -p 9 "${ZYXEL_MAC}"
#
# - czas jest w sekundach - dopasowac do czasu od wybudzenia
# - Zyxela do osiagniecia pelnej "gotowosci"
sleep 180s
#
#
# - tutaj nastepuje "podpiecie" Zyxela do systemu
# - dla FTP
############curlftpfs -o no_verify_peer,allow_other,disable_eprt ftp://"${USER_NAS}":"${PASS_NAS}"@"${HOST_ZYXEL}"/"${NAS_DIR}" "${MOUNT_DIR}"
# - dla NFS
mount "${HOST_ZYXEL}":"${NAS_DIR}" "${MOUNT_DIR}"
# - tutaj nastepuje "podpiecie" Zyxela do systemu
#
#
# - w tym miejscu rozpoczynamy regularne "budzenie" Zyxela
# - czas w sek (sleep 240) dopasowac do czasu "zasypiania" Zyxela (ew. HDD)
# - np. Zyxel zasypia po 5min (300sek), to "wybudzamy" go o 1min wczesniej (240sek)
#
while true
do
/usr/bin/wakeonlan -p 9 "${ZYXEL_MAC}"
ls "${MOUNT_DIR}"/
        sleep 240
done
#


Oczywiście, by podpięcie w ogóle mogło nastąpić trzeba wpierw stworzyć wymienione w skrypcie katalogi, t.j. na serwerze:
/Backup/BackupZYXEL
i na Zyxelu:
..../BackupSERWER (początek ścieżki zależny jest od sprzętu)

By sprawdzić funkcjonalność, skrypt możemy wystartować "ręcznie" w terminalu:
sudo /usr/local/bin/./ZyxelSTART.sh

Skrypt zostanie wykorzystany w następnej części procesu.

Następnym skryptem jest skrypt, który po rozpoczęciu procesu kopiowania danych programem rsync na Zyxela "zneutralizuje" nam automatykę wyłączania się serwera (w końcu crontab co 3 min uruchamia nasz skrypt wylaczenie.sh, a w sieci nie ma już żadnego klienta z "zakresu", więc serwer zostałby wyłączony!) i w tym przypadku kontroluje, czy jest uruchomiony proces rsync.

Tworzymy następny skrypt:
/usr/local/bin/wylaczenie.sh.NEUTRAL

o zawartości:

#!/bin/bash
#
# TataPingu z https://linuxiarze.pl/forum/
# po wylogowaniu clientow wymazana STATUSFILE, rozpoczety backup
# i kontrola rsynca.
#
if [ $(ps -A | grep -c /usr/bin/rsync) = 0 ];
#if [ $(ps -A | grep -c rsync) = 0 ];
then
exit
fi


W gruncie rzeczy, w tym miejscu, ogóle nie trzeba kontrolować rsynca, zamiast powyższego algorytmu w skrypcie wystarczy umieścić coś takiego:


#!/bin/bash
#
# po wylogowaniu clientow, rozpoczecie procesu kopiowania
#
exit 0


Pierwsze naniosłem tylko dlatego, żeby nie robić "mętlika" w głowie naszego Kolegi @sebekoo...
- takie rozwiązanie podałem mu w trakcie konfigurowania jego serwera.
Funkcje są równoważne, z tą tylko różnicą, że pierwszy algorytm sprawdza, czy rsync pracuje, po czym się "wyłancza", a drugi od razu to robi. Podając mu skrypt, skopiowałem po prostu rozwiązanie, które zrobiłem ileś tam lat temu i prawdopodobnie potrzebne mi to było do kontrolowania procesu rsync i jeszcze czegoś, a potem to odbudowałem (już nawet nie pamiętam do czego).
W sumie, nawet lepiej użyć tego drugiego

TataPingu

#384
Część IV - backup, t.j. synchronizacja danych SERWER (Ubuntu) -> NAS (Zyxel) za pomocą rsync

Jedną z cech użytego programu do synchronizacji rsync jest możliwość udostępnienia mu katalogu "pomocniczego" (cache, tmp) w którym czasowo zapisywane będą pliki przed przesłaniem na nośnik backupa (Zyxel). Zależnie od konstelacji i sprzętu (pojemność RAMu, miejsce na partycji OSa) funkcja ta może, ale nie musi być użyta (dla NFS, dla FTP musi!).

Jeśli serwer jest "bolidem prędkości", np. z 4 rdzeniami + co najmniej 8 GB RAMu, to funkcji nie trzeba używać, ale jeśli sprzęt nie należy do najszybszych, ma małą pojemność RAMu (np. tylko 2GB) to warto tę funkcję "włączyć", ponieważ przyspiesza proces synchronizacji.
Co w tym przypadku jest bardzo istotne, to, by funkcja spełniała swoją rolę, powinno się przeanalizować i ustalić pewne założenia. Mianowicie, chodzi o fizyczne miejsce na dyskach.

Zakładając np, iż udostępnimy taki katalog-cache np. pod /tmp/RsyncTMP powinniśmy sprawdzić ile mamy miejsca na partycji, na której znajduje się ten katalog (najczęściej to partycja systemowa, a te w praktyce nie są zbyt wielkie).
A w jakim celu?
Proszę sobie wyobrazić scenariusz, gdy partycja OS ma w sumie (wraz z OSem)pojemność np. 20 GB, a do skopiowania rsyncem mamy np. jakąś wirtualną maszynę (plik) z windą o wielkości np. 25 GB, co się wówczas stanie ?
- rsync przed przesłaniem na Zyxela będzie próbować zapisać ten 25GB-owy plik pod /tmp/RsyncTMP (który znajduje się na 20GB-owej partycji!), a to nie będzie to możliwe!

W następnym skrypcie użyję również tej opcji (DIR_TEMP), ale sam katalog powinno się ulokować w takim miejscu, w którym będziemy mieli pewność, iż nie braknie nam miejsca (jeśli chcemy używać tej funkcji).
Ja ulokowałem go pod /Backup/RsyncTMP, ponieważ nasz Kolega pod którego sprzęt było to robione, ma sporo miejsca na partycji systemowej (poza tym, to SSD, więc dysk jest szybki).

Tworzymy, więc nowy katalog pod:
/Backup/RsyncTMP

Teraz kolej na sam skrypt inicjujący rsync do synchronizacji. Tworzymy następny skrypt:
/usr/local/bin/rsync_backup.sh.DZIENNY

do którego nanosimy:

#!/bin/bash
#
# TataPingu z https://linuxiarze.pl/forum/
#
# po wylogowaniu clientow wymazana STATUSFILE i rozpoczety backup
#/usr/local/bin/rsync_backup.sh.DZIENNY
#
######---start i podmontowanie Zyxela
/usr/local/bin/./ZyxelSTART.sh &
# - czas w sekundach - zalezny od czasu wybudzenia Zyxela do osiagniecia
sleep 200s
# - pelnej "gotowosci" (skrypt /usr/local/bin/ZyxelSTART.sh) + 20 sek
######---start i podmontowanie Zyxela
#
#
#----KONFIGURACJA - rsync_backup.sh.DZIENNY---
#
######----(dopasowac - ZIEL_COPY zalezne od ustalonego MOUNT_DIR= w ZyxelSTART.sh)
QUELLE_DAT=/
ZIEL_COPY=/Backup/BackupZYXEL
DIR_TEMP=/Backup/RsyncTMP
LOGFILE=/var/log/Rsync_Backup_Server.log
######----(dopasowac - ZIEL_COPY zalezne od ustalonego MOUNT_DIR= w ZyxelSTART.sh)
#
#----KONFIGURACJA - rsync_backup.sh.DZIENNY---
#
#
DISTRO=$(/usr/bin/lsb_release -d -s)
#
#---w tym miejscu "neutralizujemy nasza "automatyke" wylaczania serwera
cp /usr/local/bin/wylaczenie.sh.NEUTRAL /usr/local/bin/wylaczenie.sh
#---------------------------------------------------------------------------------
sleep 1s
#
#########----SERVER-BACKUP-DZIENNY_Poczatek
#
echo "W dniu $(date) pod systemem "${DISTRO}" codzienny backup serwera rozpoczety" >> "${LOGFILE}"
sleep 1s
#--------------------------------------
#---przyklady komend rsync (dobrac do lub zmienic do swoich potrzeb, sprzetu, czy konstelacji)
#---"--exclude=..." katalogi WYLACZONE z kopiowania ponizej tylko te, ktorych NIE MOZNA kopiowac)
#
#-----Z UZYCIEM "cache" (/Backup/RsyncTMP)
#rsync --no-perms --no-owner --no-group -u -r -t -v --temp-dir="${DIR_TEMP}" --progress --delete --modify-window=1 --exclude=/Backup/ --exclude=/proc/ --exclude=/sys/ "${QUELLE_DAT}" "${ZIEL_COPY}"
rsync -r -t -p -o -g -v --temp-dir="${DIR_TEMP}" --progress --delete --modify-window=1 -l -H --exclude=/Backup/ --exclude=/proc/ --exclude=/sys/ "${QUELLE_DAT}" "${ZIEL_COPY}"
#
#-----BEZ "cache" (/Backup/RsyncTMP)
#rsync --no-perms --no-owner --no-group -u -r -t -v --progress --delete --modify-window=1 --exclude=/Backup/ --exclude=/proc/ --exclude=/sys/ "${QUELLE_DAT}" "${ZIEL_COPY}"
#rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H --exclude=/Backup/ --exclude=/proc/ --exclude=/sys/ "${QUELLE_DAT}" "${ZIEL_COPY}"
#
#---przyklady komend rsync (dobrac do lub zmienic do swoich potrzeb, sprzetu, czy konstelacji)
#------------------------------------
#
echo "W dniu $(date) pod systemem "${DISTRO}" codzienny backup serwera pomyslnie zakonczony" >> "${LOGFILE}"
sleep 1s
cp -a "${LOGFILE}" "${ZIEL_COPY}"
sleep 1s
#
#########----SERVER-BACKUP-DZIENNY_Koniec
#
#
#---w tym miejscu "zapobiegamy" niechcianemu poweroff serwera
cp /usr/local/bin/wylaczenie.sh.PO_BACKUPIE /usr/local/bin/wylaczenie.sh
#---------------------------------------------------------------------------------
sleep 1s
#
exit 0


I właściwie w tym miejscu (skrypcie), po zrobieniu synchronizacji można by już odmontować Zyxela, wyłączyć go, a następnie wyłączyć sam serwer, tylko...
- może się tak zdarzyć, iż w trakcie przeprowadzania synchronizacji danych załączony zostanie któryś z klientów z naszego "zakresu" i wówczas zostałby gwałtownie "odcięty" od serwera.
Rozwiązaniem tego problemu jest następny skrypt, którym zapobiegniemy takiej sytuacji.
Tworzymy:
/usr/local/bin/wylaczenie.sh.PO_BACKUPIE

do którego nanosimy:

#!/bin/bash
#
# TataPingu z https://linuxiarze.pl/forum/
#/usr/local/bin/wylaczenie.sh.PO_BACKUPIE
#
# Po wykonaniu backupa dziennego zainicjowanie poweroff serwera
#
###
#----KONFIGURACJA - wylaczenie.sh.PO_BACKUPIE - poczatek
###
#
# Filename of the statusfile
STATUSFILE="/tmp/wylaczenie-status"
#
HOST_ZYXEL="192.168.1.20"
MOUNT_DIR="/Backup/BackupZYXEL"
#
# which ip range should be checked?
# this example looks in "192.168.5.10 to 192.168.5.30"
# and "192.168.178.20 to 192.168.178.30"
#
RANGE="192.168.1.21-50"
#
#
# how many clients are always on
MINCLIENTS=0
#
# shutdown after how many retries?
RETRIES=2
#
###
#----KONFIGURACJA - wylaczenie.sh.PO_BACKUPIE - koniec
###

NUMCLIENTS=`nmap -sP $RANGE -oG - | grep "^Host" | wc -l`

if [ $NUMCLIENTS -le $MINCLIENTS ]; then
    if [ ! -f "$STATUSFILE" ]; then
        echo "COUNT=$RETRIES" > $STATUSFILE
    fi
    . $STATUSFILE
    if [ $COUNT -le $MINCLIENTS ]; then
#
cp /usr/local/bin/wylaczenie.sh.DZIENNE /usr/local/bin/wylaczenie.sh
sleep 1s
                umount -f -l "${MOUNT_DIR}"
sleep 10s
                ssh root@"${HOST_ZYXEL}" poweroff
sleep 10s
echo "Spadamy...."
shutdown -h now;
#
    else
        let COUNT=$COUNT-1
        echo "COUNT=$COUNT" > $STATUSFILE
    fi;
else
    if [ -f "$STATUSFILE" ]; then
        rm $STATUSFILE
    fi
fi


Wychodzę z założenia, że Zyxel prawidłowo reaguje na komendy wybudzania i usypiania (testowane wcześniej), a komenda rsync została dopasowana do własnej konstelacji i potrzeb. Działanie programu zostało przetestowane i jest bezbłędne.

Do zakończenia przygotowania procesu "automatyzacji" serwera pozostał nam ostatni punkt....
- w skrypcie /usr/local/bin/wylaczenie.sh.DZIENNE poniższą część tekstu:

if [ $COUNT -le $MINCLIENTS ]; then
#----- OTWORZYC do backupa RSYNC_BACKUP_SERVER
########/usr/local/bin/./usr/local/bin/rsync_backup.sh.DZIENNY
########exit 0
#----- OTWORZYC do backupa RSYNC_BACKUP_SERVER
#
#----- ZAMKNAC do backupa RSYNC_BACKUP_SERVER
        echo "Shutdown, kolego (my dear)..."
        shutdown -h now;
#----- ZAMKNAC do backupa RSYNC_BACKUP_SERVER


zmieniamy na:

if [ $COUNT -le $MINCLIENTS ]; then
#----- OTWORZYC do backupa RSYNC_BACKUP_SERVER
/usr/local/bin/./usr/local/bin/rsync_backup.sh.DZIENNY
exit 0
#----- OTWORZYC do backupa RSYNC_BACKUP_SERVER
#
#----- ZAMKNAC do backupa RSYNC_BACKUP_SERVER
        ########echo "Shutdown, kolego (my dear)..."
        ########shutdown -h now;
#----- ZAMKNAC do backupa RSYNC_BACKUP_SERVER


W ten sposób "blokujemy" poweroff serwera i "uruchamiamy" proces backupa (synchronizacji danych) na Zyxela.
Po restarcie całego serwera wszystko powinno przebiegać zgodnie z początkowymi założeniami.

TataPingu

Do @sebekoo
Tak, ja jestem już gotowy...
- jak już wcześniej nadmieniałem, sugeruję, by moje ostatnie odpowiedzi (od #381 do #384), jeśli to oczywiście możliwe, zostały "przerzucone" gdzieś na początek Twojego wątku.

Patrząc na statystykę, do teraz, na Twój wątek było ponad 11.600 wejść....
- czy to tylko my dwoje tyle "natrzaskaliśmy", tego nie wiem, ale wydaje mi się, że to chyba niemożliwe...
A jeśli inni są tematem również zainteresowani, to myślę, że powinniśmy wątek trochę "uporządkować", bo tematy są trochę haotyczne..

Z tego względu, że to Ty zakładałeś temat, Ty budujesz serwer i chyba Ty najlepiej teraz się orientujesz w którym najlepiej miejscu zamieścić mój "poradnik",  więc podpowiedz , a poprosimy Admina o zmianę

sebekoo

Zastanawiałem się długo na tym gdzie umieścić.
Nie wiem na ile forum można rozbudowywać o pod-fora ale tak lokalizacja jest dobra z tym że dobrze by było umieścić w podany jeden ze sposobów
Społeczność -> Porady internautów -> Poradniki
Społeczność -> Poradniki

Ogólnie całe forum to poradnik ale typowo "poradniki" to nie ma. Może admin też coś zaproponuje / wypowie się jakie są możliwości rozbudowy forum.

Zobacz najnowsze wiadomości na forum