เหตุใดอุปกรณ์ RAID 10 จึงต้องเริ่มต้นใหม่


9

เมื่อสร้างอุปกรณ์จู่โจมซอฟต์แวร์ linux เป็นอุปกรณ์ raid10 ฉันสับสนว่าทำไมต้องเริ่มต้น คำถามเดียวกันนี้ใช้กับ raid1 หรือ raid0 จริงๆ

ในที่สุดคนส่วนใหญ่จะวางระบบไฟล์บางประเภทไว้ด้านบนของมันและระบบไฟล์นั้นไม่ควรถือว่าข้อมูลใด ๆ ของดิสก์ การเขียนแต่ละครั้งจะมีผลกับดิสก์ทั้งคู่ในการตั้งค่า raid10 หรือ raid1 ที่มีการเขียนมิรเรอร์ N ไว้ ไม่ควรมีเหตุผลใด ๆ ที่การโจมตี 10 จะเริ่มต้นได้ในตอนแรกเพราะจะเกิดขึ้นเมื่อเวลาผ่านไป

ฉันสามารถเข้าใจได้ว่าทำไมสำหรับการตั้งค่า RAID5 / 6 ที่มีข้อกำหนดของความเท่าเทียมกัน แต่ถึงอย่างนั้นมันก็ดูเหมือนว่าจะทำได้อย่างเกียจคร้าน

เป็นเพียงเพื่อให้ผู้คนรู้สึกดีขึ้นหรือไม่


1
คำถามที่ดี. เป็นไปได้ที่จะข้ามการซิงโครไนซ์เมื่อ RAID ถูกสร้างขึ้นและฉันได้พบกับคำแนะนำในการทำเช่นนั้นในกรณีที่มีอุปกรณ์พื้นฐานหนึ่งตัวหรือมากกว่าเป็น SSD ฉันไม่รู้ว่ามีสถานการณ์จำลองใดบ้างที่จำเป็นต้องมีการซิงโครไนซ์สำหรับการทำงานที่ถูกต้อง
kasperd

คำตอบ:


2

จำเป็นต้องมีการซิงโครไนซ์ครั้งแรกเนื่องจากความแตกต่างระหว่างมิรเรอร์จะแสดงเป็นข้อผิดพลาดระหว่างการตรวจสอบเป็นระยะ

และคุณควรทำการตรวจสอบเป็นระยะ


1
ฉันเห็นได้ว่าทำไมการตรวจสอบความสามารถในการอ่านข้อมูลเป็นระยะจึงมีประโยชน์ แต่การตรวจสอบซ้ำสำหรับสิ่งที่เหมือนกันเป็นระยะ ๆ ดีอย่างไร? การตรวจสอบดังกล่าวจะมีประโยชน์หากดำเนินการโดยระบบไฟล์ซึ่งจะตรวจสอบข้อมูล แต่ที่เลเยอร์ RAID ที่ไม่มีความรู้ระบบไฟล์คุณไม่สามารถรู้ได้ว่าแบบจำลองใดในสองแบบนั้นดีคุณไม่สามารถรู้ได้ว่าเกิดความคลาดเคลื่อนตั้งแต่แรกและคุณไม่รู้ว่าไฟล์ใด (ถ้ามี) ที่ได้รับผลกระทบ ดังนั้นจึงปรากฏการแจ้งเตือนเกี่ยวกับความไม่สอดคล้องกันที่เลเยอร์นี้ส่วนใหญ่ไร้ประโยชน์เนื่องจากไม่มีสิ่งใดที่ผู้ดูแลระบบสามารถทำกับการแจ้งเตือนได้
kasperd

ตามที่คุณจำเป็นต้องอ่านข้อมูลอย่างไรก็ตามค่าใช้จ่ายในการเปรียบเทียบนั้นมีน้อยมาก แต่ก็สามารถแสดงให้คุณเห็นว่าดิสก์หนึ่งในนั้นได้พัฒนาปัญหาที่ตรวจไม่พบเป็นอย่างอื่น (เช่น RAM ไม่ดีในแคชของไดรฟ์เอง) จากนั้นผู้ดูแลระบบจะแยกอาร์เรย์ดูความแตกต่างด้วยตนเองและเลือกไดรฟ์ที่จะแทนที่
Simon Richter

คุณควรขยายในคำตอบของคุณแล้ว
kasperd

ฉันรู้ว่าหลายปีแล้ว แต่นี่เป็นเหตุผลเดียวที่ฉันเห็น ฉันไม่คิดว่ามันจะเป็นอย่างอื่นหากข้อมูลไม่ซิงค์เนื่องจากข้อมูลดังกล่าวยังไม่ได้ถูกเขียนลงไปดังนั้นระบบไฟล์ที่ใช้กับไดรฟ์ RAID จะไม่อ่านจากบล็อกเหล่านั้น ตรวจสอบให้แน่ใจว่าการตรวจสอบเป็นครั้งคราวผ่านจากจุดเริ่มต้นทำให้สิ่งนี้จำเป็น ขอบคุณ!
Michael Graff

