RAIDing dengan LVM vs MDRAID - pro dan kontra?

51

Dalam jawabannya atas pertanyaan "tipe serangan campuran" , HBruijn menyarankan menggunakan LVM untuk mengimplementasikan RAID vs MDRAID yang lebih standar.

Setelah sedikit diselidiki, tampaknya LVM juga mendukung fungsi RAID. Di masa lalu, saya telah menggunakan LVM di atas MDRAID, dan tidak menyadari sampai sekarang bahwa LVM juga mendukung fungsi RAID. Ini tampaknya perkembangan yang relatif baru, tetapi saya belum tahu persis kapan ini diterapkan.

Jadi, ini adalah cara alternatif untuk mengimplementasikan perangkat lunak RAID di Linux. Apa pro dan kontra dari dua pendekatan yang berbeda ini? Saya mencari perbandingan fitur antara kedua pendekatan sehingga orang dapat memutuskan mana yang lebih baik untuk mereka. Kesimpulan berdasarkan eksperimen (seperti pada, fitur ini tidak berfungsi sebaik fitur ini dan inilah alasannya) juga OK, asalkan Anda memasukkan data Anda dalam jawabannya.

Beberapa masalah khusus untuk diatasi:

  1. Misalkan saya ingin melakukan sw RAID + LVM (skenario umum). Haruskah saya menggunakan dukungan LVM untuk sw RAID dan karenanya menggunakan satu utilitas, bukan dua? Apakah pendekatan yang lebih terintegrasi ini memiliki kelebihan?
  2. Apakah dukungan LVM untuk sw RAID memiliki kekurangan yang signifikan dibandingkan dengan MDADM yang lebih matang? Secara khusus, seberapa stabil / bebas bug dukungan LVM untuk sw RAID? Tampaknya dukungan ini baru kembali ke 2011 (lihat di bawah), sedangkan MDADM jauh lebih tua. Juga, bagaimana cara membandingkannya dalam hal set fitur? Apakah ada kekurangan fitur yang signifikan dibandingkan dengan MDADM? Sebaliknya, apakah ia memiliki dukungan untuk fitur-fitur sw RAID yang tidak dimiliki MDADM?

CATATAN:

  1. Ada diskusi terperinci di http://www.olearycomputers.com/ll/linux_mirrors.html tapi saya tidak bisa mengetahui tanggal ditulisnya.

    Pertanyaan serupa pada Serverfault: linux LVM mirror vs MD mirror . Namun, pertanyaan ini ditanyakan pada 2010, dan jawabannya mungkin sudah ketinggalan zaman.

  2. Entri changelog untuk versi 2.02.87 - 12 Agustus 2011 telah

    Tambahkan configure --with-raid untuk segtype baru 'raid' untuk dukungan MD RAID 1/4/5/6

    Jadi, sepertinya dukungan RAID di LVM adalah sekitar 3 tahun.

Faheem Mitha
sumber
Satu keuntungan yang bisa saya pikirkan adalah menggunakan fungsi terkait HA yang tersedia untuk LVM.
Bratchley
1
@ JoelDavis Bisakah Anda menguraikan? Saya tidak tahu apa arti fungsi yang berhubungan dengan HA.
Faheem Mitha
Juga, ada keuntungan yang biasa Anda gunakan dengan volume logis, bukan mdvolume. Jadi, Anda memiliki lvextenddan pvmovetersedia untuk bergerak antar perangkat sedangkan dengan mdprosesnya jauh lebih manual tanpa manfaat yang jelas.
Bratchley
@ JoelDavis mungkin menulis jawaban?
Faheem Mitha
2
LVM selalu mendukung raid1 dan raid0. Baru-baru ini mereka membatalkan implementasi mereka sendiri dan bukannya secara internal menggunakan kode raid kepribadian md, membuka tingkat serangan lainnya.
psusi

Jawaban:

55

Seberapa dewasa dan penuh fitur LVM RAID?

