Dzisiejszy temat troszkę przeskoczył do góry na liście tematów do opisania, ale niejako sam wywołałem go do tablicy stawiając nowy serwer do obsługi m.in. kopii zapasowych innych serwerów/stron internetowych.

Simple Storage Service (S3)

Nie będę zbytnio wdawał się w szczegóły co to jest S3 – zainteresowani albo wiedzą, albo znajda takie informacje na stronach dostawców tego typu usług, a reszcie wystarczy pewnie informacja, że jest to jakby internetowy dysk (object storage), który możemy wykorzystać do przechowywania naszych plików.

Zarazem jest to na tyle uniwersalna technologia/usługa, że możemy taką dodatkową przestrzeń traktować zarówno jako miejsce na kopie zapasowe np. serwera czy strony internetowej, ale również jako normalną przestrzeń, w której możemy trzymać np. większe pliki multimedialne naszej strony (mam w planach kilka wpisów na ten temat, więc pewnie za jakiś czas…).

Dużym atutem usług S3 jest również to, że niezależnie od dostawy usługi zazwyczaj są one ze sobą zgodne, co umożliwia relatywnie swobodne przenoszenie zasobów między rożnymi dostawcami/usługami.

Korzystanie z Simple Storage Service (S3) w systemie Linux (Debian/Raspbian)

Wprawdzie chyba najpopularniejszych (i zarazem prekursorem tego typu usługi) jest Amazon, to ja na potrzeby naszego poradnika skorzystam z usługi „pliki w chmurze” oferowanej przez e24cloud.com/Beyond.pl – ale Wy możecie skorzystać z dowolnej innej usługi zgodnej ze standardem S3.

s3fs (s3fs-fuse)

Wprawdzie programów z których można skorzystać jest co najmniej kilka, to ja najczęściej korzystam z s3fs, który jest prosty w konfiguracji, a zarazem działa bez (większych) problemów.

W tym poradniku będę opierał się na właśnie przeprowadzonej instalacji i konfiguracji w systemie Raspbian (Debian 8 Jessie), działającym na Raspberry Pi B (świeża instalka).

Instalacja s3fs-fuse w systemie Debian/Raspbian

Niestety s3fs nie znajdziemy (na razie?) w standardowych repozytoriach Debiana, dlatego musimy program pobrać i skompilować samodzielnie.

Zaczynamy od instalacji niezbędnych pakietów:

sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev fuse fuse-utils libfuse-dev libssl-dev libxml2-dev make pkg-config

W razie błędu związanego z fuse-utils i przerwanej instalacji pakietów pozbywamy się go z listy:

sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev fuse libfuse-dev libssl-dev libxml2-dev make pkg-config

Następnie pobieramy, kompilujemy i instalujemy s3fs:

sudo git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install

Cała operacja w przypadku Raspberry Pi trwa kilka(naście) minut.

Konfiguracja konta S3

Po instalacji musimy jeszcze skonfigurować program – w tym celu będziemy potrzebować:

  • Adres serwera/usługi (będzie wymagane w dalszych krokach)
  • Klucz API (coś w rodzaju nazwy użytkownika)
  • Sekretny klucz API (coś w rodzaju hasła)

e24cloud_e24pliki_panel01

Plik z kluczami API

Gdy mamy niezbędne informacje (klucze API) tworzymy plik z danymi autoryzacyjnymi:

sudo nano /etc/passwd-s3fs

W pliku tym zapisujemy klucz API i sekretny klucz API wg wzoru:

KluczAPI:SekretnyKluczAPI

Gdy korzystamy z więcej niż jednego kontenera (o tym za chwilę) podajemy również nazwę kontenera:

NazwaKontenera:KluczAPI:SekretnyKluczAPI

Każda grupa (kontener + klucze API) w oddzielnej linii.

Wprawdzie ścieżka i nazwa pliku może być inna, to jeśli zamierzamy w przeszłości korzystać z automatycznego montowania zasobu wraz ze startem systemu (fstab) to ścieżka i nazwa pliku muszę być takie jak podałem powyżej (/etc/passwd-s3fs).

Ze względów bezpieczeństwa program nie zadziała, jeśli nie nadamy jeszcze odpowiednich uprawnień dla pliku z kluczami:

sudo chmod 600 /etc/passwd-s3fs

I to właściwie cała (podstawowa) konfiguracja – zapowiadałem, że jest szybko i (relatywnie) prosto…

Tworzenie kontenera S3 (S3 bucket)

Zanim zamontujemy naszą pamięć zdalną jako element systemu plików musimy utworzyć jeszcze kontener (powiedzmy, że konto S3 to coś na wzór dysku fizycznego, a kontener to partycja na tym dysku), w którym będziemy trzymać pliki.

Jeśli macie już utworzony kontener z którego chcecie korzystać – śmiało możecie przejść do następnego kroku.

Kontener możecie utworzyć bezpośrednio z panelu zarządzania – jeśli jest dostępna taka opcja:

e24cloud_e24pliki_panel_manager-plikow01

DragonDisk

Jeśli nie macie takiej opcji w Waszym panelu zarządzania lub w przypadku gdy chcecie uzyskać dostęp do pamięci również np. z systemu Windows i/lub planujecie więcej operacji warto skorzystać z dedykowanego do takich czynności programu, np. bezpłatnego DragonDisk:

dragondisk_e24cloud_e24pliki01