7

Raid 1 การเป็นมิร์เรอร์นั้นขึ้นอยู่กับดิสก์ทั้งหมดในมิรเรอร์ซึ่งเป็นสำเนาที่แน่นอนของกันและกัน ใช้ฮาร์ดไดรฟ์แบบสุ่มและฮาร์ดไดรฟ์แบบอื่นและคุณอาจมีข้อมูลที่แตกต่างกันดังนั้นจึงเป็นการละเมิดข้อสันนิษฐานนี้ นี่คือเหตุผลที่จำเป็นต้องเริ่มต้น มันเพียงแค่คัดลอกเนื้อหาของไดรฟ์แรกไปยังผู้อื่น โปรดทราบว่าในบางเงื่อนไขคุณสามารถหลีกเลี่ยงได้โดยไม่ต้องเริ่มการทำงานของไดรฟ์โดยปกติแล้วอุปกรณ์ใหม่จากโรงงานจะมีเลขศูนย์อยู่แล้วดังนั้นคุณสามารถเพิกเฉยได้ mdadmตัวเลือก--assume-cleanทำอย่างนี้ แต่เตือนคุณ:

   --assume-clean

บอก mdadm ว่าอาร์เรย์มีอยู่แล้วและรู้ว่าสะอาด มันจะมีประโยชน์เมื่อพยายามกู้คืนจากความล้มเหลวที่สำคัญเนื่องจากคุณสามารถมั่นใจได้ว่าจะไม่มีข้อมูลใดได้รับผลกระทบเว้นแต่คุณจะเขียนลงในอาร์เรย์ นอกจากนี้ยังสามารถใช้เมื่อสร้าง RAID1 หรือ RAID10 หากคุณต้องการหลีกเลี่ยงการซิงค์ครั้งแรกอย่างไรก็ตามไม่แนะนำให้ใช้วิธีปฏิบัตินี้ - ในขณะที่ปลอดภัยโดยทั่วไป - ใช้สิ่งนี้เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่

หากคุณไม่ทำเช่นนั้นจะมีความคลาดเคลื่อนระหว่างไดรฟ์กับการอ่านไม่มีความรู้ว่าไดรฟ์จะอ่านอะไร คุณควรจะปลอดภัยกับระบบไฟล์ (แต่โปรดทราบด้านล่าง) เพราะส่วนใหญ่คุณจะเขียนก่อนที่คุณจะอ่านอะไรจากอุปกรณ์นั้นแล้วคุณจะชัดเจน

โปรดทราบว่าอย่างน้อย Linux mdadmจะเริ่มต้นอาร์เรย์ในพื้นหลัง คุณสามารถสร้าง FS อย่างมีความสุขได้บนวินาทีแรก ประสิทธิภาพจะลดลงจนกว่าการเริ่มต้นจะเสร็จสิ้น แต่นั่นคือทุกอย่าง

แต่:

a) เมื่อทำการmkfsสาธารณูปโภคตรวจสอบว่ามีบางสิ่งในไดรฟ์นั้นอยู่แล้ว แม้ว่าจะเป็นเพียงส่วนหนึ่งของพื้นที่ไดรฟ์ที่รู้จักกันดี แต่จะอ่านก่อนที่คุณจะเขียนอะไรก็ตาม

b) ถ้าคุณทำการซิงโครไนซ์เป็นระยะของอุปกรณ์ RAID จะไม่รู้จัก FS ของคุณ มันเพียงอ่านทุกบล็อคจากทุกอุปกรณ์และเปรียบเทียบสิ่งเหล่านั้น และถ้าคุณไม่ได้ใช้ FS คัดลอกเมื่อเขียน (เช่น ZFS หรือ BTRFS) และไม่เคยเติม FS ของคุณมันเป็นไปได้อย่างสมบูรณ์แบบที่บล็อกจะไม่ถูกกำหนดค่าเริ่มต้นจากมุมมองของ FS เป็นเวลาหลายปี

ทำไมต้องซิงค์กับอุปกรณ์ RAID1 อีกครั้ง

