Menggunakan Fasilitas Software RAID di Linux

Ini ada artikel bagus yang langsung aku salin dari majalan CHIP, kenapa saya copi semua ?, karena artikelnya benar benar bagus banget. Untuk sumber asli, alamat lengkapnya ada di http://www.chip.co.id/linux/praktik-menggunakan-fasilitas-software-raid-di-linux.html berikut isi artikel tersebut:

Implementasi Software RAID di Linux

Bagaimana cara memaksimalkan kinerja disk sekaligus menjamin integritas data di dalamnya? Jawabannya adalah gunakan RAID!

Mungkin Anda sering mendengar istilah RAID saat membeli motherboard atau saat melakukan setting PC server. Apa sebenarnya RAID itu? Ini adalah singkatan dari Redundant Array of Inexpensive Disk atau kalau di-Indonesiakan kira-kira maknanya ‘kumpulan disk berharga terjangkau yang saling menunjang”. Terjemahan ini memang tidak benar-benar pas, tetapi sudah menggambarkan dua sifat utama RAID:

1. Terdiri atas kumpulan hard disk biasa, bukan dibentuk dari disk khusus atau berharga sangat mahal.

2. RAID dibuat untuk meningkatkan performa baca-tulis dan tingkat keamanan data.

Poin 2 inilah yang paling menarik untuk dibahas karena inilah alasan utama mengapa seseorang ingin menggunakan konfigurasi RAID. Untuk memahaminya, kita harus terlebih dahulu mempelajari macam-macam jenis RAID:

a) RAID 0, sering disebut striping without parity. Data akan ditulis merata pada semua partisi disk yang menjadi anggota RAID . Konfigurasi ini bisa diandaikan seperti seseorang yang memiliki bola biliar dengan nomor 1 sampai dengan 10. Nomor ganjil masuk ke keranjang berwarna biru dan nomor genap masuk ke keranjang warna merah.

Dengan susunan ini, jika dua orang ditugaskan mengambil bola nomor 1 sampai dengan 6, masing-masingnya dapat segera mengambil tiga bola dari masing-masing keranjang. Tiap orang hanya boleh memakai tangan kanan (dikondisikan mirip seperti head hard disk yang cuma satu) yang bergerak secara acak membaca data. Bisa Anda bayangkan bahwa pekerjaan ini menjadi dua kali lebih cepat dibanding dikerjakan hanya oleh satu orang.

b) RAID 1, dikenal dengan nama mirroring. Data akan ditulis sama persis ke semua anggota RAID. Keuntungan dari pola ini adalah jika terjadi kerusakan pada salah satu partisi anggota RAID, maka Anda bisa langsung menggunakan data cadangan di partisi lainnya. Hal ini berbeda dengan RAID 0 karena kerusakan salah satu partisi anggota akan menyebabkan kegagalan baca-tulis secara keseluruhan.

Kembali ke analogi sebelumnya, RAID 1 bertindak menduplikasi 10 bola yang ada sehingga ada 20 bola. Ada 10 bola yang masuk ke satu keranjang dan sisanya ke keranjang lainnya. Apabila 10 bola di keranjang biru rusak, maka 10 bola di keranjang merah bisa langsung digunakan untuk bermain biliar.

c) RAID 5, biasa disebut striping with parity. Pada dasarnya, konfigurasi ini mirip seperti RAID 0, hanya saja sekarang ada tambahan suatu data pengaman yang disebut parity. Parity ini memungkinkan struktur RAID dipulihkan seperti semula jika salah satu partisi rusak.

Apabila diringkas, tingkat keamanan data yang paling maksimal ditawarkan oleh RAID 1. Pengguna yang menginginkan peningkatan performa baca-tulis sebaiknya memilih RAID 5. Secara implisit, keuntungan penggunaan RAID baru terasa jika Anda menggunakan lebih dari satu disk (bisa bertipe Parallel ATA atau Serial ATA). Alasannya cukup sederhana, jika hanya satu disk yang terlibat, head akan bergerak maju-mundur (saat menulis atau membaca) dalam interval waktu yang singkat sehingga malah menurunkan kinerja. Dengan banyaknya disk, data akan bisa diakses secara paralel dan independen.

Raid 1: Pada RAID 1, data ditulis secara identik ke semua partisi array.

