Konfiguracja openmediavault jako dysku nas i centrum składowania różnych danych w sieci

Opis openmediavault

openmediavault to kompletne rozwiązanie sieciowej pamięci masowej (NAS) oparte na systemie Debian Linux. Jest dostępny dla platform x86-64 i ARM. Zawiera pełny interfejs administracji sieciowej. Może być kontrolowany przez SSH, jeśli jest włączony. Dostęp do przechowywania plików jest możliwy za pomocą wielu różnych protokołów, takich jak FTP, SMB/CIFS lub NFS, i może być kontrolowany przez zarządzanie prawami dostępu dla użytkowników i grup. Openmediavault jest przeznaczony przede wszystkim do użytku w środowiskach domowych lub małych biurach domowych, ale nie ogranicza się do tych scenariuszy. Jest to proste i łatwe w użyciu gotowe rozwiązanie, które każdy może zainstalować i administrować bez konieczności posiadania specjalistycznej wiedzy na temat sieci i systemów pamięci masowej. System zbudowany jest na zasadzie modułowej i można go łatwo rozbudowywać za pomocą wtyczek dostępnych zaraz po zainstalowaniu systemu bazowego.

Przydatne adresy

Strona projektu: https://www.openmediavault.org/features.html
Minimalne wymagania do instalacji:  https://docs.openmediavault.org/en/stable/prerequisites.html
Ręczna instalacja openmediavault na systemie Debian 11: https://forum.openmediavault.org/index.php
Instalacja openmediavault na Raspberry PI: https://raspberrytips.com/openmediavault-on-raspberry-pi/
Instalacja Docker-a na openmediavault: https://wiki.omv-extras.org/doku.php?id=omv6:docker_in_omv
Instalacja openmediavault z obrazu iso: https://www.howtoforge.com/tutorial/install-open-media-vault

Zakres wykorzystania openmediavault w sieci

openmediavault wykorzystywany jest w mojej sieci do różnych celów:

1) jako dodatkowy storage dostępny przez protokół NFS dla maszyn z systemem Linux
a)  storage area dla Zone Minder – system monitoringu z kamer video
b) datastore dla Proxmox Backup Server 2 – przyrostowy backup maszyn wirtualnych Proxmox VE
c) datastore dla Proxmox VE – ISO image, VZDump backup file, Container template
d) datastore dla kontenerów Docker-a do przechowywania multimediów np. Airsonic
e) udział sieciowy dla backupu danych i konfiguracji w postaci plików archiwum *.tar
f) udział sieciowy z filmami i zdjęciami dla Plex-a
2) na potrzeby udostępniania folderów z danymi dla maszyn z Windows / macOS przez protokół SMB

Konfiguracja maszyny wirtualnej openmediavault w Proxmox

Minimalne wymagania openmediavault to 1 CPU / 1 GB RAM / 4 GB HDD.
W tym przypadku dla sprawnego działania maszyny wirtualnej omv przydzielono 2 vCPU oraz 1 GB RAM.
Wirtualny dysk ma rozmiar 8 GB aby można było swobodnie instalować aktualizacje oraz dodatkowe oprogramowanie i wtyczki. Do maszyny wirtualnej po skończonej instalacji i restarcie podłączony został dysk USB SEAGATE One Touch Hub 12TB HDD z 1 partycją Linux sformatowaną w systemie EXT4.


Instalacja openmediavault

Sam proces instalacji z obrazu ISO jest banalnie prosty i należy jedynie uważać podczas wpisywania hasła dla root-a oraz wyboru miejsca instalacji GRUB-a.


Wstępna konfiguracja openmediavault

Sprawdzamy w Proxmox VE w konsoli maszyny wirtualnej omv adres ip i logujemy się przez przeglądarkę na podany adres np. http://192.168.8.109 , użytkownik: admin , hasło (domyślne) : openmediavault

Zmiana języka openmediavault na angielski

W celu łatwiejszego wyszukiwania pomocy w internecie dotyczącej openmediavault dobrze jest ustawić język interfejsu webowego na angielski.

Zmiana adresu ip openmediavault na statyczny

W menu Network – Interfaces – Edit ustawiamy parametry statycznego połączenia sieciowego. Po zapisaniu logujemy się ponownie pod nowym adresem np. http://192.168.8.28

Zmiana domyślnego hasła admina

Aktualizacja systemu Debian 11 w openmediavault

Logujemy się przez SSH użytkownikiem root oraz hasłem jakie podaliśmy podczas instalacji openmediavault i wydajemy komendę:

apt update && apt upgrade
reboot

