Smartmontools dan Dell RAID di FreeBSD

11 Jun 2012

FreeBSD LogoTanpa harus saya jelaskan berpanjanglebar seharusnya rekan-rekan administrator server sudah paham mengenai RAID. Dahulu fitur RAID dikembangkan untuk menyiasati kebutuhan ruang simpan jumbo dengan memanfaatkan harddisk-harddisk berkapasitas kecil yang dijadikan satu membentuk satu volume tunggal. Seiring dengan perkembangan model akses dan penyimpanan data, sistem RAID ditambahi dengan fitur pengaman data seperti pencerminan untuk memudahkan proses pemulihan data akibat kerusakan sistem operasi atau harddisk. Fitur-fitur RAID berkembang sesuai dengan model konfigurasi dan mekanisme penyimpanan data ke harddisk yang dibedakan ke beberapa level RAID. Konsep tersebut jelas sangat menarik untuk administrator sistem karena dapat memudahkan pekerjaan mereka. Yang menjadi masalah adalah bagaimana mengetahui kondisi harddisk yang telah terbungkus oleh konfigurasi RAID?

SMART dan RAID

Kasus tersebut saya dapatkan di beberapa server DELL di kantor yang menggunakan perangkat RAID Dell PERC 5/i atau 6/i. Mesin Dell tersebut mengharuskan tiap harddisk SAS harus diinisialisasi sebagai perangkat RAID, entah sebagai RAID0 atau harddisk tunggal atau RAID2/5 dengan tiga harddisk atau lebih. Jika tidak diinisialisasi sebagai RAID, harddisk-harddisk tersebut tidak akan dikenali oleh sistem operasi. Secara standar FreeBSD akan mengenali konfigurasi RAID yang disusun menggunakan perangkat manajer Dell PERC di BIOS melalui driver mfi.ko. Hanya saja karena harddisk sudah terbungkus oleh konfigurasi RAID maka perangkat aslinya tidak terekspos ke kernel. Hal ini berarti saya tidak dapat menggunakan perangkat monitoring S.M.A.R.T. seperti smartmontools karena RAID tidak memiliki SMART. RAID kan volume virtual, sedangkan SMART mengawasi perangkat nyatanya.

Dell PERC 5/i atau 6/i dan MFIP

Untungnya Dell PERC menyediakan fitur tambahan yaitu perangkat akses ke harddisk yang berdiam di belakang RAID. Jadi semacam lubang intipan, kira-kira begitu. Lebih mujur lagi, FreeBSD sudah menyediakan driver untuk mengaktifkan perangkat tersebut melalui driver mfip.ko. Jadi saya tinggal memuat driver tersebut setelah driver mfi.ko:

# echo 'mfi_load="YES"' >> /boot/loader.conf
# echo 'mfip_load="YES"' >> /boot/loader.conf

Untuk memuat driver secara langsung:

# kldload mfi
# kldload mfip

Dan hasil dari dmesg mengkonfirmasikan perangkat akses tersebut:

# dmesg | grep "mfi"
mfi0:  mem 0xd80f0000-0xd80fffff,0xfc5c0000-0xfc5dffff irq 78 at device 14.0 on pci2
mfi0: Megaraid SAS driver Ver 3.00 
mfi0: 12289 (392693900s/0x0020/info) - Shutdown command received from host
mfi0: 12290 (boot + 0s/0x0020/info) - Firmware initialization started (PCI ID 0015/1028/1f03/1028)
mfi0: 12291 (boot + 0s/0x0020/info) - Firmware version 1.03.40-0316
mfi0: 12292 (boot + 18s/0x0008/info) - Battery Present
mfi0: 12293 (boot + 18s/0x0020/info) - Package version 5.2.1-0067
mfi0: 12294 (boot + 45s/0x0004/info) - Enclosure (SES) discovered on PD 08(e1/s255)
mfi0: 12295 (boot + 45s/0x0002/info) - Inserted: PD 08(e1/s255)
mfi0: 12296 (boot + 45s/0x0002/info) - Inserted: PD 08(e1/s255) Info: enclPd=08, scsiType=d, portMap=00, sasAddr=5001c030d91d6300,0000000000000000
mfi0: 12297 (boot + 45s/0x0002/info) - Inserted: PD 00(e1/s0)
mfi0: 12298 (boot + 45s/0x0002/info) - Inserted: PD 00(e1/s0) Info: enclPd=08, scsiType=0, portMap=01, sasAddr=500000e018770872,0000000000000000
mfi0: 12299 (boot + 45s/0x0002/info) - Inserted: PD 01(e1/s1)
mfi0: 12300 (boot + 45s/0x0002/info) - Inserted: PD 01(e1/s1) Info: enclPd=08, scsiType=0, portMap=02, sasAddr=500000e0187d1262,0000000000000000
mfi0: 12301 (boot + 45s/0x0002/info) - Inserted: PD 02(e1/s2)
mfi0: 12302 (boot + 45s/0x0002/info) - Inserted: PD 02(e1/s2) Info: enclPd=08, scsiType=0, portMap=04, sasAddr=5000c500076d2751,0000000000000000
mfi0: 12303 (392709677s/0x0020/info) - Time established as 06/11/12  6:01:17; (46 seconds since power on)
mfi0: 12304 (392709734s/0x0008/info) - Battery temperature is normal
mfi0: 12305 (392709734s/0x0008/FATAL) - Battery needs replacement - SOH Bad
mfi0: 12306 (392709734s/0x0008/WARN) - Current capacity of the battery is below threshold
mfi0: 12307 (392709734s/0x0008/WARN) - BBU disabled; changing WB virtual disks to WT
mfi0: 12308 (392709734s/0x0001/info) - Policy change on VD 00/0 to [ID=00,dcp=01,ccp=00,ap=0,dc=0,dbgi=0] from [ID=00,dcp=01,ccp=01,ap=0,dc=0,dbgi=0]
mfi0: [ITHREAD]
mfi0: 12309 (392709734s/0x0001/info) - Policy change on VD 01/1 to [ID=01,dcp=01,ccp=00,ap=0,dc=0,dbgi=0] from [ID=01,dcp=01,ccp=01,ap=0,dc=0,dbgi=0]
mfid0:  on mfi0
mfid0: 69376MB (142082048 sectors) RAID volume 'vd1' is optimal
mfid1:  on mfi0
mfid1: 139392MB (285474816 sectors) RAID volume 'vd2' is optimal
Trying to mount root from ufs:/dev/mfid0s1a
mfi0: 12310 (392709799s/0x0008/info) - Battery started charging
mfi0: 12311 (392710969s/0x0008/info) - Battery charge complete
mfip0:  on mfi0
ses0 at mfi0 bus 0 scbus0 target 8 lun 0

SMARTMONTOOLS

Harddisk asli dibalik RAID yang dikenali sebagai perangkat mfi tersebut diberi nama /dev/passX oleh FreeBSD. Kemujuran berikutnya adalah, sesuai dengan dokumentasi smartmontools untuk RAID, smartmontools dapat menggunakan perangkat bypass tersebut secara langsung tanpa perlu konfigurasi macam-macam:

# smartctl --scan
/dev/acd0 -d ata # /dev/acd0, ATA device
/dev/pass0 -d scsi # /dev/pass0, SCSI device
/dev/pass1 -d scsi # /dev/pass1, SCSI device
/dev/pass2 -d scsi # /dev/pass2, SCSI device
/dev/ses0 -d scsi # /dev/ses0, SCSI device

Jadi saya tinggal mengaktifkan smartd (smart daemon) dari smartmontools:

echo 'smartd_enable="YES"' >> /etc/rc.conf

Kemudian saya tinggal mengedit sedikit konfigurasi smartd.conf supaya melakukan pengecekan SMART terhadap harddisk yang saya inginkan saja. Dalam kasus ini, saya hanya ingin mendapatkan laporan mengenai kondisi harddisk penyimpan data yaitu pass0, pass1, dan pass2. Saya tidak perlu mendapatkan data mengenai status CD/DVD-ROM. Saya juga menambahkan opsi untuk mengirimkan data-data hasil pengecekan ke email saya.

/dev/pass0 -d scsi -m aku@email.ku
/dev/pass1 -d scsi -m aku@email.ku
/dev/pass2 -d scsi -m aku@email.ku

Setelah itu saya tambahkan baris berikut ke file /etc/periodic.conf supaya SMART Daemon mengecek dan mengirimkan data-data kondisi harddisk ke email saya setiap hari (berlebihan gak ya?)

daily_status_smart_devices="/dev/pass0 /dev/pass1 /dev/pass2"

Terakhir, saya jalankan SMART Daemon menggunakan skrip init-nya:

/usr/local/etc/rc.d/smartd start

Selesai. Sekarang tinggal menunggu laporan di email.

Selamat mencoba.