Sekarang Anda dapat mulai praktik penggunaan RAID. Anda disarankan menggunakan distro Linux terbaru, misalnya Fedora 6 atau 7, Ubuntu 7.04 atau 7.10, OpenSuSE 10.3, dan seterusnya. Apabila tidak bisa menggunakan distro baru, setidaknya gunakan kernel versi terbaru (2.6.23.13 saat tulisan ini dibuat). Ini dimaksudkan agar dukungan RAID benar-benar maksimal dan sesedikit mungkin mengandung kesalahan program.

Hal ini patut dimaklumi karena fasilitas RAID masih aktif dikembangkan. Pada penulisan ini, pengujian mengikuti prosedur berbasis distro Fedora 7 yang menggunakan kernel 2.6.21-1.3194. Seperti biasa, prompt $ berarti perintah dikerjakan sebagai user nonroot dan prompt # berarti sebagai root.

Raid 5: RAID 5 agak berbeda karena data disebar ke seluruh partisi.

Persiapan Instan

Langkal awal dimulai dengan membuat konfigurasi mirroring. Di sini, diasumsikan ada dua hard disk, masing-masing sebagai primary master dan primary slave. Pada distro terkini, mereka dikenali dengan nama /dev/sda dan /dev/sdb. Di samping itu, periksa apakah paket mdadm sudah ter-install:

# rpm -qa | grep mdadm

mdadm-2.6.1-4.fc7

Karena mirroring membutuhkan minimal dua partisi yang sama besar, perlu disiapkan dulu dua partisi kosong. Kenapa harus kosong? Karena jika partisi ini sudah berisi data (dalam arti sudah diformat dan ada file di dalamnya), informasi tersebut akan ditimpa oleh informasi RAID.

Raid 5: Status awal RAID setelah terbentuk. Perhatikan status “sync” di semua

Dengan kata lain, data Anda sebelumnya menjadi tidak dapat diakses lagi! Catatan penting lainnya adalah semua partisi yang terlibat harus berukuran sama persis. Apabila tidak sama, driver RAID akan mengambil patokan ukuran partisi terkecil. Hal ini akan lebih jelas setelah kita jalani percobaan pertama.

Pada disk pertama, buat partisi berukuran 500 MB:

# parted /dev/sda mkpart logical 20000

20500

Hal yang sama untuk disk kedua:

# parted /dev/sdb mkpart logical 15000

15500

Informasikan adanya perubahan partisi agar segera dikenali:

# partprobe

Sesuaikan perintah di atas menurut kondisi struktur partisi sebenarnya. Partisi bisa berupa partisi primary maupun logical. Proses format tidak dilakukan pada tahap ini, melainkan setelah device RAID terbentuk. Perintah berikut akan menjadikan dua partisi ini (dinamakan sda3 dan sdb3) sebagai anggota RAID:

# mdadm -C /dev/md0 -l 1 -n 2 /dev/sda5

/dev/sdb5 t

Arti dari perintah di atas adalah:

-C untuk membuat device RAID sesuai dengan parameter yang diberikan. Dalam hal ini digunakan /dev/md0. Nama “md” adalah konvensi untuk perangkat RAID.

-l menentukan tipe RAID yang dipakai. Angka 1 berarti konfigurasi mirroring yang dipakai.

-n menunjukkan jumlah partisi yang dimasukkan dalam struktur RAID. Logikanya, angka ini harus lebih besar dari 1 karena jelas tidak mungkin hanya dengan satu partisi bisa dilakukan mirroring/striping.

Berikutnya adalah nama-nama partisi yang dilibatkan. Isikan sesuai nama-nama partisi yang telah disiapkan. Setelah perintah di atas diberikan, file device RAID akan terbentuk dan siap digunakan. Untuk memastikannya, periksa output dari file /proc/mdstat:

# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sda5[1] sdb5[0]

409472 blocks [2/2] [UU]

[==================>..] resync

= 93.2% (382848/409472) finish=0.0min

speed=9475K/sec

unused devices: <none>

Output di atas menandakan sistem RAID sedang melakukan inisialisasi untuk memastikan kedua partisi berada pada kondisi yang 100% sama. Tidak lama kemudian, output akan berganti menjadi seperti ini:

$ cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sda5[1] sdb5[0]

XXXXXX blocks [2/2] [UU]

unused devices: <none>

Aktif saat Booting: Pada bagian ini dapat diketahui bahwa bahwa device RAID telah terdeteksi dan disetup saat booting.

Selanjutnya, format device baru ini dengan perintah:

# mkfs.ext3 -v /dev/md0

mkf#s.e#xt3 -v /dev/md0

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

XXXXXX inodes, XXXXXX blocks

XXXXX blocks (5.00%) reserved for the

super user

….

Writing inode tables: 0/50

….

done

Creating journal (8192 blocks): done

Writing superblocks and filesystem

accounting information: done

Seperti Anda perhatikan, proses formatnya tidak berbeda dengan proses format device biasa. Sekarang Anda cukup melakukan proses mount ke suatu direktori dan siap membaca-tulis ke perangkat RAID 1 tersebut.

# mkdir /mnt/raid

# mount /dev/md0 /mnt/raid

# ls -al /mnt/raid/

drwxr-xr-x 3 root root 1024 2008-01-17

15:21 .

drwxr-xr-x 3 root root 4096 2008-01-14

03:47 ..

drwx—— 2 root root 12288 2008-01-17

15:21 lost+found

# df -h /mnt/raid

Filesystem Size Used Avail Use%

Mounted on

/dev/md0 500M 11M 489M 2%

/mnt/raid

Mount point /mnt/raid/ dapat Anda ganti dengan direktori lain yang Anda kehendaki. Kini, Anda telah sukses menyiapkan RAID! secara instam. Sedikit “quiz” untuk Anda, mengapa ukuran partisi /dev/md0 hanya 500 MB dan bukan 1000MB? (jawaban pada akhir tulisan).

Mengaktifkan RAID Otomatis Setiap Booting

Sebenarnya masih ada satu tahapan konfigurasi lagi yang perlu dilakukan sebelumnya me-restart PC. Apabila sistem Linux di-reboot tanpa melakukan tahapan ini, konfigurasi RAID-nya seperti hilang. File /proc/mdstat juga tidak menunjukkan adanya device RAID aktif:

$ cat /proc/mdstat

Personalities : [raid1]

unused devices: <none>

Apa yang sebenarnya terjadi? Di saat fase inisialisasi, salah satu yang dilakukan sistem Linux adalah melakukan pengecekan apakah ada file yang berisi daftar device RAID beserta partisi penyusunnya. File yang perlu Anda buat adalah /etc/mdadm.conf. Apabila device RAID yang telah dibuat didaftarkan, maka isi file menjadi:

# cat /etc/mdadm.conf

ARRAY /dev/md0 devices=/dev/sda5,/dev/

sdb5

Penjelasan format di atas cukup sederhana, device RAID md0 terdiri atas partisi sda5 dan sdb5. Sekarang coba reboot Linux dan periksa sekali lagi isi file /proc/mdstat. Otomatis terkonfigurasi bukan? Anda cukup meng-update isi /etc/fstab dengan baris seperti ini agar device RAID tersebut juga langsung di-mount:

/dev/md0 /mnt/raid ext3

defaults 1 2.

Mengganti Anggota RAID yang Rusak

Siapa pun tidak menghendaki kerusakan hard disk, tetapi inilah inti mengapa RAID digunakan. Kita anggap saja partisi sdb5 mengalami kerusakan akibat bad sector. Untuk memastikan kerusakan semacam ini tidaklah mudah, tetapi program badblocks bisa membantu Anda.

Diulang : Penggantian partisi yang rusak akan memaksa terjadinya proses sinkronisasi ulang.

Pertama, unmount device RAID. Sebelumnya, simpan dulu semua file yang sedang diedit dan hentikan program yang membaca-tulis ke RAID:

# umount /dev/md0

Berikutnya cek adanya bad sector:

# badblocks -s -v /dev/md0

Apabila terlihat ada pesan yang mengindikasikan adanya kesalahan baca, pengecekan per­lu dilakukan untuk mengetahui partisi mana yang sebenarnya perlu diperbaiki. Namun sebelumnya, hentikan dulu aktivitas RAID:

# mdadm –stop /dev/md0

Barulah ulangi operasi pengecekan bad sector ke setiap partisi:

# badblocks -s -v /dev/sda5

# badblocks -s -v /dev/sdb5

Diasumsikan setelah pengecekan, diketahui sdb5 rusak parah. Anda punya beberapa pilihan, mengganti hard disk atau membuat partisi baru di disk yang sama tetapi dengan ukuran yang kurang lebih sama. Karena kemungkinan besar Anda menggunakan sistem PC desktop yang biasanya tidak dilengkapi fasilitas hot swap, maka Anda cenderung memilih membuat partisi baru pada disk yang sama.