LVM-RAID sebenarnya mdraid di bawah selimut. Ini pada dasarnya bekerja dengan membuat dua volume logis per perangkat RAID (satu untuk data, yang disebut "rimage"; satu untuk metadata, yang disebut "rmeta"). Ini kemudian meneruskan ke driver mdraid yang ada. Jadi hal-hal seperti menangani kesalahan pembacaan disk, I / O load balancing, dll. Harus cukup matang.

Itu kabar baiknya.

Alat

Anda tidak dapat menggunakannya mdadm(setidaknya, tidak dengan cara yang mudah¹) dan alat-alat RAID LVM sama sekali tidak matang. Misalnya, di Debian Wheezy, lvstidak dapat memberi tahu Anda status sinkronisasi RAID5. Saya sangat meragukan perbaikan dan pemulihan (terutama dari situasi "yang seharusnya tidak pernah terjadi!") Hampir sama baiknya dengan mdadm (dan saya secara tidak sengaja bertemu dengan salah satu dari mereka dalam pengujian saya, dan akhirnya menyerah untuk memulihkannya — pemulihan dengan mdadm akan mudah).

Terutama jika Anda tidak menggunakan versi terbaru dari semua alat, itu semakin buruk.

Fitur yang Hilang

Versi LVM-RAID saat ini tidak mendukung penyusutan ( lvreduce) volume logis RAID. Mereka juga tidak mendukung perubahan jumlah disk atau level RAID ( lvconvertmemberikan pesan kesalahan yang mengatakan belum didukung). lvextendtidak bekerja, dan bahkan dapat menumbuhkan level RAID yang mdraid hanya mendapatkan dukungan baru-baru ini, seperti RAID10 Dalam pengalaman saya, memperpanjang LV jauh lebih umum daripada menguranginya, jadi itu sebenarnya masuk akal.

Beberapa fitur mdraid lainnya tidak ada, dan terutama Anda tidak dapat menyesuaikan semua opsi yang Anda bisa dengan mdadm.

Pada versi yang lebih lama (seperti yang ditemukan di, misalnya, Debian Wheezy), LVM RAID juga tidak mendukung pertumbuhan. Misalnya, di Wheezy:

root@LVM-RAID:~# lvextend -L+1g vg0/root
Extending logical volume root to 11.00 GiB
Internal error: _alloc_init called for non-virtual segment with no disk space.

Secara umum, Anda tidak ingin menjalankan versi Wheezy.

Di atas adalah setelah Anda menginstalnya. Itu juga bukan proses yang sepele.

Masalah alat

Bermain dengan Jessie VM saya, saya memutus satu (hampir) disk. Itu berhasil, mesin tetap berjalan. lvsNamun, tidak memberikan indikasi susunan diturunkan. Saya memasang kembali disk, dan menghapus satu detik. Tetap berlari (ini raid6). Terlampir kembali, masih belum ada indikasi dari lvs. Saya berlari lvconvert --repairdi volume, itu mengatakan kepada saya itu baik-baik saja. Lalu saya menarik disk ketiga ... dan mesin mati. Masukkan kembali, reboot, dan sekarang tidak yakin bagaimana cara memperbaikinya. mdadm --force --assembleakan memperbaiki ini; keduanya tampaknya vgchangetidak lvchangememiliki opsi itu (lvchange menerima --force, tetapi tampaknya tidak melakukan apa-apa). Bahkan mencoba dmsetupuntuk langsung memberi makan tabel pemetaan ke kernel, saya tidak tahu bagaimana cara memulihkannya.

Juga, mdadmadalah alat khusus untuk mengelola RAID. LVM melakukan lebih banyak, tetapi rasanya (dan saya akui ini cukup subyektif) seperti fungsi RAID telah didorong di sana; itu tidak cukup pas.

Bagaimana Anda menginstal sistem dengan LVM RAID?

