Kopia zapasowa Microsoft 365 (SharePoint i OneDrive) za darmo z użyciem Raspberry Pi i Rclone
Gdy zaczynałem pracę u mojego pracodawcy, używali oni lokalnego serwera i przechowywali pliki na miejscu, z nocnymi kopiami zapasowymi na zewnętrzne dyski mobilne. Wszystko było ograniczone prędkością łącza szerokopasmowego (internetu), co w Anglii jest dość szalone – parki biznesowe rzadko mają dostęp do niedrogich połączeń światłowodowych, podczas gdy w domu można uzyskać tani synchroniczny światłowód. Kiedy nadeszła zmiana (a raczej firma musiała w nią zainwestować), przenieśliśmy wszystko do chmury.
Wybraliśmy Microsoft 365 jako naszego dostawcę.
Po zakończeniu migracji i przyzwyczajeniu się ludzi do nowego sposobu dostępu do plików (który niewiele się zmienił dzięki integracji aplikacji OneDrive z systemem Windows, poza używaniem linków do plików), musiałem znaleźć metodę tworzenia kopii zapasowych wszystkich plików na wypadek awarii (lub przypadkowego usunięcia ważnych plików przez pracownika).
Chociaż Microsoft oferuje opcję przywracania plików przez krótki okres (zazwyczaj 30 dni), czasem może to być zbyt krótko – zanim zauważysz, że pliki zaginęły, może być już za późno. Lepiej mieć kopię zapasową (nawet starą wersję pliku) niż nie mieć żadnej kopii.
Nie wchodząc w kosztowne rozwiązania do tworzenia kopii zapasowych online ani nawet w inwestowanie w Microsoft 365 Backup (z modelem rozliczeń pay-as-you-go), postanowiłem zbudować niedrogi i stosunkowo tani system długoterminowych kopii zapasowych – i to mi się udało.
W tym celu użyłem Raspberry Pi z systemem Raspberry Pi OS (dawniej Raspbian OS). Początkowo używałem Pi 3, ale później przeniosłem się na Pi Zero W (obecnie Pi Zero 2 W), ponieważ Pi 3 był zbyt wydajny do tego zadania. Do przechowywania danych użyłem zewnętrznie podłączonego dysku twardego (dysku twardego 2,5 cala o pojemności 1 TB w obudowie USB 3.0) podłączonego za pomocą konwertera micro USB na USB. Do zasilania użyłem ładowarki do iPada 2A @ 5V z kablem USB na micro USB.
Po szybkiej wstępnej konfiguracji i uruchomieniu kilku poleceń, system backupu był gotowy do działania. Używam go z powodzeniem od połowy 2019 roku i teraz chciałbym się nim z Wami podzielić.
Ponieważ dostęp do WebDAV dla SharePoint w Microsoft 365 Business Standard został wycofany, odpowiednio zaktualizowałem poniższy przewodnik dla witryn SharePoint i ich bibliotek dokumentów. Zrewidowałem również metodę konfiguracji, aby uwzględnić zdalne konfigurowanie wszystkiego przez sieć.
Będziesz potrzebować:
- Raspberry Pi z kartą microSD o pojemności minimum 8 GB (na system operacyjny);
- Zewnętrzny dysk twardy lub pamięć USB podłączana przez USB (na pamięć zewnętrzną – pojemność zależy od Twoich potrzeb);
- Ładowarki zapewniającej wystarczającą moc (szczególnie przy użyciu zewnętrznego dysku twardego);
- Raspberry Pi OS (wcześniej znany jako Raspbian OS);
- Raspberry Pi Imager (oficjalne oprogramowanie).
Raspberry OS
Aby zainstalować system Raspberry Pi OS na karcie SD, użyjemy dedykowanego oprogramowania o nazwie Raspberry Pi Imager.
Wcześniej zalecałem pobranie obrazu Raspberry Pi OS i użycie balenaEtcher do jego wgrania na kartę SD. Jednak Raspberry Pi Imager ma teraz przewagę nad balenaEtcher, ponieważ pozwala wstępnie ustawić niektóre parametry, takie jak hasło, nazwa hosta i połączenie Wi-Fi. Oznacza to, że możesz wszystko zrobić zdalnie, bez konieczności podłączania ekranu, klawiatury i myszy do początkowej konfiguracji.
Przy pierwszym uruchomieniu należy wybrać swoje urządzenie Raspberry Pi (moje to Pi Zero 2 W) i wybrać system operacyjny.
Oto wskazówka — nie wybieraj 64-bitowego systemu operacyjnego. Nie wszystkie oprogramowanie jest jeszcze dostępne dla 64-bitów, zwłaszcza na lekkich urządzeniach, takich jak Pi Zero 2 W. Do uwierzytelniania Microsoftu użyjemy środowiska graficznego i lekkiej przeglądarki Midori, która jest dostępna tylko w wersji 32-bitowej. Chrome byłby przesadą i koszmarem wydajnościowym na takim urządzeniu.
W sekcji System operacyjny wybierz Raspberry Pi OS (32-bit). Alternatywnie, jeśli chcesz możliwie najlżejszą instalację (zalecane), przewiń w dół i wybierz Raspberry Pi OS (inne), a następnie Raspberry Pi OS Lite (32-bit).
Poniższe kroki będą oparte na Raspberry Pi OS Lite (32-bit).
Następnie wybierz nośnik danych. Podłącz kartę SD do komputera i wybierz ją.
Po dokonaniu wyboru kliknij przycisk Dalej. Na tym etapie zostaniesz zapytany, czy chcesz zastosować niestandardowe ustawienia. Zdecydowanie zalecam to zrobić i odpowiednio wszystko ustawić.
W zakładce Ogólne sugeruję ustawienie nazwy hosta, nazwy użytkownika i hasła oraz skonfigurowanie sieci bezprzewodowej LAN. Przewiń dalej, aby ustawić ustawienia regionalne.
W zakładce Usługi upewnij się, że włączono SSH, a następnie kliknij przycisk ZAPISZ.
Jak wspomniano wcześniej, będziemy potrzebować środowiska graficznego na naszym Raspberry Pi i przeglądarki Midori do konfiguracji, ale nie potrzebujemy, aby działały domyślnie. Wszystkie niezbędne kroki omówimy później.
Początkowa konfiguracja
Zgodnie z wcześniej zdefiniowanymi ustawieniami połączenia Wi-Fi, po uruchomieniu naszego urządzenia musimy się do niego podłączyć przez SSH.
ssh pi@192.168.1.188 -p 22
Twój adres IP zostanie przypisany przez router, chyba że ustawiłeś statyczny adres IP na podstawie adresu MAC urządzenia.
Gdy już się połączymy, zaktualizujmy naszą listę pakietów oprogramowania.
sudo apt update
FTP (opcjonalnie)
Możemy potrzebować dostępu do naszego urządzenia przez protokół FTP, aby łatwo przesyłać lub pobierać pliki. Poniższe polecenie zainstaluje serwer FTP na Twoim Raspberry Pi.
sudo apt install vsftpd
Po zainstalowaniu wystarczy zmienić jedno ustawienie w usłudze vsftpd, aby włączyć dostęp do zapisu przez ten protokół.
Edytujmy plik vsftpd.conf
.
sudo nano /etc/vsftpd.conf
Odkomentuj (usuń znak #
z) wiersza write_enable=YES
.
Następnie wyjdź i zapisz plik, a następnie uruchom ponownie usługę FTP.
/etc/init.d/vsftpd restart
Środowisko graficzne
Zainstalujmy środowisko graficzne, ponieważ na późniejszym etapie będziemy musieli uruchomić przeglądarkę internetową, aby uwierzytelnić się w usługach Microsoftu.
sudo apt install raspberrypi-ui-mods
Lekka przeglądarka
Zaraz po tym zainstalujmy Midori, lekką przeglądarkę internetową.
sudo apt install midori
Pulpit zdalny
Aby móc połączyć się z naszym pulpitem zdalnym za pomocą RealVNC, musimy najpierw zainstalować serwer.
sudo apt install realvnc-vnc-server
Gdy to zostanie zrobione, będziemy musieli również zainstalować RealVNC Viewer na naszym komputerze.
Aby uruchomić wirtualny pulpit i połączyć się z nim za pomocą przeglądarki, musimy wykonać następujące polecenie:
vncserver-virtual
Domyślnie nasz pulpit będzie działał jako
:1
.
Gdy już będzie działał, będziemy mogli połączyć się z nim przez RealVNC Viewer, łącząc się z 192.168.1.188:1
.
Aby wyłączyć pulpit zdalny, możemy użyć poniższego polecenia.
vncserver-virtual -kill :1
Jeśli wolisz połączenie zdalne przez protokół RDP, możesz to zrobić, instalując xrdp
.
sudo apt install xrdp
Następnie możesz po prostu użyć wbudowanej aplikacji Pulpit zdalny w systemie Windows lub pobrać aplikację Windows, jeśli używasz systemu macOS.
Rclone
Do celów tworzenia kopii zapasowych użyjemy pakietu o nazwie rclone.
Aby go zainstalować, użyj następującego polecenia:
sudo apt install rclone
Screen
Aby kopia zapasowa mogła działać po odłączeniu się od terminala, warto uruchomić ją wewnątrz screen
. Musimy dodać tę funkcjonalność, instalując pakiet.
sudo apt install screen
Teraz jesteśmy gotowi do konfiguracji naszej pamięci masowej.
Pamięć masowa
Zacznijmy od sformatowania naszego dysku na exfat
przed podłączeniem go do Raspberry Pi.
Jeśli chcesz to zrobić na Raspberry Pi, polecam użycie GParted — łatwego, graficznego narzędzia do partycjonowania.
Zainstalujmy je, jak pokazano poniżej, a następnie uruchommy wirtualny pulpit zdalny i sformatujmy dysk za pomocą interfejsu graficznego.
sudo apt install gparted
GParted nie jest w stanie natywnie tworzyć partycji exfat
, więc będziemy musieli zainstalować dodatkowe narzędzia.
sudo apt install exfat-utils exfat-fuse
Na wirtualnym pulpicie przejdź do Menu Pi > Narzędzia systemowe > GParted.
W GParted wybierz swój dysk twardy z rozwijanego menu w prawym górnym rogu. Zazwyczaj będzie to /dev/sda
.
Jeśli na dysku twardym nie ma partycji, utworzymy ją.
Jeśli istnieją jakieś partycje, usuń je i zacznij od nowa.
Utwórz partycję sformatowaną jako exfat
, ponieważ umożliwi to szybkie podłączenie jej do komputera z systemem Windows lub macOS i efektywną pracę na zapisanych plikach.
W GParted utwórz partycję niesformatowaną (spowoduje to utworzenie /dev/sda1
), a następnie sformatuj ją na exfat
z poziomu terminala.
sudo mkfs.exfat /dev/sda1
Montowanie dysku twardego
Ponieważ używam wersji Lite Raspberry Pi OS, środowisko graficzne nie jest uruchamiane przy starcie, więc dyski nie są automatycznie montowane i dostępne po podłączeniu. Aby zamontować dysk, użyjemy poniższego polecenia, które ustawi domyślne uprawnienia zapisu dla użytkownika pi. Jest to ważne, ponieważ oznacza, że nie będziemy musieli cały czas uruchamiać kolejnych poleceń z sudo.
Przed montowaniem stwórzmy punkt montowania. Ja stworzyłem swój w /media/pi/O365
, więc muszę utworzyć odpowiednie puste foldery w tym celu.
sudo mkdir /media/pi
sudo mkdir /media/pi/O365
Następnie, po prostu zamontuj dysk za pomocą poniższego polecenia.
sudo mount -t exfat -o uid=1000,gid=1000 /dev/sda1 /media/pi/O365/
Potwierdź, że jest widoczny, używając polecenia df
.
Narzędzie do usypiania dysku twardego (opcjonalnie)
W zależności od typu dysku twardego, którego używamy do tworzenia kopii zapasowej, warto rozważyć zapobieganie jego usypianiu w trakcie tworzenia kopii zapasowej.
Zainstalujmy pakiet hd-idle
.
sudo apt install hd-idle
Gdy nasza pamięć masowa jest podłączona i zamontowana, możemy wykonać poniższe polecenie, aby ustawić czas usypiania na zero.
hd-idle -i 0 -a sda
Teraz Twój dysk jest gotowy do użycia.
Konfiguracja Rclone
Nadszedł czas, aby skonfigurować naszą kopię zapasową za pomocą Rclone.
Na tym etapie będziemy używać terminala (zdalnego lub przez wirtualny pulpit) oraz przeglądarki internetowej (Midori) na pulpicie zdalnym.
Jeśli jeszcze tego nie zrobiłeś, uruchom wirtualny pulpit za pomocą
vncserver-virtual
i połącz się z nim za pomocą RealVNC Viewer.
rclone config
Z menu utwórz nowe zdalne połączenie, naciskając n
.
Nazwijmy je o365onedrive (dla osobistego OneDrive), a później utwórzmy kolejne o nazwie o365sharepoint (dla biblioteki dokumentów SharePoint).
W następnym kroku musimy zdecydować, której usługi użyć.
Dla Microsoftu wybierz Microsoft OneDrive. Jest to opcja do tworzenia kopii zapasowych zarówno folderu OneDrive użytkownika, jak i biblioteki dokumentów SharePoint. Ta konfiguracja będzie wymagać tokenu uwierzytelniającego (nie hasła), dlatego będziemy musieli to zrobić za pośrednictwem Midori.
OneDrive Osobisty
Wybierz Typ pamięci masowej do konfiguracji z listy, podając numer lub wpisując onedrive.
Nie musimy nic wpisywać dla client_id
i client_secret
(wystarczy nacisnąć Enter, aby zaakceptować domyślne).
Dla Wybierz region chmury narodowej dla OneDrive, pozostawiam domyślny (globalny) wybór.
Gdy zostaniesz zapytany Edytować zaawansowaną konfigurację?, odpowiedz n na Nie lub po prostu naciśnij Enter.
Gdy zostaniesz zapytany Użyć auto konfiguracji?, odpowiedz Tak lub po prostu naciśnij Enter.
Na tym etapie zostanie nam przedstawiony lokalny adres URL, taki jak http://127.0.0.1:53682/auth?state=6W7rX_yb67gWJfySzz_WkA
, wraz z komunikatem Zaloguj się i autoryzuj rclone do dostępu oraz Oczekiwanie na kod….
Skopiuj ten link i otwórz go w Midori.
Tam będziesz musiał zalogować się na swoje konto Microsoft 365, postępując zgodnie z instrukcjami na ekranie.
Kiedy wszystko pójdzie dobrze, zobaczysz prostą stronę z komunikatem Sukces! Wszystko zrobione. Proszę wrócić do rclone. w Midori, a w terminalu otrzymasz potwierdzenie (Otrzymano kod), że kod został odebrany.
Na tym etapie możesz zamknąć przeglądarkę internetową i wrócić do terminala.
Z końcowych opcji musisz wybrać typ konta.
Wybierz 1 dla OneDrive Osobisty lub Biznesowy.
Możesz tu również zobaczyć wymieniony SharePoint, ale o tym później.
W ostatnim kroku (Wybierz dysk, którego chcesz użyć) potwierdź, którego dysku użyć, wybierając OneDrive (firmowy).
Ostatni krok:
Drive OK?
Found drive "root" of type "business"
URL: https://contoso.sharepoint.com/personal/dariusz_contoso_com/Documents
Po prostu potwierdzamy t na Tak (lub po prostu naciskamy Enter) i jeszcze raz t na Tak, aby potwierdzić, że wszystko jest w porządku i konfiguracja zostanie zapisana.
Opuśćmy teraz konfigurację rclone
(naciśnij q
) i sprawdźmy, czy widzimy foldery w naszej konfiguracji.
W terminalu wpisz:
rclone lsd o365personal:
To powinno wyświetlić listę katalogów na Twoim osobistym koncie OneDrive. Jeśli wszystko pójdzie dobrze, konfiguracja jest gotowa.
Biblioteka dokumentów SharePoint
W przeszłości dostęp do Biblioteki dokumentów SharePoint odbywał się za pomocą protokołu
webdav
, ale ta metoda nie jest już używana. Microsoft odszedł od dostępu opartego na WebDAV na rzecz synchronizacji OneDrive i nowoczesnej integracji z SharePoint.
rclone config
Utwórz nową konfigurację – n
.
Nazwijmy ją o365sharepoint (dla biblioteki dokumentów SharePoint).
Dla Typu pamięci masowej do konfiguracji wybierz opcję z listy lub wpisz onedrive
.
Pozostaw client_id
i client_secret
puste.
Wybierz opcję swojego regionu
(domyślna globalna).
Odpowiedz Nie na zaawansowaną konfigurację i Tak na automatyczną konfigurację.
Przejdź pod nowy link http://127.0.0.1...
w przeglądarce Midori i zaloguj się na swoje konto, aż otrzymasz komunikat Sukces! Wszystko gotowe. Wróć do rclone.
Z opcji Typ połączenia wybierz tę związaną z nazwą witryny SharePoint lub adresem URL, np. mysite
lub https://contoso.sharepoint.com/sites/mysite
(URL).
W następnym kroku wklej link do swojej witryny SharePoint (nie do folderu Udostępnionego katalogu ani żadnego innego, ale bezpośrednio do utworzonej witryny SharePoint, gdzie znajdują się foldery), na przykład https://contoso.sharepoint.com/sites/mysite
.
W kolejnym kroku będziesz musiał Wybierz dysk, którego chcesz użyć.
Zazwyczaj będzie to jedna z pierwszych opcji związanych z Dokumentami (biblioteką dokumentów). Jeśli masz więcej niż jedną bibliotekę dokumentów, będziesz musiał utworzyć oddzielną konfigurację dla każdego folderu biblioteki dokumentów.
Ostatni krok:
Drive OK?
Found drive "root" of type "documentLibrary"
URL: https://contoso.sharepoint.com/sites/mysite/Shared%20Documents
Po prostu potwierdzamy t na Tak (lub po prostu naciskamy Enter) i jeszcze raz t na Tak, aby potwierdzić, że wszystko jest w porządku i konfiguracja zostanie zapisana.
Opuśćmy teraz konfigurację rclone
(naciśnij q
) i sprawdźmy, czy możemy wyświetlić foldery w naszej konfiguracji SharePoint.
W terminalu wpisz:
rclone lsd o365sharepoint:
To powinno wyświetlić listę katalogów w Twojej Bibliotece Dokumentów SharePoint. Jeśli wszystko pójdzie dobrze, konfiguracja jest gotowa.
Nie będziemy już potrzebować wirtualnego pulpitu, więc możemy go zamknąć, wykonując polecenie vncserver-virtual -kill :1
.
Kroki przed wykonaniem kopii zapasowej
Teraz nadszedł czas, aby wykonać polecenia, które rozpoczną proces tworzenia kopii zapasowej.
Nie musimy tego robić na pulpicie Raspberry Pi OS; możemy uruchomić je przez SSH.
Przejdźmy na nasz zamontowany dysk twardy pod /media/pi/O365
i utwórzmy tam dwa foldery, po jednym dla każdej konfiguracji w rclone
.
mkdir OneDrive
mkdir SharePoint
Teraz jesteśmy gotowi.
Kopia zapasowa
Uruchom polecenie screen
i wykonaj w nim poniższe komendy, dzięki czemu będziesz mógł zamknąć terminal i rozłączyć się bez przerywania procesu tworzenia kopii zapasowej. Aby wrócić do sesji, zaloguj się przez SSH i przywołaj sesję za pomocą screen -R
. Jeśli masz uruchomionych więcej niż jedną sesję (więcej na ten temat na końcu), zostanie Ci przedstawiona lista sesji i będziesz musiał przywołać konkretną, używając jej numeru, na przykład screen -R 693
.
Kopia zapasowa – OneDrive
Oto moje polecenie do utworzenia kopii zapasowej mojego osobistego OneDrive’a o365personal
na dysku zapasowym.
rclone copy --progress --update o365personal: /media/pi/O365/OneDrive --log-file=/media/pi/O365/OneDrive.log --log-level ERROR
To polecenie rozpocznie kopiowanie naszych plików z OneDrive na nasz dysk twardy.
Jak widać, polecenie nie tylko pokaże --progress
, ale także zarejestruje w --log-file
wszelkie błędy napotkane podczas dostępu do plików. Opcja --update
służy do aktualizowania zmienionych plików, a nie do pobierania i nadpisywania ich, nawet jeśli są dokładnie takie same. Jest to bardzo przydatne, jeśli wykonujemy progresywną kopię zapasową do tego samego folderu co poprzednio.
Po udanym wykonaniu polecenia zawsze warto sprawdzić logi.
Kopia zapasowa – SharePoint
Następujące polecenie skopiuje nasz folder „Wspólne dokumenty” na naszej witrynie SharePoint.
rclone copy --progress --update o365sharepoint: /media/pi/O365/SharePoint --log-file=/media/pi/O365/Documents.log --log-level ERROR
W ten sposób mamy świetny system tworzenia kopii zapasowych naszych plików w chmurze Microsoft 365 (OneDrive i SharePoint).
Wyłączając koszt konfiguracji — Raspberry Pi i zewnętrzne dyski twarde (oraz prąd) — nie ma żadnych opłat abonamentowych, a my zachowujemy pełną kontrolę nad naszymi plikami.
Tworzenie kopii zapasowej nie jest szybkie i może zająć kilka godzin w przypadku witryn SharePoint o rozmiarze powyżej 100 GB.
Używam tego systemu od lat i użyłem go co najmniej dwa razy w tym czasie, aby przywrócić kilka kluczowych plików.
Rozwiązywanie problemów z siecią Raspberry Pi
Na moim Raspberry Pi doświadczyłem problemu z Wi-Fi, który od czasu do czasu nagle zrywał połączenie z routerem, zwłaszcza gdy zadania na urządzeniu zostały zakończone i nie było aktywności sieciowej. Zawieszał się również przy intensywnym wykorzystaniu sieci Wi-Fi. Naprawiłem to na dwa sposoby.
Zarządzanie energią WLAN
Tuż przed uruchomieniem kopii zapasowej, wykonuję poniższe polecenia, aby wyłączyć wszelkie funkcje oszczędzania energii związane z bezprzewodową siecią LAN na moim urządzeniu.
sudo iwconfig wlan0 power off
sudo iw wlan0 set power_save off
Sztuczna aktywność sieciowa
Równolegle z screen
uruchamiającym moje polecenie kopii zapasowej, uruchamiam dodatkowy screen
, gdzie po prostu wykonuję polecenie:
ping 1.1.1.1
Ta prosta rzecz pomogła utrzymać aktywność sieciową i zapobiegła zawieszaniu się Raspberry Pi podczas procedury tworzenia kopii zapasowej, która czasami może trwać wiele godzin.
I to wszystko.
Pozdrawiam
Komentarze i Reakcje