Mengapa perangkat raid 10 perlu diinisialisasi?

9

Saat membuat perangkat raid perangkat lunak linux sebagai perangkat raid10, saya bingung mengapa harus diinisialisasi. Pertanyaan yang sama berlaku untuk raid1 atau raid0, sungguh.

Pada akhirnya kebanyakan orang akan meletakkan sistem file semacam itu di atasnya, dan sistem file itu tidak boleh mengasumsikan keadaan apa pun dari data disk. Setiap penulisan akan mempengaruhi kedua disk dalam pengaturan raid10 atau raid1, di mana N mirror ditulis. Seharusnya tidak ada alasan apa pun untuk razia10 yang diinisialisasi pada awalnya, karena akan terjadi seiring waktu.

Saya bisa mengerti mengapa untuk setup raid5 / 6 di mana ada persyaratan paritas, tetapi meskipun begitu sepertinya ini bisa dilakukan dengan malas.

Apakah hanya supaya orang merasa lebih baik tentang hal itu?

Michael Graff
sumber
1
Pertanyaan bagus. Dimungkinkan untuk melewatkan sinkronisasi ketika RAID sedang dibuat, dan saya telah menemukan rekomendasi untuk melakukannya jika satu atau lebih perangkat yang mendasarinya adalah SSD. Saya tidak tahu apakah ada skenario di mana sinkronisasi diperlukan untuk operasi yang benar.
kasperd

Jawaban:

2

Sinkronisasi awal diperlukan karena setiap perbedaan antara mirror akan muncul sebagai kesalahan selama pemeriksaan berkala.

Dan Anda harus melakukan pemeriksaan berkala.

Simon Richter
sumber
1
Saya bisa melihat mengapa pemeriksaan berkala untuk keterbacaan data bisa bermanfaat. Tapi apa gunanya pemeriksaan berkala untuk replika yang identik lakukan? Pemeriksaan semacam itu dapat bermanfaat jika dilakukan oleh sistem file yang memeriksa data. Tetapi pada lapisan RAID tanpa pengetahuan sistem file Anda tidak bisa tahu mana dari dua replika berbeda yang baik, Anda tidak bisa tahu bagaimana perbedaan terjadi di tempat pertama, dan Anda tidak bisa tahu file mana (jika ada) yang terpengaruh. Jadi tampaknya peringatan tentang inkonsistensi pada lapisan ini sebagian besar tidak berguna karena tidak ada yang dapat dilakukan administrator dengan peringatan itu.
kasperd
Karena Anda tetap harus membaca data, biaya membandingkannya minimal, tetapi dapat menunjukkan kepada Anda bahwa salah satu disk telah mengembangkan masalah yang tidak terdeteksi (mis. RAM buruk dalam cache drive sendiri). Administrator kemudian akan memecah array, secara manual melihat perbedaan dan memilih drive mana yang akan diganti.
Simon Richter
Anda harus mengembangkannya dalam jawaban Anda.
kasperd
Saya tahu ini sudah bertahun-tahun, tetapi ini adalah satu-satunya alasan sah yang dapat saya lihat. Saya tidak berpikir itu penting jika data tidak sinkron, karena data itu menurut definisi belum ditulis, sehingga sistem file yang diterapkan pada drive raid tidak akan pernah membaca dari blok itu. Namun, memastikan cek berkala lulus dari awal, membuat ini perlu. Terima kasih!
Michael Graff
7

Raid 1, menjadi cermin, tergantung pada semua disk di cermin yang merupakan salinan satu sama lain. Ambil hard drive acak Anda, dan hard drive acak lainnya, dan Anda mungkin memiliki data berbeda di sana, sehingga melanggar anggapan ini. Inilah mengapa diperlukan inisialisasi. Itu hanya menyalin isi dari drive pertama ke orang lain. Perhatikan bahwa dalam beberapa kondisi Anda bisa lolos dengan tidak menginisialisasi drive - biasanya perangkat pabrik-baru sudah memiliki nol di semua tempat, sehingga Anda bisa mengabaikannya. The mdadmopsi --assume-cleanmelakukan ini, tetapi memperingatkan Anda:

   --assume-clean

