Dev.to AI 🤖 Ai 👁 0 📖 4 min read

Setting Up LVM Storage for Orthanc PACS & MySQL: Combining Remaining OS Disk Space with Dedicated Storage

Dalam mengelola server Orthanc PACS di lingkungan rumah sakit atau klinik, pertumbuhan data DICOM (CT-Scan, MRI, X-Ray) terjadi sangat cepat. Mengandalkan partisi statis biasa akan menyulitkan ekspansi kapasitas di masa

Dalam mengelola server Orthanc PACS di lingkungan rumah sakit atau klinik, pertumbuhan data DICOM (CT-Scan, MRI, X-Ray) terjadi sangat cepat. Mengandalkan partisi statis biasa akan menyulitkan ekspansi kapasitas di masa depan karena berisiko membutuhkan downtime atau migrasi ulang jutaan file.

Solusi terbaik di tingkat sistem operasi adalah menggabungkan Hardware RAID (untuk proteksi kegagalan fisik) dengan LVM (Logical Volume Manager) di Linux. Dengan arsitektur ini, kapasitas dari beberapa Virtual Disk dapat digabung menjadi satu pool besar, dipisah antara database dan file DICOM, serta dapat diperbesar secara online kapan saja.

Arsitektur Storage

Pada skenario ini, sistem memiliki dua block device hasil konfigurasi Hardware RAID. Pada fisiknya memiliki 1862.5 GB x 4 Slot (vd_os) dan 3725.5 GB x 2 slot (vd_data)

  1. /dev/sdb (~3.6 TB): Disk utama yang sudah terinstal sistem operasi secara non-LVM (sdb1 /boot/efi, sdb2 /, sdb3 swap) dan masih memiliki ruang kosong sekitar 3.5 TB.
  2. /dev/sda (~3.6 TB): Virtual Disk kedua yang masih kosong utuh.

Kedua sumber ruang tersebut digabung ke dalam satu Volume Group (vg_orthanc), lalu dipecah menjadi dua Logical Volume (LV) terpisah:

  • lv_mysql_orthanc (100 GB): Khusus untuk direktori data database MySQL/Percona (indeks PACS).
  • lv_orthanc (~6.94 TB): Khusus untuk penyimpanan fisik file .dcm Orthanc (mengambil 98% dari sisa ruang bebas dan menyisakan 2% cadangan di Volume Group).

Mengapa database dan storage DICOM dipisah LV-nya?
Jika suatu saat penyimpanan file DICOM penuh hingga 100%, database MySQL tidak akan ikut macet atau corrupt karena gagal menulis transaction log. Selain itu, backup atau LVM snapshot database bisa dilakukan secara independen.

1. Membuat Partisi Sisa pada Disk OS (/dev/sdb4)

Langkah pertama adalah mengalokasikan ruang kosong di ujung /dev/sdb menjadi partisi ke-4 dengan flag LVM. Pastikan titik awal (start) sesuai dengan titik akhir partisi ke-3 (111GB pada output parted /dev/sdb unit GB print):

parted -a optimal /dev/sdb mkpart primary 111GB 100%
parted /dev/sdb set 4 lvm on
partprobe /dev/sdb

Verifikasi:

parted /dev/sdb unit GB print

Pastikan baris nomor 4 muncul mulai dari 111GB hingga 4000GB dengan flag lvm.

2. Membuat Physical Volume (PV) & Volume Group (vg_orthanc)

Inisialisasi partisi sisa disk OS (/dev/sdb4) dan seluruh disk kosong (/dev/sda tanpa perlu dipartisi) menjadi Physical Volume, lalu satukan ke dalam Volume Group vg_orthanc:

pvcreate /dev/sdb4 /dev/sda
vgcreate vg_orthanc /dev/sdb4 /dev/sda

Verifikasi:

vgs

Pastikan vg_orthanc terdaftar dengan PV = 2 dan total VSize sekitar 7.17t.

3. Membagi Menjadi 2 Logical Volume (Database & DICOM)

