Spisu treści:

OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI: 5 kroków
OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI: 5 kroków

Wideo: OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI: 5 kroków

Wideo: OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI: 5 kroków
Wideo: Ups. 2024, Lipiec
Anonim
OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI
OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI
OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI
OrangeBOX: Bezpieczne urządzenie do przechowywania kopii zapasowych oparte na OrangePI

OrangeBOX to wszechstronne urządzenie do zdalnego przechowywania kopii zapasowych dla dowolnych serwerów.

Twój serwer może zostać zainfekowany, uszkodzony, wyczyszczony, a wszystkie Twoje dane są nadal bezpieczne w OrangeBOX, a kto nie chciałby misji niemożliwej, takiej jak urządzenie do tworzenia kopii zapasowych, które po prostu podłączasz i widzisz wskaźnik postępu, nie robiąc nic więcej (po prostu miej nadzieję, że magia dym nie wyjdzie na koniec:)).

OrangeBOX to mój pierwszy projekt, który jest głównie oprogramowaniem, a nie sprzętowym hackiem. Jest to w zasadzie niestandardowy serwer NAS z dołączonym wyświetlaczem LCD.

Krok 1: Części sprzętowe

Części sprzętowe
Części sprzętowe
Części sprzętowe
Części sprzętowe
Części sprzętowe
Części sprzętowe

