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.