lub z poziomu interfejsu webowego w menu System – Update management wybieramy Perform update.

Dodanie dysku USB do maszyny wirtualnej openmediavault

Do wyłączonej maszyny wirtualnej omv dodajemy wybrane urządzenie USB pamięci masowej.

Po uruchomieniu maszyny wirtualnej omv w menu Storage – Disks sprawdzamy czy pojawił się nowy dysk. Jeśli mamy na nim dane do usunięcia i chcemy szybko wyczyścić dysk wybieramy opcję Wipe.
W tym przypadku jednak podłączamy dysk posiadający już jedną partycję sformatowaną w systemie EXT4, więc niczego nie musimy czyścić ani tworzyć. Warto natomiast włączyć opcję Enable Write-Cache w ustawieniach dysku oraz opcje S.M.A.R.T. dla wybranego dysku.

Rozwiązanie problemu z odczytem S.M.A.R.T. z dysków zewnętrznych USB

Jeśli posiadamy problematyczny dysk zewnętrzny USB dla którego Linux nie obsługuje protokołu UAS (nie można odczytać status smart z konsoli), należy wyłączyć obsługę tego protokołu dla Debiana 11 będącego pod spodem openmediavault.

 

# sprawdzenie nazwy urządzenia blokowego 
lsblk 
# weryfikacja działania narzędzia smartctl 
smartctl -i /dev/sdb 

# sprawdzamy id urządzenia USB 
lsusb 
Bus 008 Device 002: ID 0bc2:ab80 Seagate RSS LLC One Touch Hub 

# dodajemy je do nowo utworzonego pliku 
nano /etc/modprobe.d/disable-uas.conf 
options usb-storage quirks=0bc2:ab80:u 

# po zmianach w powyższych plikach 
update-initramfs -u 
reboot

Rozwiązanie problemu z kartą muzyczną intela podczas startu openmediavault

nano /etc/modprobe.d/openmediavault-blacklist.conf 
# Disable floppy kernel module to prevent error messages like: 
# end_request: I/O error, dev fd0, sector 0 
blacklist floppy 
blacklist snd_hda_intel 

# po zmianach w powyższych plikach 
update-initramfs -u 
reboot

Utworzenie / podłączenie systemu plików na dysku

Zanim będziemy mogli dodawać udziały sieciowe należy utworzyć lub podłączyć istniejący system plików jak w tym przypadku (Mount existing file system)

 

Instalacja dodatkowych wtyczek do openmediavault

Wchodzimy w menu System – Plugins i wybieramy z dostępnej listy wtyczek interesującą nas wtyczkę.
Polecam zainstalować wtyczkę diskstats, filebrowser, ftp oraz jeśli możemy zwiększyć zasoby maszyny wirtualnej do 4 vCPU i 4 GB RAM clamav (antywirus).

Jeśli potrzebujemy więcej wtyczek czy też wsparcia dla Docker-a warto zainstalować omv-extras. Więcej informacji na stronie https://wiki.omv-extras.org/

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

Włączenie wybranych usług openmediavault

Włączamy wszystkie potrzebne usługi np. FTP,  File Browser, NFS,  SMB/CIFS, Rsync itd.  SSH jest domyślnie włączona. File Browser dostępny pod adresem http://ip_omv:3670 pozwala na bardzo wygodne wgrywanie i ściąganie plików z ze wskazanego udziału dyskowego, w tym przypadku /projects.

Tworzymy potrzebne udziały dyskowe

Aby zachować przejrzystość i bezpieczeństwo zapisywanych danych, dobrze jest włączyć ich separację i potworzyć tematycznie wszelkie potrzebne udziały dyskowe w menu Storage – Shared folders.

Tworzenie użytkowników NFS, FTP, SMB / CIFS

Wchodzimy w menu Users – Users i wybieramy Create. Jeśli będziemy do wybranych udziałów dostawać się przez protokół SMB / CIFS dobrze jest utworzyć zawczasu użytkownika z hasłem aby móc go później przypisać do wybranego udziały sieciowego. W przypadku NFS kontrola dostępu może  być realizowany w różny sposób i zakładanie użytkownika nie jest tu wymagane.
Konto utworzone w tym miejscu będzie również służyć do logowania się przez protokół FTP.

 

Tworzenie potrzebnych udziałów sieciowych SMB / CIFS

W przypadku tworzenia udziału sieciowego dla protokołu SMB / CIFS możemy wybrać szereg interesujących opcji:

