Dla masowej pamięci masowej — biblioteki VOD, bufory catch-up, cele kopii zapasowych — ZFS RAID-Z2 to optymalne rozwiązanie: przetrwa dwie jednoczesne awarie dysków, ma doskonałą integralność danych dzięki sumom kontrolnym i skaluje się do petabajtów. Ten przewodnik konfiguruje pulę RAID-Z2 na Ubuntu dla serwera pamięci masowej.
Wymagania wstępne
- Ubuntu 22.04 z dostępem root
- Wiele identycznych dysków (minimum 4 dla RAID-Z2; 6-12 to typowa liczba)
- Co najmniej 8 GB RAM (ZFS lubi RAM — 1 GB na TB to ogólna wytyczna dla dedup, znacznie mniej bez niego)
Krok 1 — Instalacja ZFS
apt update
apt install -y zfsutils-linux
modprobe zfs
zfs versionKrok 2 — Identyfikacja dysków
Nigdy nie używaj nazw `/dev/sdX` dla ZFS — mogą się one zmienić po ponownym uruchomieniu. Użyj /dev/disk/by-id/, które są stabilne:
ls -l /dev/disk/by-id/ | grep -v partZobaczysz wpisy takie jak ata-WDC_WD180EDGZ_XXXXXXX lub nvme-Samsung_SSD_.... Zwróć uwagę na te przeznaczone dla dysków danych (nie dysku systemowego).
Krok 3 — Tworzenie puli RAID-Z2
RAID-Z2 wykorzystuje pojemność odpowiadającą 2 dyskom na parzystość, przetrzymując dowolne 2 awarie. Z 8 dyskami 18 TB uzyskujesz ~108 TB użytecznej przestrzeni (6 × 18 TB):
zpool create -f -o ashift=12 tank raidz2 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE1 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE2 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE3 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE4 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE5 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE6 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE7 \
/dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE8ashift=12 wymusza wyrównanie sektorów 4K — jest to poprawne dla wszystkich nowoczesnych dysków, a błędne ustawienie później oznacza konieczność przebudowy puli. Sprawdź pulę:
zpool status tank
zpool listKrok 4 — Dostrajanie dla obciążenia multimedialnego/pamięci masowej
Ustaw większy rozmiar rekordu (record size) dla dużych plików sekwencyjnych (wideo), włącz kompresję (prawie bezkosztową, pomaga nawet w przypadku metadanych wideo) i wyłącz atime (bezcelowe wzmocnienie zapisu):
zfs set recordsize=1M tank
zfs set compression=lz4 tank
zfs set atime=off tank
zfs set xattr=sa tankrecordsize=1M jest idealny do strumieniowania dużych plików. Jeśli ta pula będzie również przechowywać bazę danych lub wiele małych plików, utwórz dla niej osobny zbiór danych (dataset) z recordsize=16k.
Krok 5 — Tworzenie zbiorów danych (datasets)
Zbiory danych (datasets) są jak foldery z własnymi właściwościami. Organizuj według obciążenia:
zfs create tank/vod
zfs create tank/catchup
zfs create tank/backups
# Backups compress better with gzip
zfs set compression=gzip-6 tank/backupsMontują się automatycznie w /tank/vod, /tank/catchup itd.
Krok 6 — Dodawanie pamięci podręcznej NVMe (L2ARC) dla często odczytywanych danych
Jeśli Twoje obciążenie obejmuje często używane treści (popularne kanały w catch-up, popularne VOD), pamięć podręczna odczytu NVMe drastycznie zmniejsza obciążenie HDD. Dodaj zapasowy NVMe jako L2ARC:
zpool add tank cache /dev/disk/by-id/nvme-Samsung_SSD_980_CACHE
zpool status tankUstaw rozmiar L2ARC na ~5-10% rozmiaru puli. W przypadku obciążeń intensywnie zapisujących dane, oddzielne urządzenie SLOG (mirror dwóch małych, szybkich SSD) pomaga synchronizować zapisy, ale czyste serwowanie mediów rzadko tego wymaga.
Krok 7 — Konfiguracja automatycznych skanowań (scrubs)
Skanowania (scrubs) odczytują każdy blok i weryfikują sumy kontrolne, wykrywając ciche uszkodzenia danych, zanim się rozprzestrzenią. Zaplanuj miesięczne skanowanie:
# ZFS on Ubuntu ships a systemd timer — enable it
systemctl enable zfs-scrub-monthly@tank.timer
systemctl start zfs-scrub-monthly@tank.timer
# Run one now to establish a baseline
zpool scrub tank
zpool status tank # watch progressKrok 8 — Monitorowanie stanu dysków
Skonfiguruj alerty e-mailowe dotyczące degradacji puli. Edytuj /etc/zfs/zed.d/zed.rc:
ZED_EMAIL_ADDR="you@yourdomain.com"
ZED_NOTIFY_INTERVAL_SECS=3600
ZED_NOTIFY_VERBOSE=1
systemctl restart zfs-zedTeraz, jeśli dysk ulegnie awarii, ZED natychmiast wyśle Ci e-mail. Z RAID-Z2 masz bufor na 2 awarie, ale powinieneś wymienić pierwszy uszkodzony dysk, zanim drugi ulegnie awarii.
Krok 9 — Wymiana uszkodzonego dysku
Gdy dysk ulegnie awarii, zpool status pokaże go jako DEGRADED. Wymień go:
# Offline the dead drive
zpool offline tank ata-WDC_WD180EDGZ_DEADDRIVE
# Physically swap the disk, then replace in the pool
zpool replace tank ata-WDC_WD180EDGZ_DEADDRIVE /dev/disk/by-id/ata-WDC_WD180EDGZ_NEWDRIVE
# Watch resilver progress
zpool status tankProces resilver na dysku 18 TB trwa 24-48 godzin. Pula pozostaje dostępna online i możliwa do odczytu przez cały czas — RAID-Z2 oznacza, że możesz stracić nawet kolejny dysk podczas resilver i nadal przetrwać.
Tabela referencyjna planowania pojemności
| Konfiguracja | Surowa | Użyteczna (RAID-Z2) | Przetrwa |
|---|---|---|---|
| 6× 18 TB | 108 TB | 72 TB | 2 awarie |
| 8× 18 TB | 144 TB | 108 TB | 2 awarie |
| 12× 18 TB | 216 TB | 180 TB | 2 awarie |
Po przekroczeniu 12 dysków w pojedynczym vdev, podziel na wiele vdevów lub użyj RAID-Z3 — czasy odbudowy (resilver) na bardzo szerokich vdevach stają się własnym ryzykiem. Zobacz nasz pełny przewodnik po rozmiarach pamięci masowej.
Co dalej
Połącz to z gorącą warstwą NVMe dla aktywnych danych lub skonfiguruj z nami dedykowany serwer pamięci masowej. Aby uzyskać pełne obliczenia dotyczące pamięci masowej — wzrost catch-up, budżety odczytu, współczynniki trafień pamięci podręcznej — przeczytaj nasz post o rozmiarach pamięci masowej.