Beri tahu mdadm bahwa array sudah ada sebelumnya dan diketahui bersih. Ini dapat berguna ketika mencoba memulihkan dari kegagalan besar karena Anda dapat yakin bahwa tidak ada data yang akan terpengaruh kecuali Anda benar-benar menulis ke array. Ini juga dapat digunakan saat membuat RAID1 atau RAID10 jika Anda ingin menghindari sinkronisasi ulang awal, namun praktik ini - meskipun biasanya aman - tidak disarankan. Gunakan ini hanya jika Anda benar-benar tahu apa yang Anda lakukan.

Jika Anda tidak melakukannya, ada perbedaan antara drive dan itu dibaca, tidak ada yang tahu apa yang akan dibaca drive. Anda seharusnya cukup aman dengan sistem file (tetapi perhatikan di bawah), karena kemungkinan besar Anda akan menulis sebelum membaca apa pun dari perangkat itu, dan kemudian Anda jelas.

Perhatikan bahwa setidaknya Linux mdadmakan menginisialisasi array di latar belakang. Anda dapat dengan senang hati membuat FS di atasnya detik pertama. Performa akan menurun sampai inisialisasi selesai, tetapi hanya itu yang terjadi.

Tapi:

a) Saat melakukan mkfsbeberapa utilitas, periksa apakah sudah ada sesuatu di drive itu. Meskipun ini hanya menyentuh beberapa wilayah drive yang terkenal, ia membaca sebelum Anda menulis apa pun, sehingga membahayakan Anda.

b) Jika Anda melakukan sinkronisasi ulang berkala array Anda, perangkat RAID tidak tahu apa-apa tentang FS Anda. Ini hanya membaca setiap blok dari setiap perangkat dan membandingkannya. Dan jika Anda tidak menggunakan FS copy-on-write (mis. ZFS atau BTRFS) dan tidak pernah mengisi FS Anda, sangat masuk akal jika sebuah blok tetap diinisialisasi dari perspektif FS selama bertahun-tahun.

Mengapa melakukan penyinkronan ulang dengan perangkat RAID1?

Untuk alasan yang sama Anda melakukan sinkronisasi ulang dengan perangkat RAID5 atau tingkat lainnya (kecuali RAID0). Itu membaca semua data dan membandingkan / memverifikasi checksum RAID (dalam RAID 5 atau 6). Jika sedikit dibalik dengan cara apa pun (karena memori HD mendapat flip spontan, karena ponsel Anda dan tetangga Anda hanya secara tidak sengaja mengganggu wilayah platter ini, apa pun) itu akan mendeteksi ketidakkonsistenan, tetapi tidak akan dapat tolong kamu. Jika, OTOH, salah satu hard drive hanya akan melaporkan "Saya tidak bisa membaca blok itu", yang lebih mungkin dengan drive yang gagal, Anda baru saja mendeteksi kegagalan lebih awal, dan mengurangi waktu Anda berjalan dalam mode terdegradasi (dihitung dari kegagalan drive, bukan dari saat Anda melihatnya). Raid tidak akan membantu Anda jika satu drive gagal dan sebulan kemudian yang lain gagal jika Anda tidak

RAID10

Sekarang, untuk RAID10 semua hal di atas berlaku. Bagaimanapun, RAID10 hanyalah cara cerdik untuk mengatakan 'Saya menempatkan dua perangkat RAID1 saya pada pasangan RAID0'.

Peringatan:

Ini semua perilaku yang tidak terdefinisi. Mengapa saya memeriksa di Linux, menggunakan mdadm, implementasi RAID perangkat lunak lain mungkin berperilaku berbeda. Versi lain dari kernel dan / atau mdadmalat Linux selain yang saya gunakan juga mungkin berperilaku berbeda.