Berikut ini adalah garis besar singkat untuk menginstalnya di Debian Jessie atau Wheezy. Jessie jauh lebih mudah; perhatikan jika Anda akan mencoba ini pada Wheezy, baca semuanya terlebih dahulu ...

  1. Gunakan gambar CD lengkap untuk menginstal, bukan gambar netinst.

  2. Lanjutkan seperti biasa, pergi ke partisi disk, atur volume fisik LVM Anda. Anda dapat memakai /bootLVM-RAID (pada Jessie, dan Wheezy dengan beberapa pekerjaan yang dirinci di bawah).

  3. Buat grup volume Anda. Biarkan di menu LVM.

  4. Sedikit kesenangan pertama — installer tidak memiliki dm-raid.komodul yang dimuat, atau bahkan tersedia! Jadi Anda bisa mengambilnya dari paket linux-image yang akan diinstal. Beralih ke konsol (misalnya, Alt- F2) dan:

    cd /tmp
    dpkg-deb --fsys-tarfile /cdrom/pool/main/l/linux/linux-image-*.deb | tar x
    depmod -a -b /tmp
    modprobe -d /tmp dm-raid
    
  5. Pemasang tidak tahu cara membuat LVM-RAID LVs, jadi Anda harus menggunakan baris perintah untuk melakukannya. Catatan saya tidak melakukan pembandingan; ukuran stripe ( -I) di bawah ini sepenuhnya merupakan perkiraan untuk pengaturan VM saya:

    lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
    
  6. Di Jessie, Anda dapat menggunakan RAID10 untuk swap. Di Wheezy, RAID10 tidak didukung. Jadi, alih-alih Anda dapat menggunakan dua partisi swap, masing-masing RAID1. Tetapi Anda harus mengatakan dengan tepat pada volume fisik mana untuk meletakkannya atau meletakkan kedua bagian cermin pada disk yang sama . Iya. Serius. Bagaimanapun, itu terlihat seperti:

    lvcreate --type raid1 -m1 -L 1G -n swap0 vg0 /dev/vda1 /dev/vdb1
    lvcreate --type raid1 -m1 -L 1G -n swap1 vg0 /dev/vdc1 /dev/vdd1
    
  7. Akhirnya, kembali ke penginstal, dan tekan 'Selesai' di menu LVM. Anda sekarang akan disajikan dengan banyak volume logis yang ditampilkan. Pemasang tidak mengerti apa yang terjadi; abaikan segala sesuatu dengan rimageatau rmetaatas nama mereka (lihat paragraf pertama cara di atas untuk penjelasan tentang apa itu).

  8. Silakan dan buat sistem file, swap partisi, dll seperti biasa. Instal sistem dasar, dll., Hingga Anda masuk ke prompt grub.

  9. Di Jessie, grub2 akan berfungsi jika diinstal ke MBR (atau mungkin dengan EFI, tapi saya belum mengujinya). Pada Wheezy, instal akan gagal, dan satu-satunya solusi adalah dengan backport grub2 Jessie. Itu sebenarnya cukup mudah, itu dikompilasi dengan bersih di Wheezy. Entah bagaimana, masukkan paket grub yang di-backport ke /target(atau lakukan dalam sedetik, setelah chroot) lalu:

    chroot /target /bin/bash
    mount /sys
    dpkg -i grub-pc_*.deb grub-pc-bin_*.deb grub-common_*.deb grub2-common_*.deb 
    grub-install /dev/vda … grub-install /dev/vdd # for each disk
    echo 'dm_raid' >> /etc/initramfs-tools/modules
    update-initramfs -kall -u
    update-grub # should work, technically not quite tested²
    umount /sys
    exit
    
  10. Sebenarnya, di Jessie VM grub-install saya yang paling baru digantung. Beralih ke F2 dan melakukan while kill $(pidof vgs); do sleep 0.25; done, diikuti oleh hal yang sama lvs, mendapatkannya melalui grub-install. Tampaknya menghasilkan konfigurasi yang valid meskipun begitu, tapi kalau-kalau saya melakukan chroot /target /bin/bash, memastikan /procdan /sysdipasang, dan melakukan update-grub. Waktu itu selesai. Saya kemudian melakukan dpkg-reconfigure grub-pcuntuk memilih menginstal grub pada semua MBR disk virtual.

  11. Pada Wheezy, setelah melakukan hal di atas, pilih 'lanjutkan tanpa bootloader'.

  12. Selesai instal. Itu akan boot. Mungkin.