ด้วยเหตุผลเดียวกันกับที่คุณซิงค์กับอุปกรณ์ RAID5 หรือระดับอื่น ๆ (ยกเว้น RAID0) มันอ่านข้อมูลทั้งหมดและเปรียบเทียบ / ตรวจสอบการตรวจสอบ RAID (ใน RAID 5 หรือ 6) หากบิตถูกพลิกในทางใดทางหนึ่ง (เนื่องจากหน่วยความจำ HD พลิกได้เองเนื่องจากโทรศัพท์มือถือของคุณและเพื่อนบ้าน 5 คนของคุณเพิ่งเข้ามาแทรกแซงโดยไม่ตั้งใจในพื้นที่แผ่นเสียงนี้) มันจะตรวจจับความไม่สอดคล้องกัน แต่จะไม่สามารถ ช่วยคุณ. ถ้า OTOH หนึ่งในฮาร์ดไดรฟ์จะรายงานว่า "ฉันไม่สามารถอ่านบล็อกนั้น" ซึ่งน่าจะเป็นมากกว่ากับไดรฟ์ที่ล้มเหลวคุณเพียงแค่ตรวจพบความล้มเหลวในช่วงต้นและลดเวลาที่คุณทำงานในโหมดที่เสื่อมโทรม ความล้มเหลวของไดรฟ์ไม่ใช่จากเมื่อคุณสังเกตเห็น) การจู่โจมจะไม่ช่วยคุณถ้าไดรฟ์ตัวหนึ่งล้มเหลวและอีกหนึ่งเดือนต่อมาอีกตัวจะล้มเหลวถ้าคุณไม่ได้

RAID10

ตอนนี้สำหรับ RAID10 ที่กล่าวมาทั้งหมด หลังจาก RAID10 ทั้งหมดเป็นเพียงวิธีที่ชาญฉลาดในการบอกว่า 'ฉันกำลังวางอุปกรณ์ RAID1 สองตัวใน RAID0 คู่'

ข้อแม้:

นี่คือพฤติกรรมที่ไม่ได้กำหนดทั้งหมด ทำไมฉันถึงตรวจสอบบน Linux, การใช้งานmdadm, การใช้งาน RAID ซอฟต์แวร์อื่น ๆ อาจทำงานแตกต่างกัน เคอร์เนลลินุกซ์และ / หรือmdadmเครื่องมือรุ่นอื่น ๆ ที่ฉันใช้อยู่อาจมีลักษณะแตกต่างกัน


1
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โปรดให้การอ้างอิงสำหรับ ฉันเชื่อว่าคำสั่งไม่ถูกต้อง อย่างน้อยก็ให้ตัวอย่างของข้อความแสดงข้อผิดพลาดที่เป็นไปได้ที่จะปรึกษาแหล่งข้อมูลเพื่อตรวจสอบภายใต้สถานการณ์ที่ผลิต
kasperd

1
มันดีกว่า. คุณยืนยันคำสั่งเกี่ยวกับการเขียนเลขศูนย์หรือไม่ ฉันคิดว่ามันไม่ได้เขียนเลขศูนย์ แต่ให้คัดลอกดิสก์หนึ่งแผ่นไปยังอีกแผ่นหนึ่ง
kasperd

1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.ตกอยู่ในอันตรายอะไร ฉันรู้ว่าการอ่านอาจส่งผลในสิ่งใด ๆ แต่เหตุใดจึงเป็นอันตรายบางอย่างสำหรับผู้ใช้หาก (ก) ข้อมูลที่กำลังอ่านไม่ได้ถูกใช้ในที่ใด ๆ และ (ข) การเขียนกำลังจะเกิดขึ้น?
Vegard

1
@kasperd คุณถูกต้องมันจะคัดลอกอุปกรณ์แรกไปยังอุปกรณ์ที่สอง ทดสอบบนurandomอุปกรณ์ที่เริ่มต้นด้วย linux mdadm แสดงให้เห็นว่า 80k แรกยังคงแตกต่างกันเช่นเดียวกับ 48k ที่ผ่านมา อาจเนื่องมาจากการปัดเศษของขนาด RAID เป็นขนาดบล็อก ฉันไม่ได้ทดสอบด้วยขนาดอุปกรณ์ที่แตกต่างกัน แต่ 80 + 48 นั้นมีความแตกต่างในด้านขนาดระหว่างอุปกรณ์ RAID และอุปกรณ์บล็อกพื้นฐาน
Torinthiel

1
สิ่งหนึ่งที่ควรพิจารณาคือโดยปกติในระหว่างการเริ่มต้นระบบการตรวจค้นจะอ่านดิสก์ A และคัดลอกไปยังดิสก์ B เสมอทำไม? เนื่องจากคุณสามารถใช้ดิสก์ในขณะที่กำลังเริ่มต้นคุณอาจมีข้อมูลเขียนที่บล็อก 100,000 เมื่อการโจมตีเริ่มต้นไปที่บล็อกนั้นทั้ง A และ B เหมือนกันอยู่แล้วจึงไม่มีอะไรเกิดขึ้น ถ้ามันเป็นศูนย์บล็อกแทนมันจะลบข้อมูลที่ดี ดังนั้นอีกครั้งฉันเห็นเหตุผลสองประการเพื่อให้แน่ใจว่าบล็อกเหมือนกัน: "เสร็จแล้วเสมอ" และ "เพื่อให้คุณสามารถเรียกใช้เช็คในภายหลัง" - ฉันยังถามถึงประโยชน์ของการตรวจสอบอีกด้วย การอ่านเป็นสิ่งที่ดีเปรียบเทียบ? ไม่แน่ใจ.
Michael Graff