Torinthiel
sumber
1
Harap berikan kutipan untuk If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Saya percaya pernyataan itu salah. Setidaknya berikan contoh pesan kesalahan sedemikian sehingga memungkinkan untuk berkonsultasi dengan sumber untuk memverifikasi dalam keadaan apa ia diproduksi.
kasperd
1
Itu lebih baik. Apakah Anda memverifikasi pernyataan tentang menulis nol? Saya pikir ini tidak menulis angka nol melainkan menyalin salah satu disk ke disk lain.
kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.Dalam bahaya apa? Saya menyadari bahwa pembacaan dapat mengakibatkan apa saja, tetapi mengapa hal itu menimbulkan bahaya bagi pengguna jika (a) informasi yang dibaca tidak digunakan di mana pun dan (b) penulisan akan segera terjadi?
Vegard
1
@kasperd Anda benar, ini menyalin perangkat pertama ke yang kedua. Uji pada urandomperangkat-diinisialisasi, dengan linux mdadm menunjukkan bahwa 80k pertama tetap berbeda, serta 48k terakhir. Yang terakhir mungkin karena pembulatan ukuran RAID ke ukuran blok. Saya belum menguji dengan ukuran perangkat yang berbeda, tetapi 80 + 48 persis perbedaan ukuran antara perangkat RAID dan perangkat blok yang mendasarinya.
Torinthiel
1
Satu hal yang perlu dipertimbangkan adalah bahwa biasanya selama inisialisasi, sistem serangan akan SELALU membaca disk A dan menyalinnya ke disk B. Mengapa? Karena Anda dapat menggunakan disk saat inisialisasi, Anda mungkin memiliki data tertulis di blok 100.000. Setelah raid init mencapai blok itu, baik A dan B sudah identik, jadi tidak ada yang terjadi. Jika bukan zeroing block, itu akan menghapus data yang baik. Jadi, sekali lagi, saya melihat dua alasan untuk memastikan blok identik: "itu selalu dilakukan" dan "sehingga Anda dapat menjalankan pemeriksaan nanti" - Saya juga mempertanyakan kegunaan cek itu. Membaca itu baik, membandingkan? tidak yakin.
Michael Graff
5

Ingat bahwa RAID 1 adalah mirror, dan RAID 10 adalah strip mirror.

Pertanyaannya adalah, pada disk mana di setiap mirror data tersebut valid? Dalam array yang baru dibuat, ini tidak dapat diketahui, karena disk mungkin memiliki data yang berbeda.

Ingat juga bahwa RAID beroperasi pada level yang sangat rendah; ia tidak tahu apa-apa tentang sistem file atau data apa pun yang mungkin disimpan pada disk. Bahkan mungkin tidak ada sistem file yang digunakan.

Jadi, inisialisasi dalam array ini terdiri dari data dari satu disk di setiap mirror yang disalin sebagaimana adanya ke disk lain.

Ini juga berarti bahwa array aman untuk digunakan sejak saat pembuatan, dan dapat diinisialisasi di latar belakang; sebagian besar pengontrol RAID (dan Linux mdraid) memiliki opsi untuk ini, atau melakukannya secara otomatis.

Michael Hampton
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Michael Hampton
1

Sederhananya karena dua disk baru tidak diharapkan menjadi salinan sempurna mirror dari satu sama lain sejak awal.

Mereka harus diubah menjadi salinan sempurna satu sama lain.

Selain itu, inisialisasi termasuk mengatur superblok metadata dengan informasi tentang konfigurasi array juga.

File / proc / mdstat harus memberi tahu Anda bahwa perangkat telah dimulai, bahwa cermin sedang direkonstruksi, dan ETA penyelesaian rekonstruksi. Rekonstruksi dilakukan menggunakan bandwidth I / O idle. Jadi, sistem Anda harus tetap responsif, meskipun LED disk Anda juga akan menunjukkan banyak aktivitas.

Proses rekonstruksi transparan, sehingga Anda benar-benar dapat menggunakan perangkat meskipun cermin sedang dalam proses rekonstruksi.

HBruijn
sumber
2
Tetapi mengapa mereka harus saling meniru satu sama lain? Apa yang mungkin terputus dari keduanya yang tidak konsisten di sektor yang tidak pernah digunakan oleh sistem file?
kasperd
@kasperd RAID diimplementasikan pada level yang lebih rendah daripada sistem file mana pun. Jadi pertanyaannya menjadi, apa "sistem file" yang Anda referensikan.
Taemyr
@ Taemyr Saya tidak mengacu pada sistem file tertentu. Pilih mana yang Anda inginkan dan jelaskan apa yang akan rusak dengan menggunakannya pada RAID-1 di mana replika tidak disinkronkan sebelum menginisialisasi sistem file.
kasperd
@kasperd Tidak ada sistem file yang dapat dipecah pada level yang dioperasikan oleh RAID.
Taemyr
1
Dalam kasus saya, sebagai poster asli, saya tidak peduli sistem file apa. Saya tahu tidak ada sistem file yang akan membaca sektor-sektor yang belum pernah ditulis, sehingga keadaan tidak pasti dari sektor-sektor tidak tertulis itu tidak masalah.
Michael Graff