Blog (22)
Komentarze (997)
Recenzje (0)
@parranoyaBudujemy nowy dom (dla plików), czyli własny serwer NAS z RAID 1

Budujemy nowy dom (dla plików), czyli własny serwer NAS z RAID 1

05.04.2015 19:30, aktualizacja: 07.04.2015 17:43

Do stworzenia tego “how to” natchnął mnie wpis Cyryllo, który opisał proces tworzenia domowego NAS’a. Wpis poruszył zagadnienia typowo sprzętowe a ja postaram się opisać taki proces od strony programowej - mam nadzieję w sposób kompletny. Można co prawda skorzystać z gotowca i zainstalować polecany przez niego OMV ale jak to mawiają: "Chcesz mieć coś dobrze zrobione, zrób to sam" :‑)

W moim wpisie całkowicie pomijam proces instalacji systemu, skupiam się wyłącznie na konfiguracji odpowiednich programów. Podstawą NAS’a może być właściwie dowolny system Linux lub któryś system z rodziny BSD ale ponieważ od jakiegoś czasu preferuję Debiana, na nim będę bazował podczas tworzenia tego tekstu.

Serwerem plików będzie demon Samba. Same pliki przechowywane będą na dwóch dyskach połączonych w programową macierz RAID 1. Pomimo, że większość płyt głównych posiada sprzętową obsługę macierzy, zdecydowałem się na wersję programową ze względu na to, że w razie awarii płyty głównej, dyski z plikami można zainstalować w dowolnym innym komputerze z Linuksem. Nie ma natomiast żadnej gwarancji, że nowy kontroler poradziłby sobie z macierzą utworzoną za pomocą starego kontrolera. Z testów, które można znaleźć w internecie (mi nie chciało się tego robić), wynika, że wydajność macierzy programowych niewiele odbiega od sprzętowych. Dotyczy to oczywiście tanich kontrolerów wlutowanych w płyty główne. Profesjonalne kontrolery są oczywiście bardziej wydajne i jeśli się taki posiada warto użyć raczej jego. Dodatkową uwagą na początek jest ostrzeżenie co do traktowania macierzy RAID 1 jako backup plików. Wielu administratorom wydaje się, że jeśli trzymają pliki na dwóch dyskach spiętych w macierz to nic tym plikom nie grozi. Owszem, pliki będą bezpieczne w przypadku awarii jednego z dysków, ale nic ich nie ochroni w przypadku nieumyślnego skasowania lub chęci powrotu do starszej wersji któregoś z nich. Wszelkie zmiany automatycznie odbywają się na wszystkich dyskach w macierzy. Tradycyjna forma backupu w innej lokalizacji jest wobec tego nieodzowna bo jak wiadomo: “Administratorzy serwerów dzielą się na dwie kategorie. Tych co robią kopie zapasowe i tych co będą je robić…” ;‑) Po co więc redundancja dysków? Myślę, że warto traktować ją jako dodatkową warstwę zabezpieczającą. Dyski lubią się psuć a przerwa w dostępie do ważnych plików w trakcie pracy (zarobkowej zwłaszcza) może kosztować znacznie więcej niż nadmiarowy dysk w komputerze. No to do dzieła!

Najpierw musimy dodać dyski do puli. Są dwie możliwości: dodajemy całe dyski lub partycje. Jeśli dodamy całe dyski, możemy wykorzystać 100% dostępnego miejsca największego z dysków. Jednak jeśli zapełnimy cały dysk, system może mieć problem z defragmentacją. Pomimo tego, że linuksowe systemy plików bardzo dobrze radzą sobie z fragmentacją, warto nieco systemowi ułatwić pracę w tym zakresie. Dlatego zamiast dodać do macierzy całe dyski, lepiej jest utworzyć partycje mniejsze o kilka, kilkanaście GB niż wynosi pojemność dysku. Wolne miejsce będzie wykorzystywane do sprawniejszej defragmentacji. W niemal każdej linuksowej dystrybucji jest co najmniej kilka programów do tworzenia partycji. Ja preferuję cfdisk ze względu na najprostszą chyba obsługę z pośród znanych mi programów partycjonujących działających z linii poleceń. Nie jest łatwo rozeznać się w konsoli, który dysk jest który i trzeba trochę się nagimnastykować. Polecenie

[code=]fdisk -l [/code]

wyświetli nam listę wszystkich partycji i dysków:

fdisk -l
fdisk -l

W tym przypadku widać, że w systemie istnieje 8 partycji: od sda1 do sda8. Polecenie blkid wyświetli nam listę wszystkich dostępnych partycji.

blkid
blkid

Jak widać partycje 1, 5, 6, 7 i 8 są już zajęte a 2 to partycja rozszerzona. cfdisk pokaże, że nieużywane są dwie partycje: sda3 i sda4.

cfdisk
cfdisk

Tak wygląda sytuacja jeśli dokładamy dyski do już istniejącego systemu. Skoro wiemy już który dysk będzie w puli RAID możemy działać. Instalujemy program mdadm obsługujący macierze:

[code=]aptitude install mdadm[/code]

Tworzymy nową macierz RAID 1:

[code=]mdadm -‑create -‑verbose /dev/mdX -‑level=1 -‑raid-devices=2 /dev/sdaX /dev/sdbX[/code]

Uwaga! Powyższe polecenie sprawi, że wszystkie dane zapisane na wymienionych partycjach ulegną destrukcji!

W miejsce X należy wstawić odpowiednie wartości, przy czym wartość dla mdX jest dowolna. raid-devices to ilość dysków dodawanych do macierzy. Można oczywiście dodać więcej niż dwa. Wówczas kolejne dodane dyski będą traktowane jako zapasowe. W tym konkretnym przypadku powyższe polecenie wygląda tak:

[code=]mdadm -‑create -‑verbose /dev/md0 -‑level=1 -‑raid-devices=2 /dev/sda3 /dev/sda4[/code]

Komenda

[code=]cat /proc/mdstat[/code]

pokaże status utworzonej macierzy:

mdstat
mdstat

Wszystko OK? To zapisujemy konfigurację macierzy:

[code=]mdadm -‑detail -‑scan >> /etc/mdadm/mdadm.conf[/code]

Teraz po każdym restarcie komputera mdadm automatycznie poskłada dyski w macierz. Polecenie fdisk -l pokaże, że w systemie pojawił się nowy dysk o nazwie takiej samej jak nasza macierz czyli md0. Możemy potraktować go jak zwykły dysk. Zacznijmy od utworzenia systemu plików. Jako, że jeszcze nigdy mnie nie zawiódł ext, zwykle jemu powierzam pieczę nad plikami.

[code=]mkfs.ext4 /dev/md0[/code]

Teraz trzeba już tylko przygotować miejsce pod nasze cenne pliki. Tworzymy folder w którym zamontujemy macierz:

[code=]mkdir /media/samba[/code]

Ze względu na to, że oznaczenia dysków sdaX, sdbX itp. mogą zmienić się po dodaniu kolejnego dysku do systemu, lepiej jest korzystać ze znaczników UUID. Znaczniki te są unikalne i nie zmieniają się nigdy ale za to są bardzo długie i nie ma co bawić się w ich przepisywanie. Jednym poleceniem dodamy odpowiedni znacznik UUID do pliku /etc/fstab:

[code=]blkid | grep md >> /etc/fstab[/code]

W żadnym przypadku nie wolno się pomylić i zamiast >> wpisać >. Po takiej operacji cała zawartość pliku fstab zostanie zastąpiona. >> tylko dopisuje do pliku. Edytujemy plik fstab:

[code=]nano /etc/fstab[/code]

i poprawiamy wpis dotyczący md0 do takiej postaci:

[code=]UUID=d95593bf-c879-4719-9733-2eded63fc06f /media/samba ext4 defaults[/code]

Dzięki temu zabiegowi podczas każdego startu system automatycznie zamontuje naszą macierz. Skoro macierz skonfigurowana, instalujemy serwer plików:

[code=]aptitude install samba[/code]

Razem z serwerem samba instaluje się niepotrzebny nam do niczego demon rpcbind. Polecenia

[code=]update-rc.d rpcbind disable[/code]

i

[code=]update-rc.d nfs-common disable[/code]

załatwiają sprawę (skoro korzystamy z Samby to i nfs raczej nam się nie przyda).

Teraz przystępujemy do konfiguracji Samby. W pliku /etc/samba/smb.conf dopisujemy:

[code=][shared] path = /media/samba available = yes valid users = nazwa_użytkownika read only = no browseable = yes public = no writable = yes guest ok = no] create mode = 0660 directory mode = 0770[/code]

Powyższe instrukcje należy oczywiście dopasować do swoich potrzeb. shared określa nazwę udziału jaki pojawi się w sieci lokalnej. valid users określa którzy użytkownicy będą mogli korzystać z udostępnionych zasobów. Potrzebne do tego będzie hasło.

[code=]smbpasswd -a nazwa_użytkownika[/code]

Powyższym poleceniem dodaje się użytkowników wymienionych w sekcji valid users. Polecenie poprosi o podanie hasła które będzie w parze z loginem. Należy jeszcze zmienić uprawnienia do plików na serwerze:

[code=]chown -R nazwa_właściela /media/samba[/code]

Restartujemy serwer plików:

[code=]/etc/init.d/samba restart[/code]

i w sieci lokalnej pojawia się nowy folder:

workgroup
workgroup

Oprócz udziału, który stworzyliśmy, pojawił się folder nazywający się tak samo jak folder domowy w Linuksie. Jeśli przeszkadza nam ten widok, w pliku /etc/samba/smb.conf usuwamy lub zaznaczamy jako komentarz sekcję nazwaną jako [homes]. Podajemy login i hasło podane w poleceniu smbpasswd i już mamy własny działający serwer plików lub co może lepiej brzmi: NAS :‑)

Ufff!! Na dziś wystarczy. W kolejnej części opiszę jak stworzyć macierz RAID z wykorzystaniem dysku z danymi. Powiadomienie mailowe o ewentualnej awarii macierzy to też fajny bajer więc zajmiemy się i tym.

P.S. Już po opublikowaniu wpisu natrafiłem na ciekawe narzędzie do identyfikacji dysków w systemie. W związku z tym spora część tekstu nieco traci na znaczeniu ale jako, że mimo to w dalszym ciągu jest aktualna, zdecydowałem się ją zostawić. Tym ciekawym narzędziem jest lsblk a jego wynik wygląda następująco:

lsblk
lsblk
Wybrane dla Ciebie
Komentarze (32)