Time Machine support jeśli planujemy dodać ten udział do macOs i wykorzystywać go jako miejsce backupu danych
Enable recycle bin jeśli chcemy mieć dodatkową ochronę przed przypadkowym usunięciem danych z dysku sieciowego
Host allow i Host deny jeśli chcemy ograniczyć wskazanym adresom ip dostęp do wybranego udziału sieciowego

Tworzenie potrzebnych udziałów sieciowych NFS

W przypadku tworzenie udziałów sieciowych NFS możemy ograniczać dostęp poprzez podanie konkretnego ip lub sieci (Client), uprawnień (Permission) czy opcji dodatkowych (Extra options).
Dla potrzeb wykorzystania udziału sieciowego przez Proxmox Backup Server należy podać extra options: rw,sync,no_subtree_check,no_root_squash,insecure_locks

Przydział uprawnień dla wybranego użytkownika SMB / CIFS

W menu Users –  {wybrany user } – Shared folder permission możemy jednoznacznie wskazać uprawnienia SMB / CIFS użytkownika do wybranych folderów.

Przydział uprawnień dla wybranego użytkownika FTP

Posiadamy stworzonego wcześniej na potrzeby dostępu przez SMB / CIFS użytkownika zibi.
Należy w menu Storage – Shared Folders – {wybrany folder} – Access Control List wskazać jednoznacznie że systemowy użytkownik np. zibi ma mieć konkretne uprawnienia do udziału dyskowego np. /projects.

Pliki i katalogi utworzone przez admin-a z poziomu File Browser w udziale dyskowym /projects nie mogą być zmieniane przez użytkownika zibi. Po połączeniu przez FTP użytkownik zibi ma teraz pełne uprawnienia w folderze /projects. 

Przykłady połączeń z różnych systemów do udziałów sieciowych openmediavualt

Podłączenie udziału samby openmediavault z Windows 11

Wybieramy z menu podręcznego ikony Mój komputer – Mapuj dysk sieciowy. Podajemy ściężkę do folderu w formacie \\adres_ip_omv\nazwa_udziału_sieciowego, zaznaczamy Połącz ponownie przy logowaniu i Połącz przy użyciu innych poświadczeń. Podajemy wcześniej ustaloną nazwę użytkownika oraz hasło.

Podłączenie udziału samby openmediavault z Ubuntu / Debian

# instalujemy cifs utils aby można było montować zdalne udziały samby
sudo apt-get install cifs-utils

# tworzymy punkt montowania
mkdir /mnt/projects

# montujemy zdalny udział sieciowy /projects do lokalnego folderu /mnt/projects
mount -t cifs -o user=zibi,password=xxxxxx //192.168.8.28/projects /mnt/projects/

Podłączenie udziału nfs openmediavault z Proxmox VE

W Proxmox VE wchodzimy w menu Datacenter – Storage – Add – NFS. Podajemy wszystkie potrzebne informacje i wskazujemy w Content przeznaczenie tego udziału sieciowego. W tym przypadku jest to tylko backup maszyn wirtualnych czyli VZDump backup file.

Podłączenie udziału nfs openmediavault z Ubuntu / Debian

# instalujemy klienta nfs
sudo apt-get install portmap nfs-common

# tworzymy punkt montowania
mkdir /mnt/backup

# montujemy zdalny udział sieciowy /backup_cfg do lokalnego folderu /mnt/backup
mount -t nfs 192.168.8.28:/export/backup_cfg /mnt/backup/

Podłączenie udziału nfs openmediavault z Proxmox Backup Server

Tworzenie chunkstore może potrwać na dużym dysku sieciowym dość długo i aby uniknąć timeoutów z interfejsu GUI  najlepiej jest podłączać Datastore z NFS  z linii komend serwera Proxmox Backup Server.

# tworzymy punkt montowania
mkdir /mnt/backupstore
# montujemy zdalny udział sieciowy /backup_pbs do lokalnego folderu /mnt/backupstore
mount -t nfs 192.168.8.28:/backup_pbs /mnt/backupstore/

# tworzymy datastore o nazwie backupstore korzystający z punktu montowania /mnt/backupstore
proxmox-backup-manager datastore create backupstore /mnt/backupstore/

Należy jedynie pamiętać o nadaniu odpowiednich uprawnień użytkownikowi do Datastore. Tutaj użytkownik pbsclient ma uprawnienia DatastoreAdmin.

 

Zaawansowana konfiguracja openmediavault

Instalacja certyfikatu Letsencrypt

W tym przykładzie zakładamy, że posiadamy gotowe pliki: privkey.pem oraz cert.pem pochodzące z maszyny wirtualnej certbot zajmującej się odnawianiem certyfikatu Letsencrypt celem dalszej dystrybucji do wszystkich serwerów w mojej sieci. Wchodzimy w menu System – Certificates – SSL i wybieramy Import.

