Chapter sebelumnya menutup dengan catatan jujur: kolam LVM linear tetap roboh bila salah satu anggotanya mati, karena data tersebar ke semua disk. RAID (Redundant Array of Independent Disks) adalah jawaban untuk kelemahan itu: beberapa disk disatukan menjadi satu perangkat logis yang tahan kehilangan satu-dua anggota tanpa kehilangan data, atau berjalan lebih cepat karena bebannya tersebar. Di Linux, pekerjaan ini ditangani driver md (multiple devices) di dalam kernel, yang dikelola dari userspace oleh alat mdadm. Chapter ini memetakan level RAID 0/1/5/6/10 beserta hitungan kapasitasnya, membuat array dengan mdadm, membaca laporan /proc/mdstat, lalu menangani array yang degraded — dan menutup mitos terbesarnya: RAID bukan backup.
Level RAID: Menukar Kapasitas dengan Ketahanan #
Setiap level RAID adalah tawar-menawar antara kapasitas, kecepatan, dan ketahanan. Tabel berikut merangkum lima level yang paling sering dipakai:
| Level | Susunan | Disk minimal | Toleransi mati | Ruang efektif (4 disk 1 TB) |
|---|---|---|---|---|
| 0 | stripe murni | 2 | tidak ada | 4 TB |
| 1 | mirror | 2 | 1 disk | 2 TB |
| 5 | stripe + parity tersebar | 3 | 1 disk | 3 TB |
| 6 | stripe + parity ganda | 4 | 2 disk | 2 TB |
| 10 | mirror lalu distripe | 4 | 1 per pasangan mirror | 2 TB |
RAID 0 memecah data menjadi potongan-potongan yang berselang-seling ke semua disk, jadi kecepatan baca-tulis naik — tetapi satu disk mati berarti seluruh data hilang. RAID 1 menulis salinan identik ke dua disk, menuang separuh kapasitas demi ketahanan paling sederhana. RAID 5 menambahkan parity: satu blok hitung-hitungan untuk tiap kelompok data, disebar bergantian ke semua disk sehingga tidak ada satu disk yang jadi leher botol. RAID 6 menggandakan parity sehingga dua disk boleh mati bersamaan — lazim untuk array besar yang rebuild-nya lama. RAID 10 menggabungkan keduanya: data di-mirror dulu ke pasangan, lalu tiap pasangan distripe — favorit database karena kecepatan tulisnya tidak diikuti hitungan parity.
Parity RAID 5 bekerja lewat operasi XOR (^). Sifat XOR: setiap anggota bisa dihitung ulang dari dua anggota sisanya, dan sifat itu bisa kita buktikan langsung dengan aritmetika bash:
echo "paritas dari blok 65 dan 66: $((65 ^ 66))"
echo "rekonstruksi blok 65 dari blok 66 dan paritas: $((66 ^ 3))"Output yang Dihasilkan:
paritas dari blok 65 dan 66: 3
rekonstruksi blok 65 dari blok 66 dan paritas: 65Angka 65 dan 66 adalah kode ASCII huruf A dan B. Baris pertama membuktikan paritas keduanya adalah 3; baris kedua menghitung ulang blok 65 dari blok 66 ditambah paritas — hasilnya kembali 65. Pada RAID 5 nyata, kernel mengerjakan operasi yang sama terhadap ribuan blok per detik: bila sebuah disk mati, setiap blok yang hilang direkonstruksi dari data dua disk yang tersisa. RAID 6 menumpuk perhitungan parity kedua sehingga dua disk boleh mati sekaligus.
Simulasi Mirror: Selamat Saat Satu Anggota Rusak #
Mekanisme mirror juga bisa kita rasa kan pada file biasa. Kita buat satu blok data, salin ke dua “disk” bayangan, lalu merusak salah satunya:
printf 'buku besar keuangan 2026\n' > blok-data
cp blok-data disk-kiri.img
cp blok-data disk-kanan.img
printf 'zzz' | dd of=disk-kanan.img bs=1 seek=3 conv=notrunc 2>/dev/null
cmp -s blok-data disk-kiri.img && echo "disk-kiri utuh: data masih terbaca"
cmp -s blok-data disk-kanan.img || echo "disk-kanan rusak: anggota yang mati"Output yang Dihasilkan:
disk-kiri utuh: data masih terbaca
disk-kanan rusak: anggota yang matiBedah baris per barisnya:
- Baris 1 (
printf ... > blok-data): membuat data sumber — satu baris pembukuan fiktif. - Baris 2-3 (
cp ...): menyalin data yang sama ke dua file, persis pekerjaan RAID 1 pada setiap tulisan. - Baris 4 (
printf 'zzz' | dd ...): menimpa tiga byte di tengahdisk-kanan.img— mensimulasikan bad sector pada satu anggota. - Baris 5-6 (
cmp -s ...): membandingkan kedua salinan dengan sumbernya;cmp -sdiam-diam mengembalikan status sukses atau gagal.
Hasilnya inti dari mirror: satu anggota rusak, data tetap utuh di anggota yang lain. Array RAID 1 sungguhan mengerjakan perbandingan ini otomatis di level blok, dan ketika array membaca blok yang rusak, kernel md cukup mengambil salinan dari pasangannya — aplikasi tidak pernah tahu ada disk yang bermasalah.
Membuat Array dengan mdadm #
Di server sungguhan dengan tiga disk kosong, RAID 5 dibangun dua perintah:
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
sudo mkfs.ext4 /dev/md0Bedah baris per barisnya:
- Baris 1 (
mdadm --create /dev/md0 ...): membuat array baru bernama/dev/md0;--level=5memilih susunan stripe-plus-parity, dan--raid-devices=3menyatakan jumlah anggota aktif. mdadm menulis metadata ke setiap disk lalu mulai membangun array di latar belakang. - Baris 2 (
mkfs.ext4 /dev/md0): memformat array seolah-olah satu disk biasa — dari sisi filesystem,/dev/md0memang satu perangkat 2 TB (untuk tiga disk 1 TB).
Anggota array boleh disk utuh atau partisi; pada instalasi klasik, partisi diberi tipe Linux RAID supaya terlihat jelas saat audit. Setelah array jadi, langkah wajib berikutnya adalah menyimpan konfigurasinya agar array terakit otomatis saat boot:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.confBaris tersebut menyalin identitas array ke file konfigurasi mdadm; tanpa baris itu, urutan /dev/md0 bisa berubah nama setelah reboot. Selanjutnya /dev/md0 tinggal di-mount dan didaftarkan di fstab
seperti perangkat blok lain. Bacaan lengkap opsinya ada di mdadm(8)
dan dokumen md di kernel
.
Memantau Array dan Menangani Degraded #
Kernel menuliskan kondisi setiap array ke file /proc/mdstat — file inilah layar pemantauan paling cepat. Berikut contoh tampilan /proc/mdstat pada RAID 5 yang baru dibuat, saat sedang melakukan sinkronisasi awal:
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid5 sdd[3] sdb[1] sdc[0]
209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[===>.................] resync = 15.2% (31849477/104792064) finish=7.9min speed=252012K/sec
unused devices: <none>Bagian paling penting adalah [3/3] [UUU]: tiga dari tiga anggota aktif, dan tiga huruf U berarti semuanya sehat. Bila satu disk gagal, tampilan berubah menjadi [2/3] [U_U] — status degraded. Baris resync hanya muncul saat array sedang membangun atau membangun ulang dirinya, lengkap dengan persentase dan estimasi selesai. Untuk laporan yang lebih kaya, mdadm --detail /dev/md0 menguraikan keadaan per array; berikut contoh tampilannya:
/dev/md0:
Version : 1.2
Raid Level : raid5
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 3
Total Devices : 3
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0Kolom State adalah ringkasan nasib array: clean berarti sehat, degraded berarti kehilangan anggota namun masih berfungsi, dan recovering berarti sedang rebuild. Penanganan disk yang rusak selalu tiga langkah — tandai gagal, keluarkan, masukkan pengganti:
sudo mdadm --fail /dev/md0 /dev/sdb
sudo mdadm --remove /dev/md0 /dev/sdb
sudo mdadm --add /dev/md0 /dev/sdbPerintah --fail menandai /dev/sdb sebagai gagal (aman bila disk memang sudah aneh bunyinya), --remove mengeluarkannya dari keanggotaan, dan --add memasukkan disk pengganti yang langsung diisi ulang oleh proses rebuild — kemajuannya bisa dipantau di /proc/mdstat. Disk cadangan juga bisa ditambahkan sebelum kegagalan terjadi; disk tersebut standby sebagai hot spare dan otomatis menggantikan anggota yang mati dalam hitungan detik. Terakhir, biasakan menjalankan scrub mingguan dengan echo check | sudo tee /sys/block/md0/md/sync_action agar parity diverifikasi berkala dan kerusakan senyap ketahuan sebelum terlambat.
RAID Bukan Backup #
Ini bagian yang paling sering disalahpahami. RAID menjawab tepat satu skenario bencana: media penyimpanan yang mati. RAID tidak melindungi dari rm -rf yang salah target, dari ransomware yang mengenkripsi seluruh isi array, dari kebakaran yang melelehkan semua disk sekaligus, maupun dari penimpaan file yang tidak disengaja — pada array aktif, setiap perubahan langsung tersalin ke semua anggota, termasuk perubahan yang merusak. Redundansi menjaga ketersediaan, sedangkan backup menjaga riwayat. Keduanya saling melengkapi dan tidak bisa saling menggantikan; merancang yang kedua adalah topik chapter Backup Strategies
.
Ketahanan array sepenuhnya bergantung pada kesehatan para anggotanya, dan disk jarang mati tanpa gejala. Chapter berikutnya memasang radar gejala itu: membaca telemetri SMART dari drive dengan smartctl, menyiapkan daemon smartd, dan mengenali tanda-tanda awal kegagalan sebelum array terpaksa degraded.