O co chodzi?
Cześć, dzisiaj krótko o moich doświadczeniach z oprogramowaniem i hardware’m pracującym jako NAS / serwer do przechowywania backupów / do hostowania różnych innych usług “domowych”. Post początkowo miał być kilku, no może kilkunastozdaniową wiadomością na Signalu - finalnie skończył jako niniejszy artykuł zawierający ponad 2500 słów 🙈
Nie jest to poradnik i chyba lepiej go tak nie traktować. Jest to raczej zbiór moich doświadczeń, przemyśleń i opinii - zwykle, lecz nie zawsze, popartych jakimiś merytorycznymi argumentami
Proszę pamiętać, że tekst dostarczany jest bez żadnej gwarancji. Jeśli posłuchacie czegoś co powiedziałem i coś wam nie wyjdzie - winni jesteście tylko wy sami 😉
Jeśli istnieje potrzeba wytłumaczenia jakiejś kwestii, śmiało piszcie pod maila podanego na samym końcu tego artykułu. Nie mogę zagwarantować, że w każdym przypadku będę w stanie pomóc, ale na każdego maila postaram się odpowiedzieć 😄
Założenia
Zakładam, że:
- chcemy przechowywać co najmniej kilkaset gigabajtów danych (przy ilościach mierzonych w dziesiątkach gigabajtów sugerowane przeze mnie rozwiązania raczej nie mają sensu);
- chcemy przechowywać maksymalnie kilka terabajtów danych;
- posiadamy jakieś (nieduże, ale jednak) doświadczenie w administrowaniu komputerami.
Co do ostatniego punktu - jeśli mówią Ci coś słowa-klucze typu: Linux, RAID, wirtualizacja, ZFS, Raspberry Pi, SATA, M.2, backup, TrueNAS, Proxmox i miałxś z choć niektórymi z nich do czynienia, nie powinno być większych problemów ze zrozumieniem “technicznych” aspektów tego tekstu 😄
Ponadto:
- w odniesieniu do sprzętu używam zamiennie słów
komputer,serwerorazhost; - słowa
serwerużywam zarówno w odniesieniu do hardware’u (komputera który coś hostuje), jak i oprogramowania (programu który coś hostuje); - słowa
hostużywam zarówno w odniesieniu do hardware’u (komputera który coś hostuje), jak i oprogramowania (systemu operacyjnego pracującego bezpośrednio na “żywym sprzęcie”) - słowa
lubużywam jako OR (niektórzy powiedzieliby “i/lub”); - słowa
alboużywam jako XOR (niektórzy powiedzieliby “lub”);
Hardware
Komputer
Wybierając sprzęt powinniśmy (moim zdaniem oczywiście) patrzeć przede wszystkim na:
- zużycie energii,
- cenę,
- możliwości podłączenia dysków.
Wbrew pozorom, mniej ważny jest np. procesor - tak naprawdę nie będzie on specjalnie obciążony. W 95% przypadków wystarczy tutaj coś o wydajności starego Pentiuma czy Celerona ;)
Prąd
Do obliczeń kosztów energii możemy przyjąć, że cena 1 kWh to 1 zł. Jeśli chcemy uzyskać dokładniejszą średnią - podzielmy odczytaną z faktury kwotę przez odczytaną z tej samej faktury ilość zużytej energii
Tutaj mały segment fizyczno-matematyczny. Załóżmy że mamy komputer, który średnio pobiera 25 W. Oznacza to, że w 24 h pobierze on 25 W * 24 h = 600 Wh. Prąd na fakturze rozliczany jest w kWh, a nie Wh. Sytuacja jest dokładnie taka sama jak w przypadku znanych nam kilometrów - 1000 m to 1 km. Zatem 600 Wh to 0.6 kWh. Możemy więc stwierdzić, że komputer o średnim poborze prądu 25W będzie kosztować nas około 0.6 zł (60 gr) dziennie. Z jednej strony - niedużo. Z drugiej strony, 60 gr * 365 dni daje nam już 219 zł rocznie
Nietrudno teraz policzyć, że zmniejszenie średniego zużycia o zaledwie 5 W da nam aż 43.8 zł oszczędności w skali roku. To już osiem hotdogów. Albo cztery zapiekanki. Albo dwa kebaby. Albo jedna pizza. Zależy co kto woli :)
Podkreślony fragment powyżej uważam za szczególnie ważny - nawet jeśli nie w kontekście wyboru komputera, to w kontekście innych urządzeń, które mamy w domu i pracują 24/7.
TDP
Należy pamiętać, że TDP procesora to nie pobór prądu. Przez zdecydowaną większość czasu pracy procesor będzie pobierał znacznie mniej niż TDP, ale chwilowo może też pobierać zauważalnie więcej.
TDP jest tylko wskaźnikiem mówiącym, jakiego mniej więcej chłodzenia wymaga dane CPU - choć oczywiście występuje tu jakaś korelacja ze średnią mocą, raczej nie możemy na tym polegać jeśli chcemy wykonywać jakiekolwiek obliczenia.
Niestety chyba nie istnieje łatwy sposób stwierdzenia, ile średnio dany komputer będzie pobierał prądu. Możemy jedynie szukać w internecie pomiarów użytkowników takiego samego sprzętu 😄
Komputer - wnioski
Zaraz ktoś napisze “to jaki komputer mam w końcu kupić???”. Na co odpowiem, że, jak zawsze, “to zależy” :)
To zależy od naszych potrzeb. Popularne minikomputery Raspberry Pi (i różne podobne rozwiązania) są bardzo fajne pod kątem zużycia energii. Jeśli jednak chodzi o ich cenę i podłączenie dysków, nie wygląda to już tak kolorowo. Są oczywiście fani podpinania czterech dysków po USB do Raspberrki, ale… ja takich kombinacji raczej nie polecam.
Rozwiązanie które polecam to relatywnie nowe komputery poleasingowe. Dlaczego “relatywnie nowe”? Bo stare sprzęty na 2 czy 3 generacji Intela będą pożerały dużo prądu. Z kolei nowe będą po prostu drogie.
Celujmy raczej w małe kompy, bo w nich zwykle możemy znaleźć energooszczędne procesory (w przypadku tradycyjnych Inteli są to np. te z końcówkami T albo U).
Patrzmy jednak też na porty SATA/M.2, abyśmy mogli podłączyć pożądaną liczbę dysków.
Komputer - moje zabawki
Absolutnie nie należy traktować poniższego sprzętu jako “święty graal” - na 100% można znaleźć coś lepszego w lepszych cenach, po prostu opisuję to co mam
Aktualnie mój homelab stoi na chińskim komputerku z procesorem Intel Celeron N5100. Pobiera on bardzo małą ilość prądu, a jednocześnie ma wystarczającą wydajność do właściwie wszystkiego co od takiego serwera możemy chcieć (no może poza transkodowaniem wideo, ale tego nie potrzebuję robić). Razem z dorobionym wentylatorem, bramką RFLink, i dwoma dyskami SSD średnio pobiera ok. 19-20 W - ale mam na nim uruchomionych dość dużo usług, z samym serwerem plików pewnie byłoby to ok. 3-4 W mniej.
Poprzednim sprzętem był Dell Optiplex 3020M z procesorem Intel Pentium G3250T. Działał on równie dobrze i pobierał niewiele więcej prądu - jednak było na nim uruchomionych mniej usług i miał podłączony tylko jeden dysk.
Sieć
Musimy pamiętać, że jakoś ten serwer trzeba podłączyć do sieci. Oczywiście preferowanym rozwiązaniem jest podpięcie go po skrętce. Połączenie po Wi-Fi teoretycznie jest możliwe, ale… naprawdę nie chcecie tego robić. To opcja niestabilna, powolna, i ogólnie uciążliwa. Już lepiej ciągnąć kabel przez pół mieszkania
Dyski
Wybór dysków będzie zależał od możliwości naszego komputera, ale często też od tego jakie dyski mamy w szufladzie. I słusznie - jeśli coś mamy to warto to wykorzystać.
Trzeba się zastanowić, jak ważne są dla nas dane na serwerze. Jeśli są to np. filmy pobrane z internetu, możemy pozwolić sobie na przechowywanie ich na jednym dysku - jeśli ulegnie uszkodzeniu, można pobrać je jeszcze raz. Jeśli są to np. zdjęcia wykonane samemu, lub jakiekolwiek inne cenne dla nas pliki, to musimy wykombinować rozwiązanie, które:
- zapewni nam ochronę przed awariami dysków
- zapewni nam ochronę przed błędami administratora, dziurami w zabezpieczeniach itp.
To pierwsze jest dość łatwe - wystarczy podłączyć dwa dyski, połączyć je w RAID1 (mirror, czyli na obu przechowywane są dokładnie te same dane) i już, jeden z nich może ulec awarii bez utraty naszych plików
To drugie jest zdecydowanie trudniejsze, jednak równie ważne - co z tego że nasze dane przeżyją awarię sprzętu, skoro nie przeżyją przypadkowego usunięcia przed administratora lub zaszyfrowania przez jakiś ransomware
Najprostszym sposobem na rozwiązanie drugiego problemu jest posiadanie zwykłego zewnętrznego dysku USB, na który raz na jakis czas będziemy zrzucać dane. Wtedy nawet w razie usunięcia z serwera dalej posiadamy ich kopię. Jest to system który działa dobrze, jeśli potrafimy zachować systematyczność, regularnie wykonywać i testować backupy (pamiętajmy, że nieprzetestowany backup to brak backupu!)
Wiadomo jednak jak to jest w praktyce, nikomu nie chce się tego robić. Dlatego bardziej zaawansowanym polecam posiadanie drugiego serwera, który będzie przechowywał kopie zapasowe serwera głównego - ale o tym może później :)
Dyski - wnioski
W dalszej części tego tekstu założę, że mamy do czynienia z konfiguracją, w której istnieją minimum dwa dyski podłączone do naszego serwera. Te dyski połączyć możemy w RAID1 - co pozwoli nam na awarię jednego z nich bez utraty danych
Software
System operacyjny
A więc mamy już komputer, mamy dyski, wszystko złożyliśmy i podłączyliśmy. Trzeba wybrać, pod jakim systemem będzie działał nasz serwer. I tutaj znów - “to zależy” od potrzeb.
Jeśli chcemy zbudować tylko serwer NAS (plików), możemy zainstalować system do tego dedykowany bezpośrednio na serwerze. Najpopularniejszymi rozwiązaniami będą tutaj:
Jeśli jednak chcemy używać naszego serwera także do innych rzeczy (np. serwera automatyki domowej, serwera www, i różnych innych usług) możemy użyć środowiska, które umożliwi nam wirtualizację lub konteneryzację. Takim systemem może być na przykład Proxmox VE. Moim zdaniem jest to rozwiązanie zdecydowanie lepsze.
Teoretycznie TrueNAS czy OMV też mają opcję uruchamiania maszyn wirtualych - ale zawsze będzie to działać gorzej niż dedykowane rozwiązanie. A jeśli chcemy korzystać z funkcji oferowanych np. przez TrueNASa, nic nie stoi na przeszkodzie aby zainstalować go w maszynie wirtualnej pracującej na Proxmoxie.
Proxmox
Co to jest?
Proxmox to system, który pozwala nam na uruchamianie w nim innych systemów. Tylko tyle i jednocześnie aż tyle.
Ale może troszkę recyzyjniej. Proxmox jest systemem operacyjnym, który bazuje na Debianie (dystrybucji Linuxa). Pozwala on na tworzenie (w prosty sposób, za pomocą interfejsu przeglądarkowego) maszyn wirtualnych i kontenerów - a co za tym idzie, uruchamianie w nich interesujących nas programów/systemów.
Kontener? Maszyna wirtualna? Co to?
Maszyna virtualna (virtual machine, VM, ja ten skrót odmieniam jako VMka itp.) to trochę taki “komputer w komputerze”. W praktyce działa to tak, że system uruchamiany w maszynie wirtualnej zachowuje się tak samo, jakby był uruchamiany bezpośrednio na prawdziwym komputerze. Czyli w ten sposób możemy sobie na naszego Proxmoxa wrzucić np. TrueNASa albo Windowsa Server.
Jeśli ktoś miał okazję używać oprogramowania typu VirtualBox czy VMWare Workstation - działa to dokładnie tak samo, tylko że ze względu na zastosowany hypervisor jest trochę szybciej i wydajniej 😄
Kontener to rozwiązanie lżejsze, wymagające mniejszej ilości zasobów, ale nadal zapewniające izolację od hosta i innych maszyn/kontenerów. Różni się tym, że współdzieli kernel z hostem - czyli jako systemy w kontenerze odpalimy tylko te działające na Linuxie.
W praktyce, jeśli to możliwe powinniśmy używać kontenerów (np. kontener z serwerem nginx, kontener z bazą danych, kontener z grafaną). Jeśli z jakiegoś powodu nie jest to możliwe (np. jeśli chcemy użyć gotowego obrazu systemu operacyjnego, jak TrueNAS) używamy maszyn wirtualnych
A komu to potrzebne? Ja mam wszystko zainstalowane luzem na Debianie i działa.
Można i tak, ale po co się męczyć. Proxmox pozwala na oddzielenie różnych usług od siebie. Dlaczego chcielibyśmy to robić? Z wielu względów, przede wszystkim ze względu na:
- bezpieczeństwo - działająca w kontenerze/VMce usługa nie ma dostępu do hosta ani do innych kontenerów/VMek;
- wygodę - możemy stworzyć kontener/VMkę, przetestować coś, a potem ją usunąć;
- łatwe tworzenie i przywracanie backupów - jeśli zepsujemy (albo ktoś lub coś nam zepsuje) konkretną usługę, wystarczy że przywrócimy backup tej konkretnej usługi i problem mamy rozwiązany;
- możliwość tworzenia snapshotów - snapshot to taki “punkt przywracania”. Nie jest backupem, bo jest na tym samym dysku, co kontener/VMka. Pozwala natomiast szybko (prawie natychmiastowo) przywrócić dany kontener/VMkę do stanu sprzed jakiejś zmiany (tj. do czasu stworzenia snapshota).
Wnioski
Na potrzeby tego tekstu założę, że chcemy używać Proxmoxa. Jeśli chcecie instalować inny system bezpośrednio na hoście, sprawdźcie jego dokumentację.
Partycjonowanie, system plików, RAID
Skoro mamy w naszym komputerze jakieś dyski, to trzeba jakoś je wykorzystać.
Zakładam, że chcemy zabezpieczyć się przed awarią dysku. Zatem, chcemy ustawić jakiś RAID. Zdecydowanie odradzam stosowanie jakiegokolwiek sprzętowego RAIDu w środowisku typowo domowym. Dlaczego? Bo jeśli padnie nam kontroler, to będziemy w czterech literach 😉
Pozostaje nam zatem RAID software’owy. Linux (a więc i Proxmox) wspiera co najmniej kilka takich rozwiązań:
- btrfs,
- ZFS,
- mdraid.
Pierwsze dwa to systemy plików z wbudowaną opcją łączenia dysków w macierze, ostatnie to narzędzie które służy tylko do tworzenia macierzy. Btrfs jest rozwiązaniem stosunkowo nowym, jednak jest już dość stabilne (na tyle, że np. Fedora używa go domyślnie jako system plików partycji systemowej). ZFS jest opcją która istnieje zdecydowanie dłużej, a zatem jest sprawdzona i bardzo stabilna. MD/RAID jest technologią najstarszą w tym zestawieniu - i nie wiem czy jest sens się nim interesować.
Opcją używaną przez systemy typu TrueNAS jest właśnie ZFS, co chyba potwierdza zasadność tego wyboru. Proxmox także dość fajnie wspiera go w swoim graficznym interfejsie 😄
Jednym z minusów ZFSa jest jego zapotrzebowanie na pamięć RAM - jako rule of thumb przyjmuje się, że potrzebne jest około 1 GB pamięci na każdy 1 TB przestrzeni dyskowej. Sporym minusem dla części osób będzie też brak możliwości powiększania macierzy RAID5/RAID6 (tutaj nazywanych RAID-Z1 i RAID-Z2) EDIT: 14 stycznia 2025 r. opublikowano wersję ZFS 2.3.0, która dodaje możliwość powiększania macierzy RAIDZ
RAID w ZFS
ZFS wspiera różne poziomy RAID. Najbardziej podstawowym jest mirror (RAID1). Na wszystkich dyskach, które połączymy w mirror, będą znajdować się dokładnie te same dane. Pozwoli on zatem na awarię liczba dysków - 1 dysków i udostępni użytkownikowi tyle miejsca, co najmniejszy dysk w macierzy.
Bardziej skomplikowane są raid-z1 (RAID5), raid-z2 (RAID6) i raid-z3. Pozwalają na awarię odpowiednio jednego, dwóch i trzech dysków. Dostępna ilość miejsca to pojemność najmniejszego dysku * (liczba dysków - liczba dysków, które mogą ulec awarii)
Moja konfiguracja
Podobnie jak wyżej w akapicie omawiającym wybór komputera - nie mówię że moja konfiguracja jest konfiguracją “poprawną”, czy też że tak powinniście ustawiać swoje systemy. Prezentuję tylko jak to wygląda u mnie
Na głównym serwerze (tym z N5100) mam dwa dyski SSD o pojemności 1 TB, które pracują pod systemem plików ZFS jako mirror (RAID-1).
Na serwerze backupowym (który jest zwykłym komputerem klasy desktop) mam podłączony dysk systemowy SSD 120 GB oraz trzy dyski HDD 1 TB, na których znajdują się dane. Systemowy dysk SSD ma zwykłą partycję ext4, a dyski HDD pracują również pod ZFSem, ale jako raid-z1 (RAID-5).
Programy
No w końcu. Skoro mamy komputer, do niego podłączone dyski, na nich utworzony system plików, a na nim z kolei zainstalowany system operacyjny, to wreszcie możemy przejść do instalacji programów.
Ciekawe oprogramowanie, którego używam i polecam to m.in:
- Nextcloud;
- Jellyfin;
- PhotoPrism;
- KitchenOwl (lista zakupów, alternatywa dla np. Listonic);
- Paperless-ngx (przechowywanie dokumentów w formie cyfrowej);
- Fittrackee (śledzenie “outdoor activity”, alternatywa dla np. Google Fit);
- Matrix.org;
- Vaultwarden (menedżer haseł, serwer kompatybilny z Bitwardenem);
- Home Assistant, a do niego też:
- Mosquitto (broker MQTT),
- InfluxDB (baza danych),
- Grafana (narzędzie do wizualizacji danych),
- Node-RED (narzędzie low-code).
Część z powyższych pokrótce omówię 😄 oprócz Home Assistanta mam też Domoticza, który działa równolegle do niego - ale dla nowych instalacji polecam raczej HA.
NEXTCLOUD
Nextcloud jest narzędziem, którym możemy zastąpić sobie Dysk Google, Zdjęcia Google, Kalendarz Google, a w dużej części też Dokumenty Google 😄
Po zainstalowaniu prezentuje interfejs typowy dla Dysku Google, Dropboxa, Onedrive’a i podobnych serwisów. Z przydatnych opcji mamy:
- synchronizację plików z komputerami (za pomocą oficjalnego klienta)
- automatyczne przesyłanie na serwer z telefonu - za pomocą oficjalnej aplikacji:
- wykonanych telefonem zdjęć
- kopii zapasowych kontaktów w formie plików .vcf
- automatyczną synchronizację między serwerem a telefonem - za pomocą aplikacji DAVx5 (link F-Droid):
- kalendarza
- listy zadań
- kontaktów
Oczywiście zsynchronizowany kalendarz, listę zadań czy kontakty możemy sobie wyświetlić przez przeglądarkę. Reszta funkcji działa to bardzo podobnie do Dysku Google czy Onedrive’a - możemy wrzucać pliki, udostępniać je innym, edytować itd.
JELLYFIN
Jellyfin to serwer mediów - służy do serwowania klientom (telefonom, komputerom, odtwarzaczom sieciowym) materiałów typu filmy, seriale, czy muzyka. Potrafi w locie te media transkodować, jeśli jest to wymagane - przy czym potrzebne są do tego odpowiednie zasoby. Transkodowanie wideo jest chyba jedyną rzeczą w domowym serwerze która znacznie obciąża CPU lub GPU 😉
PHOTOPRISM
Jeśli używasz narzędzia typu Zdjęcia Google, może spodobać Ci się PhotoPrism. Jest to narzędzie, które umożliwi przeglądanie twoich zdjęć w wygodny sposób, wyszukiwanie na podstawie ich zawartości, czy też grupowanie po twarzach osób obecnych na tych fotografiach. Całość dzieje się w pełni lokalnie, na twoim komputerze, zatem nie ma obaw o prywatność
MATRIX.ORG
Tutaj zamiast konkretnego oprogramowania nazwałem cały protokół - ale chodzi mi przede wszystkim o referencyjny serwer Synapse.
Matrix to protokół który umożliwia nam hostowanie swojego własnego komunikatora. Ponadto, ten hostowany samemu komunikator działa dokładnie tak samo jak e-mail. Oznacza to, że użytkownik @alice:example.com może komunikować się nie tylko z @bob:example.com, ale też z @charlie:example.org lub @dave:example.net
HOME ASSISTANT
Nie będę pisał o HA szczególnie dużo. Na temat automatyki domowej mógłbym napisać artykuł trzy razy dłuższy od tego, więc muszę się pilnować 😉 w skrócie: HA jest “centrum sterowania wszechświatem”. Można tam podpiąć (prawie) wszystkie swoje urządzenia smart i stamtąd nimi sterować.
Sugestie, literówki, błędy, czy jakiekolwiek inne pytania - maciej@sp2fe.eu
73 de SP2FE
Miłego dnia!
Maciej
Tekst opublikowano na licencji CC BY-SA 4.0 (czyli dokładnie takiej samej, co artykuły na Wikipedii). Zachęcam do wykorzystywania go, jednak proszę o podanie linku do niniejszego artykułu 😉