Jego obsługa nie powinna raczej sprawić problemów, a sam wygląd – jak widać – jest standardowy dla tego typu programów (okno podzielone na 2 części).

Tutaj macie przykładową konfigurację dla usługi „pliki w chmurze” (e24cloud):

dragondisk_e24cloud_e24pliki02

  • Provider: Other S3 compatible service
  • Service Endpoint: e24files.com
  • Account name: e24files.com
  • Access Key: Klucz API
  • Secret Key: Sekretny klucz API
  • HTTP Port: 80
  • HTTPS Port: 433
  • Connect using SSL/HTTPS

Montowanie kontenerów S3

Jeśli chodzi o podstawy związane z montowaniem dysków/zasobów w systemie Linux (Debian) zapraszam Was do tego wpisu – tutaj skupię się już tylko na elementach specyficznych dla usługi S3 i aplikacji s3fs:

sudo s3fs kontener /lokalny/punkt/montowania -o url="https://e24files.com" -o allow_other

Jeśli występuje problem przy połączeniu z adresem po „https” (np. w Raspbien/Debian Wheezy bywały z tym problemy), i musimy skorzystać z „http”:

sudo s3fs kontener /lokalny/punkt/montowania -o url="http://e24files.com" -o allow_other

Choć ja zazwyczaj korzystam z polecenia ze wskazaniem pliku w którym znajdują się dane autoryzacyjne:

sudo s3fs kontener /lokalny/punkt/montowania -o url="https://e24files.com" -o passwd_file=/ścieżka/do/pliku/autoryzacyjnego -o allow_other

W naszym przypadku będzie to:

sudo s3fs kontener /lokalny/punkt/montowania -o url="https://e24files.com" -o passwd_file=/etc/passwd-s3fs -o allow_other

Wprawdzie gdy korzystamy z pliku „/etc/passwd-s3fs” podawanie ścieżki do niego w tym poleceniu nie jest wymagane, to ja na wszelki wypadek (wyrabianie nawyków) i tak podaje.

Gdy coś nie działa

Może się zdarzyć, że podczas próby zamontowania zasobu S3 dostaniecie np. taki komunikat błędu:

ransport endpoint is not connected

Wtedy warto dodać następujące parametry do polecenia:

-f -d

Co da nam np. takie polecenie:

sudo s3fs kontener /lokalny/punkt/montowania -o url="https://e24files.com" -o passwd_file=/ścieżka/do/pliku/autoryzacyjnego -o allow_other -f -d

Dzięki tym 2 parametrom włączymy debugowania, i być może pojawi się jakiś błąd, który naprowadzi nas/Was na rozwiązanie problemu.

Odmontowanie zasobu

Skoro jesteśmy przy montowaniu, to warto choćby wspomnieć jak odmontować taki zasób z lokalnego systemu plików.

Wprawdzie możemy skorzystać ze standardowego polecenia:

sudo umount /lokalny/punkt/montowania

To chyba bezpieczniej jest skorzystać z takiego polecenia:

sudo fusermount -u /lokalny/punkt/montowania

Montowanie za pomocą fstab

Kontener możemy również zamontować podczas startu systemu, korzystając z pliku „fstab”:

sudo nano /etc/fstab

W którym dodajemy linijkę wg wzoru:

s3fs#kontener /lokalny/punkt/montowania fuse allow_other,url=https://e24files.com 0 0

W przypadku korzystania z tej metody (fstab) ścieżka i nazwa pliku autoryzacyjnego musi być taka jak podałem powyżej (/etc/passwd-s3fs).

Korzystanie z pamięci S3

Po zamontowaniu pamięć widoczna jest w systemie jako kolejny zasób:

Filesystem Size Used Avail Use% Mounted on
s3fs 256T 0 256T 0% /lokalny/punkt/montowania

Tak więc możecie z niej korzystać właściwie dowolnie – pamiętajcie tylko, że z racji tego, że jest to pamięć zdalna, dostęp do niej może być trochę wolniejszy (nawet nie tyle sam transfer, co czas dostępu).

Automatyczne pobieranie plików na dysk lokalny

Ja z tego typu zasobów korzystam wprawdzie do różnych celów, to podstawowym celem dla którego instaluje program s3fs na Raspberry Pi jest automatyczne pobieranie plików z kopiami na lokalny dysk podłączony do Raspberry Pi.

Wygląda to tak, że wszystkie serwery wykonują w nocy kopie zapasowe, które są zapisywane w pamięci S3, a nad ranem z tym zasobem łączy się Raspberry Pi i pobiera pliki na lokalny dysk twardy.

W tym celu korzystam z takiego skryptu uruchamianego za pomocą CRONa:

#!/bin/bash

sudo s3fs kontener /lokalny/punkt/montowania -o url="https://e24files.com" -o passwd_file=/etc/passwd-s3fs -o allow_other

sudo rsync --remove-source-files -rtvu --exclude '.fuse_hidden*' /lokalny/punkt/montowania /lokalny/dysk/na/kopie

sudo fusermount -u /lokalny/punkt/montowania exit

Działanie skryptu jest relatywnie proste – najpierw jest montowany kontener o nazwie „kontener” lokalnie (/lokalny/punkt/montowania), a następnie za pomocą polecenia „rsync” pobieramy z niego wszystkie pliki na lokalny dysk (/lokalny/dysk/na/kopie), po czym następuje odmontowanie zasobu S3 z lokalnego systemu plików.

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk