Dyski przez sieć
Po tej lekcji: kursant udostępnia folder przez NFS (/etc/exports, exportfs) i montuje go na kliencie, wystawia udział Samby dla Windowsa i Maca, montuje go przez CIFS, ustawia automatyczne montowanie przez autofs i wie, czym różni się iSCSI i jak podłączyć dysk przez iscsiadm.
Wstęp
pięć serwerów, każdy ma własną kopię folderu wspolne, w każdej inna wersja pliku cennik.xlsx
Firma ma pięć serwerów aplikacji. Każdy potrzebuje tych samych plików: zdjęć produktów, dokumentów, raportów. Kopiujesz je na każdy osobno? To po tygodniu masz pięć różnych wersji prawdy i każdy klient widzi inny cennik.
A księgowość na Windowsie i grafik na Macu chcą mieć ten sam folder jako zwykły dysk w swoim systemie.
Dziś wynosimy dysk za drzwi serwera. Jeden serwer trzyma pliki, reszta świata podpina je przez sieć, jakby były lokalne. Linux z Linuksem przez NFS, z Windowsem i Makiem przez Sambę. A do tego drzwi, które otwierają się same, kiedy podchodzisz, i dysk na bardzo długim przedłużaczu.
NFS, czyli skrzydło w innym budynku
Pamiętasz montowanie z lekcji 59? Podłączenie skrzydła budynku do głównego korytarza. NFS robi to samo, tylko skrzydło stoi w zupełnie innym budynku po drugiej stronie ulicy, a między budynkami jest przejście, czyli sieć. Idziesz korytarzem /mnt/wspolne, otwierasz drzwi i nawet nie wiesz, że właśnie przeszedłeś przez kładkę nad jezdnią.
NFS, Network File System, sieciowy system plików. Linuksowy standard udostępniania folderów między serwerami. Działa na porcie 2049.
Pakiety: [Ubuntu] serwer to nfs-kernel-server, klient nfs-common. [RHEL] i serwer, i klient to nfs-utils.
NFS: serwer
Na serwerze robimy folder i wpisujemy go do listy udostępnień, pliku /etc/exports:
sudo mkdir -p /srv/nfs/wspolne
echo '/srv/nfs/wspolne 192.168.1.0/24(rw,sync,no_subtree_check)' | sudo tee -a /etc/exports
sudo exportfs -ra
sudo exportfs -v/srv/nfs/wspolne
192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash)Linijka w exports to trzy rzeczy: co udostępniam, komu, na jakich zasadach. Tu: folder /srv/nfs/wspolne, całej sieci 192.168.1.0/24, z zapisem (rw). sync znaczy, że serwer potwierdza zapis dopiero, kiedy dane naprawdę są na dysku. Wolniej, ale bezpieczniej.
exportfs -ra wczytuje plik od nowa, a -v pokazuje, co naprawdę jest udostępnione. I patrz: w wyniku jest więcej opcji, niż wpisałem. Jedna z nich jest bardzo ważna: root_squash. To znaczy, że root z klienta na tym udziale nie jest rootem, tylko nikim. Inaczej każdy, kto ma roota na dowolnym laptopie w sieci, byłby rootem na Twoich plikach. Jak gość z przepustką dyrektora innej firmy: w swoim biurowcu dyrektor, u nas gość.
Usługa i zapora:
sudo systemctl enable --now nfs-server[RHEL] sudo firewall-cmd --permanent --add-service=nfs i sudo firewall-cmd --reload. [Ubuntu] sudo ufw allow from 192.168.1.0/24 to any port nfs.
NFS: klient
showmount -e 192.168.1.10
sudo mkdir -p /mnt/wspolne
sudo mount -t nfs 192.168.1.10:/srv/nfs/wspolne /mnt/wspolne
df -h /mnt/wspolneshowmount -e pyta serwer o listę udostępnień. Uwaga: pyta starszym językiem, więc serwer ustawiony tylko na NFS w wersji 4 może nic nie odpowiedzieć, choć montowanie działa. Składnia montowania: serwer:ścieżka. Dwukropek oddziela adres od folderu.
Na stałe, w /etc/fstab:
192.168.1.10:/srv/nfs/wspolne /mnt/wspolne nfs defaults,_netdev,nofail 0 0_netdev mówi systemowi: to jest dysk sieciowy, nie próbuj go montować, zanim nie wstanie sieć. nofail znasz z lekcji o montowaniu: serwer plików leży, a my i tak startujemy.
Samba, czyli tłumacz dla Windowsa i Maca
Windows nie mówi po NFS-owemu. Mówi protokołem SMB, który w starszych tekstach nazywa się też CIFS. Mac też go rozumie. Samba to serwer, który uczy Linuksa tego języka. Jak tłumacz w urzędzie, który obsługuje petentów z zagranicy, choć sam urząd pracuje po polsku.
Pakiet samba w obu rodzinach. Konfiguracja w /etc/samba/smb.conf. Dopisujemy udział:
[dzial]
path = /srv/samba/dzial
valid users = ania
read only = no
browseable = yesNazwa w nawiasach to nazwa udziału, którą widzą ludzie. valid users to lista osób wpuszczanych do środka. Sprawdzamy składnię, zanim cokolwiek zrestartujemy:
testparmLoad smb config files from /etc/samba/smb.conf
Loaded services file OK.Loaded services file OK to zielone światło. Potem hasło. Samba ma własną listę haseł, osobną od systemowej, a konto w systemie musi już istnieć:
sudo smbpasswd -a ania
sudo systemctl restart smbd[Ubuntu] usługa to smbd, zapora sudo ufw allow samba. [RHEL] usługa to smb, zapora firewall-cmd --permanent --add-service=samba. A na RHEL dochodzi SELinux: folder spoza domyślnych ścieżek trzeba oznaczyć dla Samby, inaczej klient dostanie odmowę mimo dobrych uprawnień. Szczegóły w lekcji o SELinux.
Test z samego serwera, bez Windowsa, narzędziem smbclient:
smbclient -L localhost -U ania
smbclient //localhost/dzial -U ania -c 'put raport.txt; ls' Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
dzial Disk
IPC$ IPC IPC Service (vm server (Samba, Ubuntu))
putting file raport.txt as \raport.txt (1.7 kb/s) (average 1.7 kb/s)
. D 0 Tue Nov 3 22:19:33 2026
.. D 0 Tue Nov 3 22:19:33 2026
raport.txt A 7 Tue Nov 3 22:19:33 2026Na Windowsie w Eksploratorze wpisujesz \\192.168.1.10\dzial. [macOS] W Finderze Cmd+K i adres smb://192.168.1.10/dzial.
CIFS: Linux jako klient Samby
A jeśli to Linux ma się podłączyć do udziału na Windowsie albo na Sambie? Pakiet cifs-utils w obu rodzinach i typ cifs:
sudo mount -t cifs //192.168.1.10/dzial /mnt/dzial -o username=aniaNa stałe nie wpisuj hasła do fstab, bo ten plik czyta każdy. Hasło idzie do osobnego pliku z prawami tylko dla roota:
printf 'username=ania\npassword=TuHaslo\n' | sudo tee /root/.smb-dzial
sudo chmod 600 /root/.smb-dzial//192.168.1.10/dzial /mnt/dzial cifs credentials=/root/.smb-dzial,_netdev,nofail 0 0autofs, czyli drzwi, które otwierają się same
Dysk sieciowy zamontowany na stałe ma wadę: jak serwer plików znika, klient potrafi zawisnąć na każdym ls i df. A jeśli masz sto udziałów, z których naraz używasz dwóch, montowanie wszystkich przy starcie to jak zapalanie światła w całym biurowcu, bo ktoś idzie do toalety.
autofs to automatyczne drzwi w Biedronce. Podchodzisz, otwierają się. Odchodzisz, po chwili się zamykają. Folder montuje się w chwili, kiedy ktoś do niego wchodzi, a po określonym czasie bezczynności sam się odmontowuje. Pakiet autofs w obu rodzinach.
Dwa pliki. Główny, /etc/auto.master, mówi: którym folderem zarządza autofs i gdzie jest jego mapa.
/mnt/nfs /etc/auto.nfs --timeout=60A mapa, /etc/auto.nfs, mówi, co pod jaką nazwą montować:
wspolne -rw 192.168.1.10:/srv/nfs/wspolnesudo systemctl enable --now autofs
ls /mnt/nfs
ls /mnt/nfs/wspolneI tu jest magia, która na początku wygląda jak błąd. ls /mnt/nfs pokazuje pusty folder. Nie ma tam żadnego wspolne. Ale wpisujesz ls /mnt/nfs/wspolne i jest. To drzwi, których nie widać, dopóki pod nie nie podejdziesz. Sprawdziłem to na swojej maszynie z mapą wskazującą lokalny folder:
TARGET SOURCE FSTYPE
/mnt/auto /etc/auto.c60 autofs
`-/mnt/auto/wspolne /dev/vda[/srv/nfs/wspolne] ext4Na górze strażnik autofs, pod nim zamontowany udział, dokładnie w chwili, kiedy w niego wszedłem.
Najczęstszy przypadek z egzaminów i z życia: foldery domowe użytkowników na serwerze NFS. Jedna linijka obsługuje wszystkich:
* -rw 192.168.1.10:/home/&Gwiazdka znaczy „dowolna nazwa”, a & wstawia tę nazwę w ścieżkę. Wchodzisz do ania, montuje się /home/ania. Wchodzisz do bartek, montuje się /home/bartek. Na mojej maszynie dokładnie tak się stało: dwa wejścia, dwa osobne montowania.
A --timeout=60 to czas w sekundach, po którym nieużywany udział się odmontowuje. Bez tej opcji obowiązuje wartość z /etc/autofs.conf, na Ubuntu 300 sekund.
iSCSI, czyli dysk na przedłużaczu
NFS i Samba udostępniają pliki. Serwer ma system plików, a Ty prosisz go o konkretny plik. Jak wypożyczalnia: mówisz, którą książkę chcesz, a bibliotekarka ją przynosi.
iSCSI udostępnia cały dysk, surowe bloki. Serwer daje Ci pusty regał, a co na nim postawisz, to Twoja sprawa. Na kliencie widzisz nowy dysk /dev/sdb, robisz na nim partycje, LVM, system plików, jakby był włożony do środka. Tylko kabel do niego jest bardzo długi, bo to sieć. Tak serwery wirtualizacji podpinają macierze dyskowe.
Dwa słowa: target to serwer, który wystawia dysk. Initiator to klient, który go podpina. Każdy ma nazwę w formacie IQN, na przykład iqn.2004-10.com.ubuntu:01:97c8111ad562. Nazwę swojego klienta znajdziesz w /etc/iscsi/initiatorname.iscsi. Port to 3260.
Klient: [Ubuntu] pakiet open-iscsi, [RHEL] iscsi-initiator-utils. Narzędzie to w obu iscsiadm, w trzech krokach:
sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.20
sudo iscsiadm -m node -T iqn.2026-11.pl.firma:dysk1 -p 192.168.1.20 -l
sudo iscsiadm -m session
lsblkNajpierw pytasz serwer, jakie ma dyski (discovery). Potem logujesz się do wybranego (-l, login). Potem sprawdzasz sesję i w lsblk pojawia się nowy dysk. Wylogowanie to -u. W fstabie taki dysk montujesz z _netdev, jak każdy sieciowy.
Jak to działa pod spodem
Przy NFS program na kliencie robi zwykłe open i read. Jądro widzi, że ścieżka leży na systemie plików nfs, i zamiast pytać dysk, pakuje prośbę w wiadomość sieciową do serwera: „daj mi bajty od 0 do 4096 z pliku X”. Serwer NFS też działa w jądrze, czyta plik ze swojego dysku i odsyła. Klient trzyma kopię w pamięci podręcznej, żeby nie pytać o to samo co chwilę.
Samba działa inaczej: serwer to zwykły program smbd w przestrzeni użytkownika, który dla każdego połączenia uruchamia osobny proces z uprawnieniami zalogowanej osoby. Dlatego uprawnienia linuksowe na folderze dalej obowiązują.
autofs ma dwie części. W jądrze siedzi specjalny system plików autofs, który pilnuje folderu. Kiedy ktoś do niego wchodzi, jądro zatrzymuje ten proces i budzi demona automount, a ten robi zwykłe mount. Proces czeka ułamek sekundy i nawet nie wie, że drzwi przed nim właśnie się otworzyły.
A iSCSI pakuje polecenia SCSI, te same, które normalnie idą kablem do dysku, w pakiety TCP. Jądro klienta tworzy z tego zwykłe urządzenie blokowe, więc wyżej nikt nie wie, że dysk jest w innej szafie.
Ściąga flag
| Komenda | Flaga | Co robi |
|---|---|---|
exportfs | -ra | wczytuje /etc/exports od nowa |
exportfs | -v | pokazuje udostępnienia z pełnymi opcjami |
showmount | -e SERWER | lista udostępnień NFS na serwerze |
mount | -t nfs / -t cifs | montowanie NFS / SMB |
mount | -o credentials=PLIK | hasło do CIFS z osobnego pliku |
fstab | _netdev | dysk sieciowy, czekaj na sieć |
testparm | sprawdza smb.conf | |
smbpasswd | -a UŻYTKOWNIK | dodaje hasło Samby |
smbclient | -L SERWER | lista udziałów |
smbclient | //SERWER/UDZIAŁ -U UŻYTKOWNIK | wejście do udziału jak przez FTP |
auto.master | --timeout=N | po ilu sekundach odmontować |
iscsiadm | -m discovery -t sendtargets -p IP | pyta serwer o dyski |
iscsiadm | -m node -T IQN -p IP -l / -u | logowanie / wylogowanie |
iscsiadm | -m session | aktywne sesje |
⚠ Typowy błąd
Jedna spacja w /etc/exports:
/srv/nfs/wspolne 192.168.1.0/24 (rw,sync,no_subtree_check)Widzisz ją? Między adresem sieci a nawiasem. Wygląda niewinnie. A tak na to odpowiada exportfs -v:
exportfs: No host name given with /srv/nfs/wspolne (rw,sync,no_subtree_check), suggest *(rw,sync,no_subtree_check) to avoid warning
/srv/nfs/wspolne
192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,root_squash,no_all_squash)
/srv/nfs/wspolne
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash)Przeczytaj to powoli. Twoja sieć dostała dostęp tylko do odczytu, bo przy niej nie ma już żadnych opcji. A nawias, który stał osobno, został potraktowany jak wpis dla wszystkich: <world>, cały świat, z zapisem. Dokładnie odwrotnie, niż chciałeś. Jak ochroniarz, który zrozumiał „wpuszczaj tylko pracowników” jako „pracowników tylko patrzeć, a wszystkich innych wpuszczać”.
Naprawa: usunąć spację, exportfs -ra i zawsze, ale to zawsze, czytać exportfs -v po każdej zmianie. Ostrzeżenia w pierwszej linijce nie wolno przewinąć.
✎ Zadanie
To ostatnie zadanie modułu o dyskach, więc składa w całość to, co było w kilku lekcjach:
Na maszynie wirtualnej dodaj nowy dysk 1 GB. Zrób na nim LVM (PV, VG, LV na 500 MB), system plików ext4, zamontuj na stałe w /dane przez UUID w /etc/fstab, sprawdź mount -a, zrestartuj i sprawdź, że wstało. Potem powiększ LV o 200 MB razem z systemem plików.
Pokaż rozwiązanie
Zadanie było grube: nowy dysk, LVM, system plików, montowanie na stałe, restart i powiększanie. Lecimy po kolei. Najpierw: jak się nazywa nowy dysk?
lsblkSzukasz dysku 1 GB bez partycji i bez punktu montowania. W VirtualBoxie to zwykle /dev/sdb, na KVM /dev/vdb. Sprawdź dwa razy. Pomyłka o jedną literkę i formatujesz dysk z systemem. To jak pomylić pokój 12 z pokojem 13 i wymalować cudzy gabinet na różowo.
sudo pvcreate /dev/sdb
sudo vgcreate vgdane /dev/sdb
sudo lvcreate -n lvdane -L 500M vgdane
sudo mkfs.ext4 /dev/vgdane/lvdane
sudo mkdir /dane
sudo blkid -s UUID -o value /dev/vgdane/lvdaneRegały na kółkach z lekcji o LVM: pvcreate oznacza dysk jako materiał na regały, vgcreate składa z niego magazyn, lvcreate wydziela w magazynie regał na 500 MB. Ostatnia komenda wypisuje sam UUID, czyli numer seryjny systemu plików. U mnie:
0ab65a5a-2691-4791-9928-5ccdd3ed07a4Ten numer wpisujesz do /etc/fstab, najlepiej przez sudo nano /etc/fstab, jedną linijką na końcu:
UUID=0ab65a5a-2691-4791-9928-5ccdd3ed07a4 /dane ext4 defaults 0 2I teraz najważniejsze: sprawdzamy przed restartem, nie po.
sudo systemctl daemon-reload
sudo findmnt --verify
sudo mount -a
findmnt /danefindmnt --verify czyta fstab i marudzi, jeśli coś się nie zgadza. mount -a montuje wszystko z fstaba, czego jeszcze nie ma. daemon-reload jest po to, żeby systemd przeczytał zmieniony fstab, bo on z niego robi sobie własne jednostki montowania. Jeśli findmnt /dane pokazuje Twój wolumin, dopiero wtedy sudo reboot, a po restarcie jeszcze raz findmnt /dane.
Na koniec powiększanie:
sudo lvextend -r -L +200M /dev/vgdane/lvdane
df -h /danePlus przed 200M znaczy „dołóż”, a nie „ustaw na”. Bez plusa prosiłbyś o wolumin 200 MB, czyli mniejszy niż masz, i LVM by się zbuntował. A -r to skrót od --resizefs: powiększa od razu system plików. Bez niego regał jest większy, ale półki w środku zostają te same i df dalej pokazuje stary rozmiar.
Jeśli po restarcie maszyna wstała w trybie awaryjnym, to też jest wynik zadania. Po prostu z modułu o naprawianiu systemu.
Co dalej
Dyski mamy opanowane, ale na pustych dyskach nic nie działa. Trzeba coś zainstalować. W następnej lekcji zaczynamy moduł o oprogramowaniu: menedżery pakietów, czyli hurtownia z kurierem, i to we wszystkich ważnych rodzinach Linuksa, od apt i dnf po pacman i apk.