ZoneMinder wymiana wirtualnego dysku zawierającego nagrania na podmontowany udział NFS z openmediavault

Wstępne założenia do wymiany wirtualnego dysku i przeniesienia nagrań na udział sieciowy NFS

Maszyna wirtualna Proxmox VE na której był zainstalowany ZoneMinder miała do tej pory podłączone 2 wirtualne dyski: 16 GB (montowanie /) i 384 GB (montowanie /var). Gdy brakowało miejsca na partycji /var wtedy z poziomu Proxmox VE w menu Hardware – Disk – Action – Disk Resize dodawałem potrzebne miejsce. Jednak znacząco wydłużał się backup całej maszyny wirtualnej i trzeba było pilnować kończącego się miejsca na partycji /var. 384 GB w praktyce pozwalało przechowywać ok 5 dni dla 4 kamer Full HD. Przy okazji wdrożenia openmediavault w swojej sieci jako centralnego miejsca do składowania danych przez protokoły NFS i SMB/CIFS postanowiłem zmniejszyć obecną partycję /var z 384 GB do 16 GB a katalog z nagraniami z kamer umieścić na osobnym udziale sieciowym NFS 192.168.8.28:/video_cameras zamontowanym na serwerze ZoneMinder w katalogu /mnt/recordings. Najprostszym sposobem na migrację danych partycji /var  jest zatem dodanie nowego dysku Proxmox VE  o wielkości 16 GB do maszyny wirtualnej ZoneMinder, skopiowanie potrzebnych plików z obecnego /var na nowy podmontowany w /newvar oraz po całej operacji zamontowanie /var na nowym sporo mniejszym dysku.

 

Procedura podmiany dysku na inny ze skopiowaniem obecnych danych w punkcie montowania /var

# sprawdzamy jakie oznaczenie ma nowo podłączony w konsoli Proxmox dysk
lsblk 
#NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 63.3M 1 
#loop /snap/core20/1879 loop1 7:1 0 63.5M 1 
#loop /snap/core20/1891 loop2 7:2 0 79.9M 1 
#loop /snap/lxd/22923 loop3 7:3 0 111.9M 1 
#loop /snap/lxd/24322 loop4 7:4 0 53.2M 1 
#loop /snap/snapd/18933 loop5 7:5 0 53.2M 1 
#loop /snap/snapd/19122 
#sda 8:0 0 16G 0 disk
# ├─sda1 8:1 0 1M 0 part 
# └─sda2 8:2 0 16G 0 part /
#sdb 8:16 0 384G 0 disk
# └─sdb1 8:17 0 384G 0 part /var
#sdc 8:32 0 16G 0 disk
#sr0 11:0 1 1024M 0 rom 

# tworzymy jedną duża partycję na nowym dysku sdc
parted /dev/sdc 
#GNU Parted 3.4 Using /dev/sdc Welcome to GNU Parted! Type 'help' to view a list of commands. 
(parted) mklabel gpt 
(parted) mkpart primary ext4 0% 100% 
(parted) print 
#Model: QEMU QEMU HARDDISK (scsi) 
#Disk /dev/sdc: 17.2GB Sector size (logical/physical): 512B/512B 
#Partition Table: gpt 
#Disk Flags: Number Start End Size File system Name Flags 1 1049kB 17.2GB 17.2GB ext4 primary (parted) q 
#Information: You may need to update /etc/fstab. 

# po wyjściu (q) z parted formatujemy dysk sdc1 w systemie EXT4
mkfs.ext4 /dev/sdc1 
#mke2fs 1.46.5 (30-Dec-2021) Discarding device blocks: done Creating filesystem with 4193792 4k blocks and 1048576 inodes 
#Filesystem UUID: 3a08614d-b125-454f-9491-c74934f7903d 
#Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 
#Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done 
#Writing superblocks and filesystem accounting information: done 

# wyłączamy i usuwamy swapa z partycji /var jeśli się tam znajduje
sudo swapon --show 
#NAME TYPE SIZE USED PRIO /var/swap file 4G 0B -2 
sudo swapoff /var/swap 
rm -rf /var/swap

# zatrzymujemy usługę zoneminder oraz systemd-journald
systemctl stop zoneminder
systemctl stop systemd-journald