Buat dua Logical Volume secara terpisah di dalam vg_orthanc:

# 1. LV Database MySQL/Percona (100 GB)
lvcreate -L 100G -n lv_mysql_orthanc vg_orthanc

# 2. LV Storage DICOM Orthanc (98% dari sisa ruang bebas)
lvcreate -l 98%FREE -n lv_orthanc vg_orthanc

Verifikasi:

lvs

Pastikan lv_mysql_orthanc (100.00g) dan lv_orthanc (<6.94t) berstatus aktif (-wi-a-----).

4. Mengecek Sisa Cadangan 2% di Volume Group

Penggunaan 98%FREE menyisakan sekitar 2% ruang bebas (free extents) di dalam Volume Group. Cadangan ini berfungsi untuk membuat LVM snapshot darurat atau memperbesar ukuran lv_mysql_orthanc sewaktu-waktu tanpa perlu mengecilkan partisi DICOM.

Untuk melihat secara pasti berapa GB sisa ruang tersebut:

vgs --units g

Atau untuk tampilan detail PE (Physical Extents):

vgdisplay vg_orthanc | grep -E "VG Size|Alloc PE|Free  PE"

Pada kolom VFree (atau baris Free PE / Size), akan terlihat kapasitas cadangan sekitar 144.60g (~144.6 GiB).

5. Format Filesystem XFS & Buat Direktori Mount

Orthanc menyimpan jutaan file DICOM kecil hingga menengah dalam struktur direktori heksadesimal bercabang (00 hingga ff). XFS sangat direkomendasikan dibanding ext4 karena performa penanganan jutaan inode yang jauh lebih cepat serta dukungan ekspansi kapasitas secara online yang stabil.

mkfs.xfs -L mysql_orthanc /dev/vg_orthanc/lv_mysql_orthanc
mkfs.xfs -L orthanc_data /dev/vg_orthanc/lv_orthanc

mkdir -p /mnt/mysql-orthanc
mkdir -p /mnt/orthanc-data

Ambil masing-masing UUID perangkat menggunakan blkid:

blkid /dev/vg_orthanc/*

6. Pasang Permanen di /etc/fstab & Set Permission

Daftarkan kedua UUID ke dalam /etc/fstab dengan opsi noatime (mencegah penulisan timestamp akses setiap kali gambar dibuka) dan logbufs=8 untuk mengoptimalkan performa jurnal XFS:

UUID=<uuid-lv-mysql-orthanc>   /mnt/mysql-orthanc  xfs  defaults,noatime,logbufs=8  0  2
UUID=<uuid-lv-orthanc>         /mnt/orthanc-data   xfs  defaults,noatime,logbufs=8  0  2

Terapkan konfigurasi mount dan atur kepemilikan (ownership) direktori sesuai dengan UID kontainer Docker (UID 999 untuk MySQL/Percona dan UID 1000 untuk osimis/orthanc):

systemctl daemon-reload
mount -a

chown -R 999:999 /mnt/mysql-orthanc
chown -R 1000:1000 /mnt/orthanc-data

Verifikasi Akhir:

df -hT /mnt/mysql-orthanc /mnt/orthanc-data

Pastikan kedua direktori ter-mount sebagai xfs dengan kapasitas 100G dan 7.0T.

Bonus: Ekspansi Kapasitas di Masa Depan (Tanpa Downtime)

Ketika kapasitas penyimpanan DICOM mulai penuh dan Anda menambahkan Virtual Disk baru (misal terbaca sebagai /dev/sdc), perluasan kapasitas dapat dilakukan secara online tanpa mematikan kontainer Orthanc:

pvcreate /dev/sdc
vgextend vg_orthanc /dev/sdc
lvextend -l +98%FREE -r /dev/vg_orthanc/lv_orthanc

Flag -r (--resizefs) akan otomatis menjalankan xfs_growfs secara langsung sehingga kapasitas baru langsung terbaca oleh sistem.

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.