3 台のカメラの録画領域が 2 日弱でローテーションしているみたいです.せめて 2 週間くらいさかのぼってみたいのでディスク増設を検討してみます.現在の ZoneMinder の録画領域は約 200GB です.これで約 2 日の録画ができますので 2TB 以上のディスクを増設すればよさそうです.
事前準備
当方の環境の都合で Proxmox VE の VM の環境変更が必要でした.それについての詳細はこちらにまとめています.
データ領域用ディスクの選定と購入
Proxmox VE の物理サーバ(インテルの NUC なので 2.5 インチまで)に収まりかつそこそこ大容量(でかつ安価でないと困る)の HDD として東芝の HDD MQ04ABD200(2TB) を選択しました.本当は MQ04ABD400(4TB) にしたかったのですが,このHDDの厚さが 15mm で NUC に収まりません.2022/6/13現在,価格.com での最安が 6 千円代でヨドバシでも 7 千円ちょっとなのでヨドバシで購入することにしました.注文は 6/13 で翌日には届きました.
ディスクの交換
交換前のディスク構成です.

525GB の SSD が接続されています.これを今回購入したディスクと交換します.PVE のもとで動作している OS と PVE を停止し,ディスクの交換を行います.

ディスク交換後の画面です.正しく認識されていることを確認します.
ディスクの PVE への登録
PVE に追加したディスクはそのままでは VM で利用することはできません.LVM か ZFS(か Directory)に登録する必要があります.管理者が PVE で管理しやすいファイルシステムを選択しましょう.今回は追加ディスクを LVM に登録します.LVM を選択した理由は簡単で利用できる容量が LVM のほうが多かった(今回のディスクで約 90GB の差がありました)というものです.
それでは新規ディスクを LVM に登録していきます.LVM 画面の上部にある「Create: Volume Group」をクリックします.

Disk には新規に追加された /dev/sda を Name には VG 名を入力し「Create」をクリックします.

以下のように新たな Volume Group(lvm-zm) が作成されます.

追加ディスクの VM への割り当て
追加した LVM の領域を VM へ割り当てます.追加したい VM( 今回は ZoneMinder が動作している VM)を選択し Hardware をクリックします.

画面上部の「Add」をクリックするとプルダウンメニューが現れますので,その中の「HardDisk」を選択します.

HardDisk の追加画面が表示されますので,Storage と Disk size を入力して「Add」をクリックします.なお,その他の値も環境にあわせて適宜変更してください.

以下のように「Hard Disk(scsi1)」として追加されました.

ちなみに「1860」という数字は 10GB 単位で入力してエラーがでない最大の数字です(今回のディスクでの値).試行錯誤するときは許容範囲の値だと実際作成されてしまいますので,大きい値からいれていくといいでしょう.
VM でのディスクの設定
PVE で VM へのディスクの割り当てがすんだら VM でディスクの設定を行います.以下の操作は ZoneMinder が動作している OS にログインしスーパーユーザ権限で作業を行います.
ファイルシステムの選定
ZoneMinder が動作している OS は fedora35 ですので様々なファイルシステムを利用することができます.今回は将来の容量の拡張を考慮して LVM 上に xfs を作成することにします.
追加ディスクの確認および parted での設定
以下のコマンドを実行してディスクが追加されていることを確認します.scsi デバイスとして追加しましたので lsblk に S オプションをつけて確認します.
# lsblk -S
NAME HCTL TYPE VENDOR MODEL REV SERIAL TRAN
sda 2:0:0:0 disk QEMU QEMU HARDDISK 2.5+ drive-scsi0
sdb 2:0:0:1 disk QEMU QEMU HARDDISK 2.5+ drive-scsi1
sr0 1:0:0:0 rom QEMU QEMU DVD-ROM 2.5+ QM00003 ata
#
つづいて parted コマンドで容量を確認します.
# parted -l
(途中略)
Error: /dev/sdb: unrecognised disk label
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 1997GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(途中略)
#
追加ディスクが /dev/sdb と特定できました.確認できたら追加ディスクにパーティションを作成していきます.
# parted /dev/sdb
GNU Parted 3.4
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
Partition Table を gpt に設定します.
(ここに画像をいれる)
parted で表示される単位を MB 単位に変更します.
(parted) unit mb
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 1997160MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
つづいてパーティションを作成します.
(parted) mkpart
Partition name? []?
File system type? [ext2]?
Start? 1
End? 1997159
(parted) p
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 1997160MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1.05MB 1997159MB 1997158MB ext2
Flags を lvm に変更します.
(parted) set
Partition number? 1
Flag to Invert? lvm
New state? [on]/off? on
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 1997160MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1.05MB 1997159MB 1997158MB ext2 lvm
最後に quit コマンドで parted を終了します.これで /dev/sdb1 が利用可能となりました.
LVM設定
追加ディスク /dev/sdb1 上に LVM の論理ボリュームを作成するまで(xfs を作成する直前まで)を説明します.
物理ディスクを LVM の制御下におく
物理ディスクを LVM の制御下におきます.現在の LVM で制御されているディスクの一覧を pvdisplay コマンドで表示します.
# pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name fedora_fedora
PV Size <252.01 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 64513
Free PE 1
Allocated PE 64512
PV UUID 0UMO3B-PkL2-LVNm-vT0W-UsI3-P0OB-POiqet
zm(root)[160][9:50]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 fedora_fedora lvm2 a-- 252.00g 4.00m
#
/dev/sdb1 を LVM の制御下におきます.pvcreate コマンドを実行します.
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
#
再度 pvdisplay コマンドを実行して /dev/sdb1 が LVM の制御下にあることを確認します.
# pvdisplay
(途中略)
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <1.82 TiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 7DrqX5-2nGe-4uGZ-4fPh-Pttm-3d9T-KBRFai
#
Volume Group への登録
Volume Group(以下 VG と略)とは簡単に言うとさきほど LVM 制御下においたディスクをまとめたものです.物理ディスクが一つの場合もあるし複数の場合もあります.あとから追加することも削除することも可能です.この VG から論理的なボリューム(これを Logical Volume(LV)といいます)を切り分けて,その上に ext や xfs などのファイルシステムを作成し一つのパーティションとして利用していきます.
今回のシステムでは LVM を利用しているため既存の VG が一つありますが,ZoneMinder 専用の VG を作成します.
最初に vgdisplay コマンドで現在の VG の一覧を表示します.
# vgdisplay
--- Volume group ---
VG Name fedora_fedora
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 252.00 GiB
PE Size 4.00 MiB
Total PE 64513
Alloc PE / Size 64512 / 252.00 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID zzi0SP-myF4-8Ihd-w3yr-0oo3-XWlT-kUjJQf
#
/dev/sdb1 を VG に登録します.VG 名は「vg_zm」とします.
# vgcreate vg_zm /dev/sdb1
Volume group "vg_zm" successfully created
#
vgdisplay コマンドで VG が登録されたことを確認します.
# vgdisplay
--- Volume group ---
VG Name vg_zm
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476159
Alloc PE / Size 0 / 0
Free PE / Size 476159 / <1.82 TiB
VG UUID J1DeY1-ZgzT-1ZPY-gMHo-lJdz-gGxa-owtiP4
--- Volume group ---
(途中略)
#
論理ボリュームの作成
VG から論理ボリューム(以下 LV と略)を切り出します.利用する VG は先ほど作成した vg_zm で新規に作成する LV 名を data01,容量は VG の残り全部とします.
# lvcreate -n data01 -l 100%FREE vg_zm
Logical volume "data01" created.
#
vg_zm の LV の確認を行います.
# lvdisplay vg_zm
--- Logical volume ---
LV Path /dev/vg_zm/data01
LV Name data01
VG Name vg_zm
LV UUID HdYZFf-wZwd-17bf-mcsQ-YB3W-I44J-fDBPW6
LV Write Access read/write
LV Creation host, time zm.yo7612.net, 2022-06-15 10:32:11 +0900
LV Status available
# open 0
LV Size <1.82 TiB
Current LE 476159
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
#
この論理ボリュームのパス名は「/dev/vg_zm/data01」となります.このパス名は後ほど xfs を作成するときに利用します.
xfs の作成
LV 上に xfs を作成します.
# mkfs.xfs /dev/vg_zm/data01
meta-data=/dev/vg_zm/data01 isize=512 agcount=4, agsize=121896704 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=487586816, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=238079, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
#
ZoneMinder データ領域の新規ディスクへの移行
ZoneMinder のデータ領域を新規ディスクへ移行します.
ZoneMinder の停止
データ移行中は ZoneMinder を停止しておきます.
# systemctl stop zoneminder
新規ディスクの仮マウント
新しく追加した xfs の LVを仮のマウントポイントへマウントします.マウントポイントは既存のものを利用するかあらかじめ作成しておきます.
# mount /dev/vg_zm/data01 /mnt
データ領域の移行
ZoneMinder のデータ領域は /var/lib/zoneminder に設定されています.このディレクトリの下にあるすべてのディレクトリおよびファイルを先ほどのディレクトリへコピーします.
# cd /var/lib/zoneminder
# tar cf - . | ( cd /mnt ; tar xf -)
コピーが完了したら /mnt をアンマウントしておきます.データ量約 243GB を 77 分でコピー完了しました.(約 53MB/秒)
# umount /mnt
マウントポイントの組み換え
データのコピーが終わったらマウントポイントの組み換えを行います.
# cd /var/lib
# mv zoneminder zoneminder.old
# mkdir zoneminder
# chown apache.apache zoneminder
# mount /dev/vg_zm/data01 /var/lib/zoneminder
ZoneMinder の起動・動作確認
ZoneMinder を起動し動作確認を行います.
# systemctl start zoneminder
/etc/fstab の修正
今回追加したボリュームについて,OS 再起動時に自動的にマウントするように /etc/fstab を修正します.以下の行を追加します.
/dev/mapper/vg_zm-data01 /var/lib/zoneminder xfs defaults 0 0
OS の再起動および動作確認
OS を再起動し fstab の設定が有効であることと ZoneMinder が正常に動作していることを確認します.
古いデータの削除
/var/lib/zoneminder.old に古いデータが残っていますので削除します.
# cd /var/lib
# \rm -rf zoneminder.old
こちらの所要時間は 5 分弱でした.(データ容量は 200GB 超え)
これで,ZoneMinder のデータ領域拡張の作業は完了です.
コメント