Pengetahuan Komunitas

Ada cukup banyak orang yang tahu tentang mdadm, dan memiliki banyak pengalaman penempatan dengannya. Google cenderung menjawab sebagian besar pertanyaan tentang hal yang Anda miliki. Anda biasanya dapat mengharapkan pertanyaan tentang hal ini di sini untuk mendapatkan jawaban, mungkin dalam sehari.

Hal yang sama tidak dapat dikatakan untuk LVM RAID. Sulit untuk menemukan pemandu. Sebagian besar pencarian Google yang saya jalankan malah menemukan saya hal-hal tentang menggunakan array mdadm sebagai PV. Sejujurnya, ini mungkin sebagian besar karena ini lebih baru, dan kurang umum digunakan. Agaknya, rasanya tidak adil untuk menentang hal ini — tetapi jika terjadi kesalahan, komunitas yang jauh lebih besar di sekitar mdadm membuat pemulihan data saya lebih mungkin.

Kesimpulan

LVM-RAID maju cukup cepat. Pada Wheezy, itu tidak benar-benar dapat digunakan (setidaknya, tanpa melakukan backports LVM dan kernel). Sebelumnya, pada tahun 2014, tentang pengujian Debian, rasanya seperti ide yang menarik, tetapi belum selesai. Pengujian saat ini, pada dasarnya apa yang akan menjadi Jessie, terasa seperti sesuatu yang Anda mungkin benar-benar gunakan, jika Anda sering perlu membuat irisan kecil dengan konfigurasi RAID yang berbeda (sesuatu yang merupakan mimpi buruk administratif dengan mdadm).

Jika kebutuhan Anda cukup dilayani oleh beberapa array RAID mdadm besar, diiris menjadi partisi menggunakan LVM, saya sarankan terus menggunakannya. Jika Anda akhirnya harus membuat banyak array (atau bahkan array volume logis), pertimbangkan untuk beralih ke LVM-RAID sebagai gantinya. Tapi simpan cadangan yang bagus.

Banyak penggunaan LVM RAID (dan bahkan mdadm RAID) diambil alih oleh hal-hal seperti sistem penyimpanan cluster / objek, ZFS, dan btrfs. Saya sarankan juga menyelidiki mereka, mereka mungkin lebih baik memenuhi kebutuhan Anda.


Terima kasih

Saya ingin mengucapkan terima kasih kepada psusi karena membuat saya mengunjungi kembali LVM-RAID dan memperbarui pos ini.

Catatan kaki

  1. Saya menduga Anda bisa menggunakan perangkat mapper untuk merekatkan metadata dan data bersama-sama sedemikian rupa sehingga mdadm --assembleakan membawanya. Tentu saja, Anda bisa menjalankan mdadmvolume logis dengan baik ... dan itu akan lebih waras.

  2. Ketika melakukan instalasi Wheezy, saya gagal melakukan ini pertama kali, dan berakhir tanpa konfigurasi grub. Saya harus mem-boot sistem dengan memasukkan semua info di grub prompt. Setelah di-boot, itu berhasil, jadi saya pikir itu akan berfungsi dengan baik dari installer. Jika Anda berakhir di prompt grub, berikut adalah garis ajaib yang harus diketik:

    linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-root
    initrd /boot/initrd.image-3.2.0-4-amd64
    boot
    

PS: Sudah lama saya tidak melakukan eksperimen aslinya. Saya telah membuat catatan asli saya tersedia. Perhatikan bahwa saya sekarang telah melakukan yang lebih baru, tercakup dalam jawaban ini, dan tidak dalam catatan itu.