Private key wskazujemy z naszego komputera plik privkey.pem
Certificate wskazujemy z naszego komputera plik cert.pem
Comment wpisujemy Letsencrypt

Jeśli mamy już zainstalowany certyfikat SSL możemy go ustawić w:
System – Workbench
Services – FTP – SSL/TLS Settings
Services – File Browser

 

Informacja o zainstalowanych certyfikatach znajduje się w pliku /etc/openmediavault/config.xml w sekcji

<certificates>
<sslcertificate>
<uuid>d9e56d83-386c-4a74-a828-13d8816e1a53</uuid>
...
<comment>Lestencrypt</comment>
</sslcertificate>
</certificates>

Dzięki uuid wiemy, że cert.pem jest zapisany w /etc/ssl/certs/openmediavault-d9e56d83-386c-4a74-a828-13d8816e1a53.crt , natomiast privkey.pem w /etc/ssl/private/openmediavault-d9e56d83-386c-4a74-a828-13d8816e1a53.key

Automatyczne odnowienie certyfikatu SSL Let’s encrypt dla openmediavault

Więcej informacji na temat automatycznego odnowienia certyfikatu SSL Let’s encrypt dla openmediavault można znaleźć na stronie https://itadmin.vblog.ovh/lets-encrypt-wildcard-dystrybucja-certyfikatu-ssl-w-sieci-wewnetrznej/#Reczne_odnowienie_certyfikatu_SSL_dla_openmediavault oraz https://itadmin.vblog.ovh/skrypt-bash-update_cert-sh/

Zarządzanie openmediavault z konsoli

Niektóre zadanie administracyjne aby nie przeładowywać niepotrzebnie interfejsu www openmediavault zostały przeniesione do narzędzi omv_*

 

# lista wszystkich zmiennych środowiskowych
omv-env list

# lista wszystkich skonfigurowanych zmiennych środowiskowych
omv-env get

# zmiana jakieś zmiennej środowiskowej
omv-env set -- OMV_SSHD_SUBSYSTEM_SFTP "/usr/lib/openssh/sftp-server"

# lista wszystkich usług
omv-salt deploy list

# pokaż wszystkie obiekty typu filesystem podpięte jako ext4
omv-confdbadm read conf.system.filesystem.mountpoint  | jq -r '.[]|select(.type=="ext4")'
{
  "uuid": "e64adfc3-98e5-4962-8590-114a91031008",
  "fsname": "/dev/disk/by-uuid/24ed8e9c-485a-4e22-84dd-2e039ff328c0",
  "dir": "/srv/dev-disk-by-uuid-24ed8e9c-485a-4e22-84dd-2e039ff328c0",
  "type": "ext4",
  "opts": "defaults,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,acl",
  "freq": 0,
  "passno": 2,
  "hidden": false,
  "usagewarnthreshold": 95,
  "comment": ""
}

# pokaż wszystkie zamontowane file systemy
omv-rpc -u admin 'FileSystemMgmt' 'enumerateMountedFilesystems' '{"includeroot": true}'

# wszystkie możliwe polecenia omv_
source /usr/share/openmediavault/scripts/helper-functions

# można teraz wpisać omv_ i wcisnąć tab

Konfiguracja powiadomień emailowych

Domyślna konfiguracja postfixa (/etc/postfix/main.cf) zapewnia bezproblemową obsługę powiadamiania przez zewnętrzny serwer SMTP. W tym przypadku skrzynka znajduje się na serwerze OVH. Należy w menu System – Notifications – Settings włączyć powiadomienia i podać dane serwera pocztowego takie jak adres, port, nazwa konta wysyłającego powiadomienia i dane dostępowe do skrzynki wysyłającej powiadomienia. Następnie w menu System – Notifications – Event należy wskazać jakiego typu powiadomienia mają przychodzić na adres wskazany powyżej w polu Recipient. W tym przypadku interesuje mnie jedynie status S.M.A.R.T. dysku oraz nowe aktualizacje.  Więcej informacji na ten temat: https://docs.openmediavault.org/en/5.x/administration/general/notifications.html#events

 

Podgląd wysyłanych wiadomości email:

tail -f /var/log/mail.log