# usuwamy stare nagrania lub kopiujemy je w bezpieczne miejsce
rm -rf /var/cache/zoneminder/events/
# sprawdzamy czy jakieś usługi / procesy nie blokują obecnego dysku na którym jest partycja /var
lsof /var 
#COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
#systemd-j 445 root mem REG 8,17 8388608 3670176 /var/log/journal/f740f8a2bb7e45d487906c5d8271f9d7/user-1000.journal
#systemd-j 445 root mem REG 8,17 8388608 3670286 /var/log/journal/f740f8a2bb7e45d487906c5d8271f9d7/system.journal 
#systemd-j 445 root 22u REG 8,17 8388608 3670176 /var/log/journal/f740f8a2bb7e45d487906c5d8271f9d7/user-1000.journal 
#systemd-j 445 root 25u REG 8,17 8388608 3670286 /var/log/journal/f740f8a2bb7e45d487906c5d8271f9d7/system.journal 
kill -9 445

# przechodzimy w tryb init 1
init 1

# tworzymy nowy tymczasowy punkt montowania /newvar i montujemy do niego nowo sformatowany dysk sdc1
mkdir /mnt/newvar
mount /dev/sdc1 /mnt/newvar/

# kopiujemy obecne dane z /var do /newvar
cp -apx /var/* /mnt/newvar/

# odmontowujemy obecny /var
umount -f /var
# jeśli powyższe polecenie nie pozwoli odmontować /var to należy użyć trybu lazy
umount -l /dev/sdb1 

# dla bezpieczeństwa zmieniamy jeszcze obecny katalog /var na /var.off/
mv /var /var.off 

# tworzymy nowy katalog /var i montujemy do niego nowy dysk
mkdir /var
mount /dev/sdc1 /var

# tworzymy na nowo swapa
sudo fallocate -l 4G /var/swap
mkswap -f /var/swap
chmod 0600 /var/swap
sudo swapon /var/swap

# poprawiamy /etc/fstab w zależności kiedy zrobimy usunięcie starego dysku 384 GB z konsoli Proxmox
# tak powinno być gdy stary dysk jest cały czas obecny w maszynie wirtualnej ZoneMinder
/dev/sdc1 /var ext4 defaults 0 1

# tak powinno być po usunięciu już starego dysku 384 GB z Proxmox
/dev/sdb1 /var ext4 defaults 0 1

 

Tak wygląda obecnie mój /etc/fstab gdy nie ma już starego dysku 384 GB.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/dbf6717c-f9cf-4d0a-b2a0-e96b3b5db705 / ext4 defaults 0 1
# /var was on /dev/sdb1 during curtin installation
#/dev/disk/by-uuid/584fcb36-4282-40fd-a012-7f14698cd8b4 /var ext4 defaults 0 1
/dev/sdb1 /var ext4 defaults 0 1
/var/swap       none    swap    sw      0       0
192.168.8.28:/video_cameras /mnt/recordings nfs4 rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.8.31,local_lock=none,addr=192.168.8.28 0 0

Dodanie nowego Storage w ZoneMinder i zmiana konfiguracji miejsca zapisu dla kamer

W menu Options – Storage – Add New Storage dodajemy nowy Storage. Wcześniej oczywiście montujemy udział sieciowy NFS 192.168.8.28:/video_cameras w katalaogu /mnt/recordings i zakładamy w nim katalog /zoneminder/events/ aby cała ścieżka miała postać: /mnt/recordings/zoneminder/events/

Następnie poprawiamy w konfiguracji każdej z kamer w menu Storage – Storage Area – recordings

Poprawienie filtrów do automatycznego porządkowania danych w konsoli ZoneMinder

Filtr: PurgeWhenFull może mieć teraz wartość 75 a nie jak poprzednio 97.
Filtr DeleteOldEvents może mieć teraz wartośc -14 day a nie jak poprzednio -5.

W zależności który z warunków zostanie spełniony jako pierwszy wtedy odbędzie się automatyczne czyszczenie i usuwanie starych nagrań.

 

Tworzenie potrzebnych udziałów sieciowych NFS openmediavault

Konfiguracja openmediavault jako dysku nas i centrum składowania różnych danych w sieci – IT Admin (vblog.ovh)