Mengapa RAID 0 tidak dapat memanfaatkan semua ruang disk pada dua disk berukuran berbeda?

8

Kutipan artikel Wikipedia tentang RAID :

RAID 0 dapat dibuat dengan disk dengan ukuran berbeda, tetapi ruang penyimpanan yang ditambahkan ke array oleh masing-masing disk terbatas pada ukuran disk terkecil. Misalnya, jika disk 100 GB dilucuti bersama dengan disk 350 GB, ukuran array akan menjadi 200 GB (100 GB × 2).

Namun artikel itu tidak menyatakan Mengapa itu tidak bisa RAID mereka bersama-sama dan menghabiskan seluruh ruang disk. Saya mengerti bahwa striping menulis di antara keduanya, tetapi tentu saja seharusnya tidak mencegah menulis ke sektor selanjutnya dari disk kedua, sementara berjalan dalam kinerja yang menurun? Apakah ada sistem RAID alternatif (mis., RAID perangkat lunak) yang menawarkan fitur seperti itu?

Polynomial
sumber
Saya tidak yakin apakah ini akan bekerja dengan beberapa serangan perangkat keras tetapi dengan serangan perangkat lunak, Untuk mengambil keuntungan dari beberapa aspek serangan 0 sambil menggunakan lebih banyak ruang yang tersedia pada dua drive berukuran berbeda seperti satu 100GB dan satu 350GB Anda Anda dapat mencoba membuat 3 Partisi 100GB pada drive yang lebih besar, dan strip partisi 100KB pada partisi pertama dan 3 100GB pada drive kedua. Raid level 0 akan memberi Anda 400 pertunjukan untuk digunakan sambil memberikan peningkatan kinerja baca / tulis, tetapi mungkin akan lebih sedikit dibandingkan jika Anda melucuti dua drive 200GB.
Keith Reynolds
Biasanya Anda tidak ingin melakukan ini, Untuk tujuan demonstrasi saya mengatur RAID0 menggunakan satu flash drive 1G dan 16G. Saya membuat partisi tambahan yang mengisi setiap disk. Lalu saya membuat partisi 981MB di setiap drive hingga penuh. Kemudian saya membuat serangan menggunakan 16 partisi dengan perintah di linux mdadm --create --verbose /dev/md0 --chunk=512 -l0 -n16 /dev/sdd5 /dev/sde5 /dev/sde6 /dev/sde7 /dev/sde8 /dev/sde9 /dev/sde10 /dev/sde11 /dev/sde12 /dev/sde13 /dev/sde14 /dev/sde15 /dev/sde16 /dev/sde17 /dev/sde18 /dev/sde19. Saya berakhir dengan ruang yang lebih sedikit daripada saya hanya menggunakan drive 16GB
Keith Reynolds

Jawaban:

9

Alasan ukuran dibatasi oleh ukuran disk terkecil berkaitan dengan fakta bahwa garis-garis ditulis "secara bergantian" dan harus berukuran sama.

Dalam sistem dua disk, semua garis aneh ada di satu disk, yang genap di yang lain. Menulis bergantian di antara disk, ganjil / genap / ganjil / genap / ...

Karena garis-garis harus memiliki ukuran yang sama, dan dipasangkan (untuk dua disk), Anda dibatasi untuk ruang maksimum yang dapat digunakan sebesar 2 * (ukuran disk terkecil).

Bob
sumber
1

Kamu bisa gunakan sisa ruang. Anda dapat membuat volume menggunakan ruang yang tersisa, atau bahkan menggunakannya sebagai bagian dari RAID lain. Namun, menggunakan ruang ekstra ini akan menurunkan kinerja yang diberikan RAID 0 kepada Anda, karena dua proses berbeda mungkin mencoba mengakses pengontrol dan disk fisik yang sama.

Mengapa Anda tidak dapat menambahkan ruang ekstra ini ke RAID asli? Nah, tanpa masuk ke banyak detail, itu karena algoritma yang digunakan RAID. RAID 0 menulis ke disk pertama dalam RAID kemudian disk berikutnya. Ini meningkatkan kinerja, karena tidak harus menunggu disk sebelumnya selesai membaca atau menulis. Jika 250 GB dalam posting Anda digunakan, sebagian besar penulisan akan ke disk pertama, cukup banyak menghilangkan kenaikan kinerja.

RAID mungkin bukan solusi yang Anda cari, jika Anda ingin menggunakan semua ruang drive Anda harus merentang volume. Spanning memungkinkan Anda mengambil banyak volume dan menyatukannya dalam satu volume besar. Spanning tidak menawarkan peningkatan kinerja atau redundansi.