Catatan: menghentikan RAID boleh diabaikan jika Anda harus tetap melayani operasi baca-tulis, namun cara ini bukan pilihan terbaik.

Misalnya partisi baru yang dibuat bernama sdb6 dengan ukuran 500 MB dan Anda harus cepat kembali mengaktifkan RAID agar bisa kembali bekerja. Untuk itu, aktifkan kembali RAID:

# mdadm -A –run /dev/md0 /dev/sda5

Option –run harus digunakan mengingat Anda memerintahkan RAID 1 aktif, tetapi hanya dengan satu partisi anggota array (normalnya harus ada dua).

# mount /dev/md0 /mnt/raid

Saat ini Anda dapat kembali bekerja membaca-tulis data yang tersimpan. Berikutnya tambahkan partisi sdb6 secara on-the-fly (sambil terus berjalan):

# mdadm –add /dev/md0 /dev/sdb6

Dapat dilihat adanya progress bar yang menunjukkan proses perbaikan. Pada fase ini, data di partisi sda5 dan sdb6 disinkronisasikan sehingga kembali identik. Relatif terhadap ukuran partisi, tidak lama kemudian sinkronisasi selesai dan RAID bisa kembali bekerja 100% normal.

“Ah, saya perlu yang lebih cepat. Mematikan RAID tidak bisa saya toleransi!” Tuntutan seperti ini memang memusingkan, tetapi lagi-lagi RAID memang dibuat untuk memenuhi kebutuhan kritis seperti ini. Jika memang demikian, langkahnya menjadi sedikit berbeda.

Berangkat dari asumsi yang mirip bahwa partisi sdb5 rusak dan Anda sudah membuat partisi sdb6 yang sama besarnya. RAID tidak perlu dihentikan, dan hanya perlu melakukan:

# mdadm –fail /dev/md0 /dev/sdb5

Pada titik ini, partisi sdb5 secara efektif tidak lagi terpakai dan dapat Anda singkirkan dari array:

# mdadm –remove /dev/md0 /dev/sdb5

Mungkin Anda bertanya, “Apa saya aman melakukan hal seperti ini saat saya menulis sesuatu ke RAID?” Secara umum dapat dikatakan, 99,99% persen langkah ini aman asalkan dalam saat yang hampir bersamaan, sda5 juga sedang tidak mengalami kerusakan (apapun sebabnya).

Sekarang anda tinggal memasukkan partisi sdb6:

# mdadm –add /dev/md0 /dev/sdb6

Proses recovery akan dimulai. Sambil menunggu, Anda tetap bisa membaca-tulis tanpa terhenti sama sekali. Sangat membantu bukan?

Terakhir yang perlu dilakukan adalah meng-update /etc/mdadm.conf agar merefleksikan kondisi terkini:

ARRAY /dev/md0 devices=/dev/sda5,/dev/

sdb6

Cara ini mungkin tidak efektif karena bisa saja Anda salah ketik dan tanpa sengaja memasukkan nama partisi yang salah. Cara yang lain yang lebih cepat dan akurat adalah memerintahkan program mdadm untuk melakukan scanning dan memasukkan hasilnya sebagai entry di /etc/mdadm.conf:

# mdadm -Ebsc partitions > /etc/mdadm.

conf

Isi file konfigurasi akan menjadi sedikit lain:

# cat /etc/mdadm.conf

ARRAY /dev/md0 level=raid1 num-

devices=2 UUID=e22dec1a:88e263a1:

c88e430b:65d86d06

Parameter terakhir memang terlihat aneh. Pada dasarnya, ini adalah semacam tanda pengenal yang dituliskan pada setiap partisi hard disk yang terpasang di komputer Anda. Saat array RAID dibentuk setiap kali Linux diinisialisasi, tanda ini akan dicari untuk mencari tahu partisi mana saja yang menjadi anggota RAID (dalam hal ini /dev/md0). Dengan demikian, Anda tidak perlu mendaftar sendiri anggota partisi yang terlibat dalam suatu device RAID. Menjawab pertanyaan (quiz) yang disampaikan sebelumnya, karena bersifat mirroring, maka ukuran partisi efektif adalah sesuai besaran salah satu partisi yang terkecil.

Source: CHIP 03/2008

Author: Mulyadi, Penulis@CHIP.co.id