Orange PI zero to komputer jednopłytkowy typu open source. Może uruchomić system Android 4.4, Ubuntu, Debian. Wykorzystuje AllWinner H2 SoC i ma 256 MB/512 MB pamięci DDR3 SDRAM (wersja 256 MB to wersja Standard. Orange Pi Zero jest dla każdego, kto chce zacząć tworzyć z technologią – a nie tylko ją konsumować. To proste, zabawne i przydatne narzędzie, które możesz możesz użyć, aby przejąć kontrolę nad otaczającym Cię światem (https://www.orangepi.org/orangepizero/). Więc jest to dokładnie dla nas, zabierajmy się za to:)

  • Metalowe/plastikowe/drewniane pudełko (użyłem starego zewnętrznego pudełka cd-rw Yamaha)
  • Orange PI Zero lub lepszy (pinout GPIO może się zmienić, jeśli używasz innego modelu)
  • 2x20 ekranów LCD RGB
  • Dowolny dysk USB SFF 3.5/LFF 2.55
  • Sata -> adapter USB. Należy pamiętać, że chociaż OrangePI nie narzuca górnego limitu maksymalnej pojemności dysku, to jednak robi to wiele mostków USB-SATA (maksymalnie 2TB). Pomarańczowy PI Zero, którego używam, ma tylko jeden port USB 2.0 z efektywną szybkością transmisji maks. 28 MB/s. Wybrałem USB3.0 (przygotowany na przyszłe aktualizacje) -> mostek SATA (marka nie będzie wymieniona) i ogranicza limit, więc lepiej wybrać most, który okazał się obsługiwać większe dyski, takie jak mostki oparte na chipie JMicron JMS567. Zrób własne badania przed zakupem. Mogę żyć z ograniczeniem prędkości i dysku twardego, używając w tym projekcie dysku sata o pojemności 2 TB (jeśli włożysz większe dyski, zostanie on rozpoznany, ale system operacyjny zobaczy tylko pierwsze 2 TB, więc reszta pojemności będzie Stracony).
  • Zasilacz 12 V 2,5 A lub wyższy. Oblicz około 500mA normalnego zużycia dla OPI Zero i 1,5A dla standardowego dysku SATA LFF. Przewymiarowanie nigdy nie boli. W moim zestawie zasilacz Yamahy (co mogło dostarczyć więcej niż wystarczającą ilość prądu na obu szynach 12+5V) niestety wysadziło się:(z powodu ułożenia głównego wyłącznika na GND na sekundę, więc musiałem wkleić zwykły adapter, co przynajmniej dzięki temu pudełko było o kilka gramów lżejsze.
  • Przetwornica buck DC-DC 12V->5V. Użyłem tego samego regulowanego mini bucksa, co w IronForge, działa idealnie.

Opcjonalny

Jeśli chcesz wydać + 10 $, możesz kupić Orange Pi Plus (https://www.armbian.com/orange-pi-one-plus/), który ma podobny kształt i zapewnia Gbe i SATA3. W tym celu można użyć biblioteki okablowania Libra PI: https://github.com/OrangePiLibra/WiringPi, ale ponieważ pinout GPIO jest inny, jest to poza zakresem tego pisania.

Można to zrobić również z nowym Orange PI Plus2, które mają złącze SATA i można pominąć użycie konwerterów sata->USB wraz z ich ograniczeniami. Jeśli planujesz używać FreeBSD lub innych BSD, seria Orange PI może nie być najlepszym wyborem, ponieważ ich obsługa sprzętowa jest ograniczona (na przykład musisz użyć pamięci USB do rozruchu). W przypadku BSD najlepszą radą jest użycie Raspberry PI. Zarówno kod C dla LCD, jak i wszystkie skrypty powłoki można przenosić na dowolny inny system UNIX.

Krok 2: Projekt sprzętu

Projektowanie sprzętu
Projektowanie sprzętu
Projektowanie sprzętu
Projektowanie sprzętu
Projektowanie sprzętu
Projektowanie sprzętu

Pudełko Yamahy wystarczyło do przechowywania tego wszystkiego, nie byłoby wystarczająco dużo miejsca na komputer Orange PI lub zwykłą płytę Raspi.

Ethernet został wyprowadzony z przedłużaczem z tyłu pudełka. Pamiętaj, że Orange PI zero ma tylko interfejs Ethernet 100mbit/s, jeśli chcesz szybciej, będziesz musiał użyć innej płyty, takiej jak Asus Tinkerboard/RPI3B+/Inne modele Orange PI.

Zły PIN Out jest jedynym błędem, jaki możesz popełnić w tym projekcie, dlatego warto zastosować kilka podstawowych zasad:

1, Zawsze staraj się używać tego samego koloru kabla od END do END. Sam popełniam ten sam "błąd" w niektórych projektach, w których tego nie robię, po prostu dlatego, że nie mam wystarczająco długich kabli męskich-męskich/męsko-żeńskich/żeńsko-żeńskich pod ręką i łatam 2 razem tylko po to obwód. Jeśli nie udokumentujesz prawidłowo swojej pracy, może to prowadzić do bólu głowy po latach, gdy będziesz musiał dokonać naprawy, uaktualnienia.

2, nałóż trochę gorącego kleju na złącza. W przypadku korzystania z tych kabli mm/mf/ff w stylu zestawu arduino-starter, które nie są najwyższej jakości, dość często (zwłaszcza podczas przemieszczania/transportowania urządzenia) złącza się wysuwają. Jeśli wiesz, że będzie to urządzenie do długotrwałego użytkowania (możliwe, że użyjesz, aż się zepsuje?!), Lepiej nałożyć trochę kleju na gorąco zarówno po stronie złączy OrangePI, jak i LCD, aby utrzymać je razem. W razie potrzeby można go później łatwo stopić / zdrapać.

3, zerowe okablowanie OrangePI Złą wiadomością jest to, że pinout Orange PI NIE jest taki sam jak Raspberry PI 0/1/2/3 i istnieje nawet różnica między innymi modelami Orange PI. Najlepszym sposobem jest pobranie biblioteki okablowania (wersja Orange PI Zero). Obraz może być nieco mylący, ale to były najlepsze, jakie udało mi się znaleźć. Jedno jest lustrem 180 stopni drugiego. Chociaż niegraficzny obraz CLI może być trudniejszy do zrozumienia, jest to najprostszy sposób.

Zawsze możesz odróżnić 2 końce gniazd, uznając jeden koniec za DODATNI z (+3.3/+5V), a drugi za UJEMNY (jeden GND) -> to jest koniec złącza skierowany w stronę portu ETHERNET.

Z tabeli Wiring PI Zero będziesz potrzebować tylko jednej kolumny, aby wPI zapomnieć o innych, jakby ich tam nie było.

Czyli np. aby połączyć LCD_E 15 (czyli wPI 15!) i LCD_RS 16 (czyli wPI 16!) policzyć piny od DODATNIEGO końca złącza (łatwo zrobić długopisem lub małym śrubokrętem). To będzie fizycznie spadać 4 piny i 5 pinów.

4, Grupuj. Jeśli istnieje możliwość umieszczenia zużytych pinów obok siebie (grupując je w górę) zawsze wybieraj to, dzięki czemu trzymają się one obok siebie nawet bez kleju na gorąco, a także w innych projektach, gdy masz 2x 4x 6x złączki molex, możesz po prostu wykorzystaj szpilki znajdujące się obok siebie. Tutaj najlepsze, co możesz zrobić, to grupa 2-3s (idealna przy korzystaniu z odzyskanych kabli połączeniowych ze starych komputerów).

Piny używane do podłączenia ekranu LCD OrangePI:

//UŻYJ NUMERÓW PIN WIRINGPI

#define LCD_E 15 //Włącz pin #define LCD_RS 16 //Zarejestruj pin wyboru #define LCD_D4 5 //Pin danych 4 #define LCD_D5 6 //Pin danych 5 #define LCD_D6 10 //Pin danych 6 #define LCD_D7 11 // Pin danych 7

Piny używane do sterowania podświetleniem RGB

$G napisz 1 0

$G zapisz 4 1 $G zapisz 7 1

Pomarańczowy PI zero piny wPI 1, 4, 7. Jedyna magia, jaką ten wyświetlacz LCD może zrobić w porównaniu ze standardowym niebieskim lub zielonym podświetleniem LCD, gdzie masz pojedynczą katodę, którą należy wyciągnąć do GND, która ma 3 dla 3 zabarwienie. Czerwony, zielony i niebieski. Zmieniając kombinację tego, który z nich jest WŁĄCZONY, możesz mieszać różne kolory z tych kolorów podstawowych, ale tylko wysokie końce bez odcieni, ponieważ nie możesz kontrolować jasności koloru (jest on włączony lub wyłączony).

Addytywne mieszanie kolorów: dodanie czerwonego do zielonego daje żółty; dodanie czerwonego do niebieskiego daje magenta; dodanie zielonego do niebieskiego daje cyjan; dodanie wszystkich trzech podstawowych kolorów razem daje biel.

Krok 3: System operacyjny

System operacyjny
System operacyjny

OrangeBOX uruchamia się i Armbian linux (oparty na Debian Stretch) 4.14.18-sunxi kernel z bezpiecznym środowiskiem zaporowym, łączy się z VPN i czeka na zdalne polecenia kopii zapasowej z serwera.

Zasady projektowania:

- Pełne szyfrowanie dysku oparte na luks (samo urządzenie nie zawiera klucza do otwarcia dysku backupu. Zostanie tymczasowo skopiowany ze zdalnego serwera do pamięci RAM /dev/shm, dysk zostanie otwarty, a klucz skasowany. Po zakończeniu backupu dysk się zamknął, a OrangeBox wyłączy się automatycznie po 1 minucie.)

-Wszystkie komendy i klucze są wysyłane ze zdalnego serwera (samo urządzenie zawiera tylko certyfikat VPN) nie ma ŻADNEGO dostępu do zdalnego serwera nawet ssh z tego urządzenia jest zaporą firewall

-Lokalne systemy plików nie są zaszyfrowane, aby móc się uruchomić, ale nie zawierają niczego użytecznego, a ponieważ łącze VPN jest bardzo ograniczone z drugiej strony, nawet przy całkowitej utracie urządzenia atakujący nie może nic zrobić

Pobierz Armbian Stretch z

Uruchom system i uruchom go:

apt-get update && apt-get upgrade

apt-get install sysvinit-core sysvinit-utils

Edytuj /etc/inittab, wszystkie konsole można wyłączyć, ponieważ pole będzie używane jako bezgłowe. Skomentuj następującą sekcję:

#1: 2345: odrodzenie:/sbin/getty 38400 tty1

#2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6

Uruchom ponownie swoje urządzenie i usuń systemd, aby mieć prawdziwy system wolny od bloatware typu open source.

apt-get remove --purge --auto-remove systemd

Zainstaluj kilka pakietów

apt-get install cryptsetup vim htop rsync screen gcc make git

Zainstaluj bibliotekę wirepi

cd /usr/src

git clone https://github.com/xpertsavenue/WiringOP-Zero.git cd WiringOP-Zero chmod +x./build./build

Utwórz pomarańczowego użytkownika dla wyświetlacza lcd

groupadd -g 1000 pomarańczowy

useradd -m -d /home/pomarańczowy -s /bin/bash -u 1000 -g pomarańczowy pomarańczowy

Pies stróżujący, który nad tobą nie czuwa

apt-get install watchdog

Patrząc na /etc/default/watchdog # Uruchomić watchdoga podczas startu? 0 lub 1 run_watchdog=1 # Uruchomić wd_keepalive po zatrzymaniu watchdoga? 0 lub 1 run_wd_keepalive=1 # Załaduj moduł przed uruchomieniem watchdog_module="none" # Określ tutaj dodatkowe opcje watchdoga (patrz strona podręcznika).

Patrząc na /etc/watchdog.conf

# Przynajmniej włącz te

maksymalne obciążenie-1 = 24 maksymalne obciążenie-5 = 18 maksymalne obciążenie-15 = 12

/etc/init.d/watchdog start

Powinien istnieć co najmniej 1 wątek jądra i 1 proces:

pierwiastek 42 0.0 0.0 0 0 ? I< 10:50 0:00 [watchdogd] korzeń 14613 0,0 0,2 1432 1080 ? SL 13:31 0:00 /usr/sbin/watchdog

Testowanie:

Upewnij się, że zatrzymałeś wszystko i wykonałeś synchronizację i synchronizację oraz synchronizację, aby zapisać resztę danych na dysku. Następnie jako problem główny:

echo 1 > /dev/watchdog

Po kilku sekundach maszyna powinna się zrestartować.

Jak czytamy w instrukcji:

o Czy tabela procesów jest pełna?

o Czy jest wystarczająco dużo wolnej pamięci? o Czy dostępna jest wystarczająca ilość pamięci? o Czy niektóre pliki są dostępne? o Czy niektóre pliki zostały zmienione w określonym przedziale czasu? o Czy średnie obciążenie pracą nie jest zbyt wysokie? o Czy nastąpiło przepełnienie tabeli plików? o Czy proces nadal działa? Proces jest określony przez plik pid. o Czy niektóre adresy IP odpowiadają na ping? o Czy interfejsy sieciowe odbierają ruch? o Czy temperatura jest zbyt wysoka? (Dane temperatury nie zawsze są dostępne.) o Wykonaj zdefiniowane przez użytkownika polecenie, aby wykonać dowolne testy. o Wykonaj jedno lub więcej poleceń test/napraw znajdujących się w /etc/watchdog.d. Te polecenia są wywoływane z argumentem test lub naprawa. Jeśli którykolwiek z tych testów nie powiedzie się, watchdog spowoduje zamknięcie systemu. Jeśli którykolwiek z tych testów, z wyjątkiem pliku binarnego zdefiniowanego przez użytkownika, trwa dłużej niż minutę, komputer również zostanie ponownie uruchomiony.

Ten watchdog mógł działać dobrze na zwykłych architekturach x86, ale na płytach opartych na ARM, takich jak Raspberry PI, Orange PI, zawiódł mnie niezliczoną ilość razy. System może przechodzić w stany zawieszenia, w których zawiesza się nawet watchdog. Skonfigurujmy go tak czy inaczej, może ulepszy się dzięki aktualizacji apt-get na przestrzeni lat:(

Krok 4: Projektowanie oprogramowania

Projektowanie Oprogramowania
Projektowanie Oprogramowania

Sam proces tworzenia kopii zapasowej jest oparty na rsync (najlepsze narzędzie do tworzenia kopii zapasowych, jakie kiedykolwiek wymyślono), dane są przesyłane z SERWER->OrangeBOX.

Wyodrębnienie danych z rsync było jedyną trudną częścią projektu, w której pasek postępu dotyczący kopii zapasowej został wydrukowany na wyświetlaczu LCD.

Istniały 3 możliwe sposoby obliczania postępu tworzenia kopii zapasowej:

1, Stosując formuły takie jak https://wintelguy.com/transfertimecalc.pl do określenia przybliżonego czasu, jaki może zająć transfer

Czas transferu (d:h:m:s): 0:02:44:00

Dla porównania: Szacowany czas przesyłania pliku 123 GB przez różne łącza sieciowe (d:h:m:s): Linia T1/DS1 (1,544 Mb/s) - 7:09:01:46 Ethernet (10 Mb/s) - 1:03: 20:00 Fast Ethernet (100 Mb/s) - 0:02:44:00 Gigabit Ethernet (1000 Mb/s) - 0:00:16:24 10 Gigabit Ethernet (10 Gb/s) - 0:00:01:38

Jeśli rsync zakończy, sygnalizuje skryptowi zatrzymanie obliczeń. Ta metoda jest tylko przybliżona i nie jest niezawodna, również prędkość łącza nie jest stała, może zwolnić, a następnie przyspieszyć. To tylko teoretyczne obliczenia.

2, Wykonywanie sprawdzania rozmiaru w katalogu, aby określić, ile danych już zsynchronizowaliśmy. Może działać bardzo wolno z setkami GB małych plików (chociaż du -s w Linuksie trochę buforuje, jeśli go ponownie uruchomisz)

Host A -> Dane serwera, które mają zostać zarchiwizowane Dane dir: 235 GB

Host B -> Dane klienta Orange box, które mamy w tej chwili Dane reż: 112 GB

Delta to 123 GB.

3, Jeśli system plików jest dedykowany, tak jak w naszym przypadku /dev/mapper/backup, możemy skorzystać z ogólnego wskaźnika wykorzystania systemu plików, aby określić, jak postępuje nasza kopia zapasowa, a to jest naprawdę cholernie szybkie. W tym przypadku nie musimy nawet nigdzie przesyłać stdout rsync, po prostu uruchom suchą rsync, poczekaj, aż się zakończy, oblicz deltę w bajtach i sprawdź to z wolnym miejscem, które mamy na dysku kopii zapasowej i voila, możemy teraz zrób ładny wykres słupkowy. To była metoda, którą wybrałem i oto mój skrypt do niej:

#!/kosz/bash

# Kalkulator postępu tworzenia kopii zapasowych dla OrangeBOX firmy NLD # Wersja: 0.2 (2018/03/05) # # Uruchom go jako nieuprzywilejowany użytkownik z crona # * * * * * /home/orange/backup_progress.sh &> /dev/null # # Skrypt ten odpowiada tylko za wyświetlanie danych na wyświetlaczu LCD, # komunikuje się z programem głównym pośrednio poprzez pliki pozycyjne i blokujące. BACKUP_DRIVE="/dev/mapper/backup" VFILE="$HOME/start.pos" # użycie dysku na początku kopii zapasowej TFILE="$HOME/trans.size" # ogólny wstępnie obliczony rozmiar transferu BFILE="$HOME/ backup.lck" # określa stan początkowy FFILE="$HOME/backup.fin" # określa stan końcowy LFILE1="$HOME/lcd1.bar" # Dane wskaźnika postępu LCD LFILE2="$HOME/lcd2.bar" # postęp LCD indicator data SHUTDOWN="1" # Jeśli 1 zainicjuje inny skrypt, który wyłączy okno na końcu kopii zapasowej BACKUP_CURRENT="0" # Musi zostać zainicjowany, ale zostanie obliczony # Rozmiar dysku w bajtach (dodatkowy check) LCD="sudo /bin/lcd" function is_mount() { grep -q "$1" /proc/mounts status=$? } function red() { sudo /bin/lcdcolor czerwony } function green() { sudo /bin/lcdcolor zielony } function blue() { sudo /bin/lcdcolor niebieski } # Wyczyść stan (ustawiony podczas uruchamiania przez bootup_display.sh). Kopia zapasowa nie jest w toku, NIE psuj wyświetlacza LCD stanu #. Wyświetlaj postęp tylko w przypadku, gdy trwa kopia zapasowa => Brak pliku startowego ORAZ Brak pliku fin = quit if [! -f $BPLIK] && [! -f $FILE]; then exit 1 fi # Jeśli kopia zapasowa została zakończona, ten skrypt wyświetli to i usunie blokady #, aby nie można było uruchomić ponownie do następnej inicjacji. if [-f $FILE]; wtedy zielony $LCD " Kopia zapasowa " "** Ukończona **" echo "Kopia zapasowa zakończona" rm -rf $BFILE $TFILE $FFILE $LFILE1 $LFILE2 $VFILE # Kopia zapasowa zakończona czyszczenie if [$SHUTDOWN == "1"]; then echo "Wykonywanie skryptu zamykającego…" /home/orange/shutdown.sh & fi exit 0 fi # Od tego momentu skrypt jest wykonywany TYLKO, jeśli istnieje BIEŻĄCA kopia zapasowa # dlatego wszystkie błędy zostaną wydrukowane na wyświetlaczu LCD i spowodują uruchomienie skryptu # aby przerwać, jednak nie usunie pliku backup.lck, więc wejdzie tutaj # raz za razem i oceni warunki. is_mount $BACKUP_DRIVE if [$status -ne 0]; następnie czerwony $LCD "ERR: Backup drive" "nie jest zamontowany!" echo "Dysk zapasowy nie jest podłączony" exit 1 fi if [! -s $TFILE]; następnie czerwony $LCD "ERR: transfile" "jest pusty" echo "Plik obliczania rozmiaru transportu jest pusty." exit 1 fi BACKUP_OVERALL=$(head -1 $TFILE |tr -d '\n') if [-z $BACKUP_OVERALL]; następnie czerwony $LCD "BŁĄD: Odczyt rozmiaru" "z serwera nieprawidłowy" echo "Odpowiedź całkowitego rozmiaru kopii zapasowej jest nieprawidłowa 1" exit 1 fi if !

Chociaż kod jest prosty, oto opis tego, co robi:

1, Jeśli BFILE lub FFILE nie istnieje (co jest stanem po wyraźnym uruchomieniu), oznacza to, że nie ma procesu tworzenia kopii zapasowej, więc NIE rób nic, po prostu zakończ. W ten sposób możesz wykreślić dowolne przydatne informacje dotyczące uruchamiania, takie jak nazwa hosta, adres IP, czas pracy itp. I nie zostanie to zepsute.

2, Przejdźmy do sekcji is_mount $BACKUP_DRIVE. Przypominam, że jedynym sposobem, w jaki tu dostaliśmy, jest rozpoczęcie tworzenia kopii zapasowej, więc BFILE istnieje. Teraz kod po prostu wykonuje różne kontrole błędów, takie jak czy dysk kopii zapasowej jest zamontowany?, czy całkowity rozmiar tego, co zamierzamy utworzyć w kopii zapasowej, przekracza rozmiar dysku? lub inne błędy. Pamiętaj, że jest to program tylko do wyświetlania, nawet jeśli rozmiar przekraczałby kopie zapasowe, niczego nie przerwie.

3, OK wszystkie kontrole błędów wyczyściły czas, aby obliczyć wykres procentowy. Najpierw skrypt wykonuje „migawkę” przestrzeni używanej w bajtach w systemie plików kopii zapasowej i zapisuje ją w VFILE. Jaki jest tego cel: skrypt bash jest bezstanowy, traci dane między wykonaniami, więc jeśli chcesz "zapamiętać" jakieś dane z poprzedniego wykonania, musisz je gdzieś przechowywać. W naszym przypadku jest to zwykły plik tekstowy. Dla uproszczenia załóżmy, że nasz START_POS to 1 GB (dane, które posiadamy), kopia zapasowa to +2 GB, a całkowita pojemność dysku to 10 GB.

4, Następnym razem, gdy skrypt uruchomi plik VFILE, istnieje i zostanie on odczytany (więc wiemy, jaka była pozycja początkowa w przypadku, gdy dysk nie był pusty) w celu obliczenia BACKUP_CURRENT, który jest zasadniczo deltą używanego teraz miejsca na dysku backupu minus pozycja początkowa tego, co zapisaliśmy w pliku VFILE w ostatniej rundzie (znowu są to dane, które mieliśmy na dysku w momencie rozpoczęcia backupu). Skrypt wewnętrznie działa na bajtach, ale żeby uprościć, po pół godzinie wykonaliśmy kopię zapasową 500 MB danych, wtedy formuła będzie wyglądać tak: BACKUP_CURRENT=1.5GB - 1GB (stan początkowy) => co daje nam z powrotem dokładnie 500 MB danych, czyli co do tej pory wykonaliśmy kopię zapasową. Widać, że bez śledzenia oryginalnych danych na początku tworzenia kopii zapasowej to obliczenie rozmiaru nie powiedzie się, ponieważ zobaczy, że obecnie używane miejsce wynosi 1,5 GB bez wiedzy, że przez cały czas na dysku znajdował się 1 gigabajt danych pochodzi z poprzedniej kopii zapasowej, więc założono, że serwer wysłał nam 1,5 GB danych zamiast 500 MB.

5, BACKUP_OVERALL zostanie wczytany, dane te zostały obliczone przez serwer podczas początkowej suchej synchronizacji rsync (więc jest to zewnętrzne źródło danych zawierające ilość bajtów, które zostaną zarchiwizowane z serwera->OrangeBOX). Ta wartość zostanie porównana z całkowitą WOLNĄ przestrzenią na dysku w tej chwili i jeśli ją przekroczy, na wyświetlaczu pojawi się komunikat o błędzie, a skrypt zatrzyma się. Pamiętaj, że wszystko, co robi ten skrypt, wyświetla TYLKO, nie zakłóca procesu tworzenia kopii zapasowej. Jeśli wyczyścisz pliki na dysku lub ilość plików zmieni się zdalnie, a zatem BACKUP_OVERALL zmieni się w pewnym momencie, program będzie kontynuowany.

6, Wreszcie skończyliśmy z kontrolami drugiego poziomu, nadszedł czas, aby coś wyświetlić. Skrypt wyświetla zarówno dane na konsoli, jak i na lcd za pomocą prostej aplikacji C. Tło jest zmieniane na NIEBIESKIE, co oznacza, że tworzenie kopii zapasowej w końcu się rozpoczęło, a postęp jest obliczany według następującej formuły PROGRESS=$((($BACKUP_CURRENT * 100) / $BACKUP_OVERALL)). Jest to podstawowa kalkulacja procentowa, którą przyjmujemy bieżącą kwotę, w naszym przykładzie 0,5 GB*100/2 GB = 25%.

7, liczby są również konwertowane z bajtów na bajty mega/giga, a ekran automatycznie wyświetla się w MB, jeśli jest mniejszy niż 1 GB.

8, Jedną rzeczą, która pozostała do zmapowania tego w naszym przypadku, jest 25% na 20-kolumnowym wyświetlaczu LCD. To byłoby 25 * 20 / 100 = 5 w naszym przykładzie. Obecnie zaimplementowane jest odświeżanie za pomocą programu LCD, który za każdym razem, gdy wywołasz program, przerysuje cały ekran. Więc w tym przypadku uruchomiłaby pętlę for 5 razy, aby narysować 5 hashmarków # na ekranie, co pokazałoby się jako brzydkie migotanie w każdej rundzie, więc zamiast tego wypisuję obliczone dane paska postępu do LFILE1 i 2, które w tym przypadku po 5 rund zawierałoby #####, które są odczytywane i wyświetlane na wyświetlaczu LCD. Możesz również umieścić LFILE1 i 2 na ramdysku, aby oszczędzić sdcard przed dodatkowymi operacjami zapisu, nie powodowało to dla mnie żadnych problemów, skrypt uruchamia się raz na minutę z crona.

9, Po zakończeniu tworzenia kopii zapasowej inny skrypt z serwera, na którym działa rsync, dotknie FFILE (Finish File). W następnej pętli backup_progress.sh wyświetli informację, że kopia zapasowa została zakończona i opcjonalnie wywoła inny skrypt zamykający OrangeBOX. W tym momencie usuwa swoje pliki blokujące, uniemożliwiając dalsze wykonania, więc nawet jeśli nie włączysz zamykania w następnej minucie po uruchomieniu tego skryptu, zostanie on natychmiast zamknięty, ponieważ nie ma tam BFILE i nie ma tam pliku FFILE. Dlatego wyświetli komunikat o zakończeniu tworzenia kopii zapasowej przez czas nieokreślony, chyba że kopia zapasowa zostanie ponownie uruchomiona.

Skrypt zdalnej kopii zapasowej (orange-remote.sh):

Będziesz musiał wygenerować klucz ssh do kopii zapasowej i klucz do szyfrowania luks dla dysku. Gdy uruchomisz zdalną kopię zapasową ręcznie po raz pierwszy, zapisze ona odcisk palca hosta w pomarańczowym polu w pliku hosts (od tego momentu może być uruchamiany automatycznie przez cron).

DYSK="/dev/dysk/według-id/…"

Aby znaleźć identyfikator dysku twardego, uruchom uuid, blkid lub po prostu wyszukaj odpowiednie katalogi /dev/disk/.

Można ustawić wykluczenie katalogu, jeśli nie chcesz tworzyć kopii zapasowej wszystkiego. Jest to dość denerwujący proces, ponieważ w przypadku rsync, jeśli chcesz wykluczyć pojedynczy podkatalog głęboko w strukturze, musisz zrobić:

+ /a

+ /a/b + /a/b/c + /a/b/c/d - /a/b/c/d/e + /dir2

Ponieważ ten skrypt zdalnie wykonuje polecenia na OrangeBOX, nie ma nadzoru nad zmiennymi zwracanymi z tej strony, dlatego używam kilku sprytnych sztuczek, takich jak wyprowadzanie wiadomości o otwarciu zdalnego dysku do /tmp/contmsg.txt, a następnie parsowanie aby sprawdzić, czy się udało, jeśli nie, to zmienia plik binarny rsync na niewykonywalny, aby rsync nie próbował przesyłać danych do rootfs OrangePI, wypełniając kartę SD. Dobrą praktyką jest również ustawienie niezmiennego bitu na chattr +i /mnt/backup, aby to uniemożliwić.

Wstępna kalkulacja rozmiaru odbywa się lokalnie na Serwerze, dlatego w kolejnym kroku plik ten musi zostać przesłany do OrangeBOX.

Główna kopia zapasowa jest inicjowana jako pętla dla ((i=0;i<100;i++)); zrobić, ponieważ w przypadku niskiej jakości połączeń internetowych DSL/kablowych rsync często może się zepsuć, przekroczyć limit czasu. Jeśli zakończy się pomyślnie, pętla zostanie przerwana bez próbowania kolejnych iteracji. Działa to bezbłędnie z dobrymi systemami operacyjnymi, jednak jeśli z jakiegoś powodu zdalnym skrzynką byłyby okna i odmówionoby dostępu, jak regularnie na NTUSER. DAT, rsync zwróci kod błędu i ta pętla wykonałaby się 100 razy, a następnie nadal nie powiedzie się.

Krok 5: Zamknięcie i lista rzeczy do zrobienia

Lista zamknięć i zadań
Lista zamknięć i zadań
Lista zamknięć i zadań
Lista zamknięć i zadań

Mój instruktaż pokazuje po raz kolejny, jak możesz stworzyć coś lepszego, bardziej konfigurowalnego urządzenia z komputera za 10 $ na własną rękę, które bije piekło Buffalo dzięki zastrzeżonym, zablokowanym urządzeniom NAS, dziwnym wewnętrznym partycjom, linuxowi z systemem busybox z narzędziami do segfaultów, zarządzanym przez ich oprogramowanie Windows, zamknięte oprogramowanie, złą dokumentację i wsparcie i nieważne ile pieniędzy wydasz, nigdy nie dostaniesz wskaźnika postępu pokazującego twoją kopię zapasową nie wspominając o tym, jak fajnie wygląda OrangeBox (ja nawet używam z nim pomarańczowego kabla CAT5:D).

Ponieważ minikomputery stają się coraz potężniejsze przy zachowaniu tej samej linii cenowej <100$, możemy ich używać do coraz większej liczby zadań. Ponieważ porty Gbe Ethernet są obecnie dość powszechne w ciągu 1-2 lat, pamięć na tych płytach drastycznie wzrośnie i można je również wykorzystać do tworzenia kopii zapasowych opartych na ZFS.

-Drobny wskaźnik postępu ziarna przez program C (patrz WasserStation jeden z moich innych projektów). Teraz tylko # hashmark # znaki używane w trybie znakowym z lcdPuts(lcd, line1), można to poprawić nawet przy użyciu wyświetlaczy LCD do dzielenia 1 kolumny na 5 części, a główny program C może po prostu wziąć liczbę całkowitą taką jak 25 i wyciągnąć pasek postępu poprawnie lub dalej poprawiony za pomocą graficznego wyświetlacza LCD

-Możliwość posiadania wymiennego dysku twardego do tworzenia nowych i nowych kopii zapasowych oraz przenoszenia ich do różnych lokalizacji (jeśli skrzynka wykryje pusty dysk, powinna automatycznie sformatować go za pomocą klucza szyfrowania po jego otrzymaniu).

-Jeśli chcesz wydrukować własną obudowę za pomocą makerbota, OrangeNAS może być dla Ciebie interesujący:

Zalecana: