ZoneMinderのディスク増設

ZoneMinder

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を作成するときに利用します.

xfxの作成

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のデータ領域拡張の作業は完了です.

コメント

タイトルとURLをコピーしました