Proposal penyimpanan heterogen ZFS atau LVM atau MD redundan

10

Saya memiliki masalah yang sama dengan kebanyakan orang: bagaimana menciptakan solusi penyimpanan pribadi yang andal dengan fakta bahwa:

  1. Hard drive gagal dengan keteraturan yang mengkhawatirkan. Kehilangan file tidak dapat diterima.
  2. Saya akan membeli HDD baru dari waktu ke waktu. Tidak dapat dihindari, harga / GB terbaik adalah ukuran yang berbeda dari pembelian HDD terakhir.
  3. 2 artinya seiring waktu saya memiliki koleksi disk yang heterogen. Saya ingin menggunakan semuanya, dan disk yang gagal umumnya akan diganti oleh disk yang lebih besar.

  4. Integritas dan keandalan data lebih penting bagi saya daripada kecepatan.

Jadi setelah membenturkan kepala saya terhadap masalah ini selama beberapa hari (dan di belakang kepala saya selama bertahun-tahun) saya mengusulkan solusi berikut. Saya akan menjelaskan solusi yang telah saya uji berdasarkan ZFS linux asli yang tersedia di PPA Ubuntu , tetapi LVM, MD, dan btrfs dapat digunakan untuk mencapai hal yang sama. Untuk ini saya akan menggunakan RAID1 (ZFS mirror vdevs).

  1. Dengan set drive Anda, kelompokkan menjadi dua set disk, sehingga kapasitas setiap set sedekat mungkin dengan yang lain.
  2. Partisi disk yang lebih besar sehingga ada partisi dengan ukuran yang persis sama dengan salah satu disk yang lebih kecil, di grup lain.
  3. Buat mirror vdevs sehingga setiap disk memiliki mirrornya di disk lain.

Misalnya, pertimbangkan set disk drive 2TB baru, drive 750GB yang lebih tua, 2 drive 400GB yang lebih tua, dan satu drive 500GB yang lebih tua. Partisi cermin optimal memiliki 2TB ruang yang dapat digunakan dan dijelaskan dalam diagram berikut di mana ':' memisahkan partisi dan '|' memisahkan disk:

+------------------------------------------------------------------+
| 2TB (sda1)        : (sda2)       : (sda3)       : (sda4)         |
+------------------------------------------------------------------+--+
| 750 GB (sdb)      | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1)  :XX|
+---------------------------------------------------------------------+

Buat zpool Anda sebagai

zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1

Ini menciptakan 4 vdev cermin. Jika salah satu disk gagal, ia dapat diganti (dengan ukuran disk apa saja) dan dipartisi untuk membuat ulang partisi yang hilang. Sangat penting bahwa ZFS vdevs dapat ditambahkan ke kumpulan tetapi tidak dihapus . Jadi, jika memungkinkan, ketika seseorang membeli drive baru, Anda ingin mengatur ulang vdev yang ada. Katakanlah pembelian berikutnya adalah drive 3TB. Konfigurasi optimal Anda dapat digunakan 3.5TB, seperti dijelaskan dalam diagram berikut. Sekarang ini adalah 5 pasang vdev. Ini dapat dicapai dengan partisi yang tepat dan gagal serta mempartisi ulang drive secara berturut-turut.

+--------------------------------------------------------------+-------------+
| 3 TB (sdf1)       : (sdf2)      : (sdf3)      : (sdf4)       | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1)        | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2)      :X| 
+------------------------------------------------------------------------------+

Mempertahankan pasangan drive mirroring ini juga bisa dilakukan dengan LVM atau dengan MD RAID, idenya adalah untuk memastikan setiap drive selalu memiliki drive mirror atau partisi. Karena semuanya dicerminkan, kita bebas untuk merusak drive dan mengatur ulang partisi ketika drive ditambahkan atau dihapus. Menggunakan LVM atau MD akan mungkin untuk menghapus drive dan menyusutkan array, jika diinginkan, dengan mengorbankan alat pemulihan yang kurang canggih di ZFS dibandingkan dengan BTRFS.

Ada komentar tentang prosedur ini? Skrip yang baik dapat menangani alokasi lossless dan penataan ulang drive. Adakah komentar tentang LVM vs MD vs. ZFS? Adakah komentar tentang kinerja array yang dihasilkan secara aneh? Apakah pengaturan data di beberapa partisi pada drive yang sama menyebabkan pencarian kepala berlebihan dan kegagalan awal?

BTRFS devs: semua orang menginginkan ini dan LVM atau MD secara teknis tidak diperlukan (dan menurut saya, kurang optimal). Membuatnya mudah untuk mempertahankan array heterogen yang redundan akan menjadi fitur pembunuh untuk btrfs. Ini adalah retasan pada LVM / MD / ZFS apa adanya. Meminimalkan resliver / resync sangat diinginkan.

Ya, ini jelas Drobo orang miskin. Seseorang seharusnya tidak memerlukan perangkat keras khusus untuk itu ...

Bob McElrath
sumber

Jawaban:

4

Saya telah menguji ini dengan ZFS dan menulis kinerja sekitar setengah dari yang seharusnya, karena ZFS mendistribusikan membaca dan menulis di semua vdevs (karena itu membagi I / O ke beberapa tempat pada disk yang sama). Dengan demikian, kecepatan dibatasi oleh kecepatan disk dengan partisi terbanyak. Kecepatan baca tampaknya sama dengan bandwidth disk. Perhatikan bahwa sepasang partisi ZFS pada dua disk memiliki kira-kira dua kali lipat kecepatan baca dari masing-masing disk tunggal, karena dapat membaca dari disk secara paralel.

Menggunakan array LINEAR MD atau LVM untuk membuat dua bagian menghasilkan dua kali kinerja penulisan dibandingkan dengan proposal ZFS di atas, tetapi memiliki kelemahan bahwa LVM dan MD tidak tahu di mana data disimpan. Jika terjadi kegagalan atau pemutakhiran disk, satu sisi array harus dihancurkan dan disinkronisasi ulang, diikuti oleh sisi lainnya. (mis. resync / resliver harus menyalin 2 * (ukuran array))

Oleh karena itu tampaknya kemudian bahwa solusi optimal adalah membuat vdev mirror ZFS tunggal di dua perangkat LVM atau MD LINEAR yang menggabungkan disk menjadi "separuh" berukuran sama. Ini memiliki kira-kira dua kali bandwidth baca dari satu disk, dan bandwidth tulis sama dengan bandwidth disk individual.

Menggunakan BTRFS raid1 bukan ZFS juga berfungsi, tetapi memiliki setengah bandwidth baca karena ZFS mendistribusikan bacaannya untuk menggandakan bandwidth, sementara tampaknya BTRFS tidak (menurut tes saya). BTRFS memiliki keuntungan bahwa partisi dapat menyusut, sementara mereka tidak dapat dengan ZFS (jadi jika setelah kegagalan Anda memiliki banyak ruang kosong, dengan BTRFS dimungkinkan untuk membangun kembali array yang lebih kecil dengan mengecilkan sistem file, kemudian mengatur ulang disk).

Ini membosankan untuk dilakukan dengan tangan tetapi mudah dengan beberapa skrip yang bagus.

Bob McElrath
sumber