Smartmontools dan Dell RAID di FreeBSD
Tanpa 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.