Keltari
sumber
Ini tidak menjelaskan Mengapa itu tidak dapat menggunakan semua dari dua drive dalam satu volume. Selain itu, bagian volume yang terpisah tidak akan menyebabkan masalah kinerja sama sekali - kontrol IO disk pada level rendah ditangani oleh interupsi melalui disk.sys, sehingga permintaan baca / tulis tetap disalurkan, dan Windows mendukung IO yang tumpang tindih juga.
Polynomial
Oke, pembaruan Anda masih belum menjelaskannya. Saya akrab dengan cara kerja striping, tapi itu tidak menjelaskan mengapa itu tidak bisa begitu saja beralih ke mode disk tunggal (dengan kinerja disk tunggal standar) setelah disk kecil penuh. Terima kasih telah menyebutkan rentang volume - yang terlihat bermanfaat.
Polynomial
1
Karena itulah cara kerja RAID. Jika Anda benar-benar ingin, Anda dapat melakukan RAID 0 apa yang Anda bisa, kemudian membuat volume dengan ruang kosong, kemudian span RAID dan volume tambahan. Tapi saya tidak berpikir pengendali RAID akan membiarkan Anda melakukan itu. Anda mungkin dapat melakukannya dengan kombinasi perangkat keras dan perangkat lunak RAID.
Keltari
1
-1 "Ini meningkatkan kinerja, karena tidak harus menunggu disk sebelumnya selesai membaca atau menulis" hal yang sama dapat dikatakan untuk dua hard disk dengan ukuran berbeda di RAID 0
Celeritas
2
@ Polinomial Itu bukan RAID 0. Anda bertanya mengapa RAID 0 tidak dapat menggunakan semua ruang disk dan kemudian Anda menjawab "mengapa tidak bisa hanya ...". Itu tidak bisa karena itu RAID 0. Jika ia melakukan sesuatu yang lain, itu akan menjadi sesuatu yang lain.
David Schwartz
0

RAID adalah standar pseudo yang menjelaskan bagaimana data dapat disimpan pada array disk. Standar ini menjelaskan empat cara berbeda untuk menyimpan data (secara teknis lebih banyak, tetapi kebanyakan tidak ada yang peduli tentang yang lain):

Raid-0: Striping. Setiap blok data dibagi di setiap anggota perangkat RAID. Tidak ada redundansi, jadi ini lebih dari sekadar Array Disk Murah, bukan array Redundan disk murah.

Raid-1: Mirroring. Setiap blok data disimpan pada setiap disk dalam array. Ini hanya benar-benar membuat sejak dengan dua disk. RAID 1/0 atau hanya RAID 10 adalah kombinasi mirroring dan striping dan dapat digunakan untuk memanfaatkan lebih dari dua disk.

Raid-5: Parity. Setiap blok data dibagi di setiap anggota perangkat RAID + satu disk didedikasikan untuk paritas.

Raid-6: Double Parity: Sama seperti Raid-5, tetapi dengan dua disk paritas.

Itu dia. Raid tidak menjelaskan apa yang harus dilakukan tentang kesalahan ukuran atau apa pun, tetapi striping hanya bekerja dengan disk berukuran sama. Biasanya cara untuk menyiasatinya adalah Anda dapat menggunakan ruang sisa sebagai disk drive terpisah.

Melangkah menjauh dari RAID sebagai cara membuat array disk yang besar, Anda dapat menggunakan hal-hal seperti ZFS dan hanya menambahkan disk ke kumpulan penyimpanan. ZFS akan selalu mencoba menggunakan kedua disk seefisien mungkin, dan Anda bisa memberi tahu ZFS tingkat redundansi yang Anda sukai.

Teknologi sebelumnya adalah hal-hal seperti pemetaan volume (yaitu LVM, atau setara dengan windows), yang mengabstraksi gagasan pemetaan blok ke disk ke tingkat yang lebih tinggi. Dengan LVM Anda dapat menjangkau seluruh disk, memperluas partisi, memiliki partisi yang tidak bersebelahan dan seterusnya. Pemetaan volume bukanlah RAID, dan bukannya meningkatkan kinerja saat Anda menambah disk, ia hanya akan secara acak memilih untuk menulis ke satu disk atau yang lain tergantung di mana Anda berada dalam sistem file. Ini disebut spanning dan biasanya lebih baik daripada RAID jika Anda menggunakan IOPS daripada kinerja mentah.

Claris
sumber
0
A RAID 0 can be created with disks of differing sizes, but the storage
space added to the array by each disk is limited to the size of the
smallest disk.

Ini bisa benar dan akan berlaku untuk sebagian besar implementasi RAID0. Namun tidak untuk semua.

Ada dua alasan untuk menggunakan RAID 0:

  1. Menggabungkan beberapa disk menjadi satu volume besar.
  2. Performa.

Opsi 2 adalah yang paling umum dan saya pikir ini digunakan di hampir semua implementasi RAID 0 saat ini. Penjelasan teknis adalah bahwa informasi ditulis bergantian antara disk.

Secara non teknis: anggap disk sebagai dua buku. Buku-buku ini memiliki kecepatan akses (baca / tulis) terbatas. Jadi, alih-alih dua buku 100 halaman, kami memformatnya menjadi dua buku, tetapi memberi nomor baru pada halaman-halaman itu sehingga semua angka genap ditulis dalam satu buku dan semua angka ganjil di buku lain.

Sekarang 'buku R0' baru kami berperilaku jika buku tunggal dengan dua kali jumlah halaman dan dua kali kecepatan.


Opsi 1 dapat sesederhana 'lem ke buku back to back'. Dalam hal ini Anda tidak mendapatkan kecepatan, tetapi Anda dapat merekatkan buku dengan jumlah halaman berbeda. Saya sepertinya mengingat beberapa implementasi 'RAID0' seperti itu sekitar tahun 1990. Tetapi bukan itu yang dianggap oleh kebanyakan orang 'RAID 0 yang tepat'.

Hennes
sumber