May 23 23:00:51 nas postfix/qmgr[205742]: 164E1443B3: removed
May 24 00:00:50 nas postfix/pickup[297453]: 442C54187A: uid=0 from=<root>
May 24 00:00:50 nas postfix/cleanup[299533]: 442C54187A: message-id=<[email protected]>
May 24 00:00:50 nas postfix/qmgr[205742]: 442C54187A: from=<[email protected]>, size=1001, nrcpt=2 (queue active)
May 24 00:00:50 nas postfix/pipe[299536]: 442C54187A: to=<[email protected]>, relay=omvnotificationfilter, delay=0.03, delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered via omvnotificationfilter service)
May 24 00:00:51 nas postfix/smtp[299537]: 442C54187A: replace: header Subject: SMART error (FailedReadSmartSelfTestLog) detected o: Subject: [nas.netapps.ovh] SMART error (FailedReadSmartSelfTestLog) detected on host: nas
May 24 00:00:51 nas postfix/smtp[299537]: 442C54187A: to=<[email protected]>, relay=ssl0.ovh.net[193.70.18.144]:587, delay=1.1, delays=0.01/0.01/0.75/0.32, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 31C9C1FE02)
May 24 00:00:51 nas postfix/qmgr[205742]: 442C54187A: removed

 

Odczyt parametrów pracy przez snmp

Przed wykorzystaniem snmp w openmediavault należy zainstalować wtyczkę snmp oraz włączyć ją w menu Services – SNMP.

 

# sprawdzenie komunikacji i wyświetlenie wszystkich możliwych wartości
snmpwalk -v2c -c public 192.168.8.28

# podstawowe informacje o hoście 
snmpwalk -v2c -c public 192.168.8.28 1.3.6.1.2.1.1

# nazwa hosta
snmpget -v 2c 192.168.8.28 -c public .1.3.6.1.2.1.1.5.0
iso.3.6.1.2.1.1.5.0 = STRING: "nas"

# uname -a
snmpget -v 2c 192.168.8.28 -c public .1.3.6.1.2.1.1.1.0
iso.3.6.1.2.1.1.1.0 = STRING: "Linux nas 6.1.0-0.deb11.7-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.20-2~bpo11+1 (2023-04-23) x86_64"

# uptime
snmpget -v2c -c public 192.168.8.28 .1.3.6.1.2.1.1.3.0
iso.3.6.1.2.1.1.3.0 = Timeticks: (70247) 0:11:42.47

# CPU i karty sieciowe
snmpwalk -v2c -c public 192.168.8.28 .iso.3.6.1.2.1.25.3.2.1.3
iso.3.6.1.2.1.25.3.2.1.3.196608 = STRING: "GenuineIntel: Intel(R) Core(TM) i7-10710U CPU @ 1.10GHz"
iso.3.6.1.2.1.25.3.2.1.3.196609 = STRING: "GenuineIntel: Intel(R) Core(TM) i7-10710U CPU @ 1.10GHz"
iso.3.6.1.2.1.25.3.2.1.3.262145 = STRING: "network interface lo"
iso.3.6.1.2.1.25.3.2.1.3.262146 = STRING: "network interface enp6s18"
iso.3.6.1.2.1.25.3.2.1.3.262148 = STRING: "network interface veth43335cc1"
iso.3.6.1.2.1.25.3.2.1.3.786432 = STRING: "Guessing that there's a floating point co-processor"

# load 1/5/15
snmpget -v 2c 192.168.8.28 -c public .1.3.6.1.4.1.2021.10.1.3.1
iso.3.6.1.4.1.2021.10.1.3.1 = STRING: "0.22"
snmpget -v 2c 192.168.8.28 -c public .1.3.6.1.4.1.2021.10.1.3.2
iso.3.6.1.4.1.2021.10.1.3.2 = STRING: "0.24"
snmpget -v 2c 192.168.8.28 -c public .1.3.6.1.4.1.2021.10.1.3.3

# swap
snmpget -v 2c 192.168.8.28 -c public .1.3.6.1.4.1.2021.4.4.0
iso.3.6.1.4.1.2021.4.4.0 = INTEGER: 936728

Zaplanowane zadania

Jeśli potrzebujemy wykonywać cyklicznie jakieś polecenie lub skrypt wtedy można je wygodnie dodać w menu System – Scheduled Tasks – Create. Utworzone zadania można podejrzeć również w pliku /etc/cron.d/openmediavault-userdefined

 

 cat /etc/cron.d/openmediavault-userdefined
# This file is auto-generated by openmediavault (https://www.openmediavault.org)
# WARNING: Do not edit this file, your changes will get lost.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user    command
15 10 * * * root /var/lib/openmediavault/cron.d/userdefined-eaaad76a-4a08-4b91-b39e-453ca15b9fcf 2>&1 | mail -E -s "Cron" -a "From: Cron Daemon <root>" root >/dev/null 2>&1

Serwer Rsync

Do uzupełnienia