derobert
sumber
2
Anda sebenarnya, mendapatkan kesalahan itu karena versi lvm di wheezy menjadi sangat tua dan buggy; itu berfungsi dengan baik bagi saya di sini di Ubuntu 14.04 dengan versi lvm 2.02.98 (saya percaya jessie setidaknya itu baru). Kedua, perintah yang Anda tunjukkan gagal adalah perubahan ukuran - membentuk kembali sesuatu yang sama sekali berbeda. Membentuk kembali berarti mengubah dari raid1 ke raid5, atau dari 3 disk raid5 ke 4 disk raid5. Itu masih tidak didukung, tetapi hanya mengubah ukurannya berfungsi dengan baik.
psusi
@psusi Ah, saya pikir mereka menganggap mengubah ukuran menjadi membentuk kembali juga (karena mengubah geometri RAID, diberikan tempat dekat sebanyak perubahan jumlah disk tidak). Saya pikir sebelum saya mendapat kesalahan mencobanya pada Jessie juga, saya akan menguji ulang itu. (Harus membuat Jessie LVM-RAID VM baru, jadi akan butuh sedikit.) Terima kasih.
derobert
dpkg-debmenyediakan cara yang lebih bersih untuk mengekstrak file dari paket deb, tidak perlu melompat-lompat secara bertahap.
muru
@muru dpkg-debtersedia di lingkungan pemasang? Dulu tidak ... Pastikan untuk memeriksa Wheezy juga.
derobert
@derobert ar -xharus bekerja terlalu keras untuk membongkar arsip deb, meskipun itu adalah clumsier. Juga, bagaimana dengan memperbarui jawaban Anda dengan status saat ini?
Faheem Mitha
7

Saya tidak tahu LVM bisa melakukan RAID juga. Secara pribadi, saya akan tetap dengan mdadm karena ini adalah perangkat lunak yang jauh lebih matang yang melakukan hal yang sama. Jika ada yang rusak dengan LVM RAID, Anda mungkin tidak akan bisa mendapatkan banyak dukungan daripada jika Anda menggunakan mdadm. Selain itu, saya tidak akan mempercayai LVM RAID karena LVM secara historis terbukti bukan perangkat lunak yang paling kuat.

ZFS dan BTRFS adalah masa depan. Manfaat yang mereka berikan melampaui apa yang mungkin di lapisan blok. Kecuali saya mengincar kompatibilitas, saya tidak akan menggunakan LVM / mdadm lagi. ZFS dan BTRFS memiliki banyak fitur seperti kompresi, deduplikasi, dan copy-on-write, tetapi saya tidak akan membahasnya di sini, karena akan sedikit keluar dari ruang lingkup.

Pada akhirnya, lakukan riset dan gunakan apa pun yang sesuai dengan kebutuhan / keinginan Anda.

Peluru Gratis
sumber
Terima kasih atas jawabannya. Pertimbangkan mengembangkannya sedikit tentang mengapa Anda tidak mempercayai LVM.
Faheem Mitha
2
"ZFS dan BTRFS adalah masa depan" Tidak harus. Setahu saya ZFS di Linux masih berbasis FUSE sehingga sebagian besar digunakan untuk mendapatkan fitur ZFS tanpa menggunakan Solaris atau FreeBSD. BTRFS memang luar biasa tetapi belum tentu masa depan. Sebagai contoh, Red Hat tampaknya bergerak lebih ke arah LVM+XFSdaripada BTRFS. Mereka mendukung BTRFS tetapi itu lebih merupakan masalah Oracle / SuSE.
Bratchley
Bukan untuk mengatakan saya tidak suka btrf karena suatu alasan (saya sebenarnya sangat menyukainya). Hanya saja itu bukan arah yang akan dilakukan distro besar seperti Red Hat, dan saya tidak bisa memikirkan apa pun yang bisa dilakukan BTRFS sehingga LVM / XFS setidaknya tidak bisa mendekati dengan cukup baik.
Bratchley
Saya juga akan mengatakan bahwa BTRFS akan menyenangkan tetapi LVM dapat melakukan banyak hal yang BTRFS tidak bisa lakukan (belum). Misalnya, Anda dapat melakukan volume hibrid dan snapshot provisi tipis yang tidak dapat dilakukan BAIK (AFAIK).
Bratchley
9
"Setahu saya ZFS di Linux masih berbasis FUSE" ini telah salah selama lebih dari lima tahun. ZoL adalah modul kernel dan siap sepenuhnya produksi. Saya telah menggunakannya secara luas sejak awal 2010.
Jim Salter