5

โปรดจำไว้ว่า RAID 1 เป็นมิรเรอร์และ RAID 10 เป็นแถบมิรเรอร์

คำถามคือว่าดิสก์ใดในมิรเรอร์แต่ละตัวที่มีข้อมูลที่ถูกต้อง? ในอาร์เรย์ที่สร้างขึ้นใหม่ไม่สามารถทราบได้เนื่องจากดิสก์อาจมีข้อมูลที่แตกต่างกัน

โปรดจำไว้ว่า RAID ทำงานในระดับต่ำมาก มันไม่รู้ระบบไฟล์หรือข้อมูลใด ๆ ที่อาจถูกเก็บไว้ในดิสก์ อาจไม่ได้เป็นระบบแฟ้มในการใช้งาน

ดังนั้นการเริ่มต้นในอาร์เรย์เหล่านี้ประกอบด้วยข้อมูลจากดิสก์หนึ่งแผ่นในแต่ละมิรเรอร์ที่ถูกคัดลอกตามที่เป็นไปยังดิสก์อื่น

นี่ก็หมายความว่าอาร์เรย์นั้นปลอดภัยที่จะใช้ตั้งแต่วินาทีที่สร้างขึ้นและสามารถเริ่มต้นได้ในพื้นหลัง ตัวควบคุม RAID ส่วนใหญ่ (และ Linux mdraid) มีตัวเลือกสำหรับสิ่งนี้หรือทำโดยอัตโนมัติ


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Michael Hampton

1

ใส่เพียงเพราะดิสก์ใหม่สองแผ่นไม่คาดว่าจะเป็นสำเนาที่สมบูรณ์แบบซึ่งกันและกันจากการโจมตี

พวกเขาจะต้องกลายเป็นสำเนาที่สมบูรณ์แบบของกันและกัน

นอกจากนี้การเริ่มต้นรวมถึงการตั้งค่า superblock เมตาดาต้าด้วยข้อมูลเกี่ยวกับการกำหนดค่าอาร์เรย์เช่นกัน

ไฟล์ / proc / mdstat ควรบอกคุณว่าอุปกรณ์ได้เริ่มทำงานแล้วมิเรอร์กำลังถูกสร้างขึ้นใหม่และ ETA ของการสร้างใหม่ให้เสร็จสิ้น การสร้างใหม่ทำได้โดยใช้แบนด์วิดท์ I / O ที่ไม่ทำงาน ดังนั้นระบบของคุณควรตอบสนองแม้ว่าไฟ LED ของดิสก์จะแสดงกิจกรรมมากมาย

กระบวนการสร้างใหม่นั้นโปร่งใสดังนั้นคุณสามารถใช้อุปกรณ์ได้จริงแม้ว่ามิเรอร์นั้นจะอยู่ระหว่างการสร้างใหม่


2
แต่ทำไมพวกเขาต้องเป็นสำเนาที่สมบูรณ์แบบของกันและกัน? สิ่งที่อาจแตกจากทั้งสองไม่สอดคล้องกันในภาคที่ไม่เคยใช้ระบบไฟล์?
kasperd

@kasperd RAID ถูกนำมาใช้ในระดับที่ต่ำกว่าระบบไฟล์ใด ๆ ดังนั้นคำถามจะกลายเป็น "ระบบไฟล์" ที่คุณอ้างอิง
Taemyr

@Taemyr ฉันไม่ได้อ้างถึงระบบไฟล์ใด ๆ เลือกสิ่งที่คุณต้องการและอธิบายสิ่งที่จะทำลายโดยใช้มันบน RAID-1 โดยที่แบบจำลองไม่ได้ซิงค์กันก่อนที่จะเริ่มต้นระบบไฟล์
kasperd

@kasperd ไม่มีระบบไฟล์ใดที่จะแตกที่ RAID ระดับการทำงาน
Taemyr

1
ในกรณีของฉันในฐานะโปสเตอร์ดั้งเดิมฉันไม่สนใจว่าระบบไฟล์ใด ฉันรู้ว่าไม่มีระบบไฟล์ที่จะอ่านส่วนที่ไม่เคยเขียนดังนั้นสถานะที่ไม่แน่นอนของภาคที่ไม่ได้เขียนนั้นไม่สำคัญ
Michael Graff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.