จำลองความเสียหายของไฟล์บน Linux โดยทางโปรแกรมหรือไม่ (สำหรับการทดสอบความทนทานของฐานข้อมูล)


2

โดยพื้นฐานแล้วฉันต้องการfwrite() nไบต์และมีการ< nเขียนไบต์บนดิสก์จริงหรือสิ่งประดิษฐ์อื่น ๆ ที่ไม่สอดคล้องกันอาจเกิดขึ้น (เช่นภาคที่ถูกเขียนออกมาจากคำสั่ง)

ฉันรู้ว่าฉันสามารถทำได้ในระดับฮาร์ดแวร์ด้วย:

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

.. แต่ฉันไม่ชอบเคสด้านบนเพราะ:

  • ฉันไม่ต้องการที่จะทำลายฮาร์ดแวร์ของฉันด้วยการสูญเสียพลังงานที่แท้จริง
  • การจำลองการสูญเสียพลังงานที่เกิดขึ้นจริงเป็นแบบแมนนวลและ / หรือยากและน่าเกลียดที่จะทำให้เป็นแบบอัตโนมัติ
  • การจำลองการสูญเสียพลังงานเวอร์ชวลไลเซชันนั้นดีกว่า แต่ฉันคิดว่ามันน่าจะช้ากว่าที่จะวิ่ง 100 ครั้งกับฐานข้อมูลโดยรอให้บูท VM และน่าเกลียดที่ต้องสร้างตรรกะเพื่อลองเข้าสู่ระบบผ่านทาง SSH อีกครั้งจนกว่า VM จะบูต

.. ดังนั้นฉันกำลังมองหาทางออกที่รวดเร็วและง่ายขึ้นในการสร้างระบบอัตโนมัติ

ฉันมีความคิดเล็กน้อย:

1) ฆ่ากระบวนการด้วย $ kill -9 dbms_pid

สิ่งนี้อาจไม่ทำงานอย่างที่ฉันคิดว่าทุกสิ่งที่ให้ไว้จะfwrite()ถูกเพิ่มลงในบัฟเฟอร์ของเคอร์เนล (นี่คือการเก็งกำไร) และหลังจากการฆ่าเคอร์เนลอาจเป็นเพียงแค่ล้างบัฟเฟอร์ตามปกติในดิสก์

2) ถอนติดตั้งระบบไฟล์กลางเขียน

ฉันไม่คิดว่าจะยกเลิกการต่อเชื่อมทำงานในขณะที่มีไฟล์เปิดอยู่ในระบบไฟล์

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

ฉันไม่คิดว่าจะมีกลไกสำหรับสิ่งนั้น การเปลี่ยนชื่อไฟล์อาจไม่หยุดการเขียนไปยังระบบไฟล์เนื่องจากไดรเวอร์ลูปแบ็คอาจอ้างอิงถึง inode หรือการอ้างอิงภายในบางอย่าง

การเลิกเมานท์อุปกรณ์ลูปแบ็คอาจมีปัญหาแบบเดียวกันคือไม่สามารถทำได้เมื่อมีคนเปิดไฟล์ไว้

การคัดลอกจาก block-device-as-a ไฟล์สามารถใช้งานได้ (เว้นแต่ว่ามันจะล็อคแบบเอกสิทธิ์เฉพาะบุคคลซึ่งอาจเป็น) แต่เนื่องจากการคัดลอกเนื้อหาไม่ใช่การดำเนินการแบบอะตอมมิกอาจทำให้สิ่งประดิษฐ์ไม่เกี่ยวข้องกับการปิดเครื่อง

4) ให้ระบบไฟล์โฮสต์ที่ด้านบนของ LVM และถ่ายรูปหน้าจอ

นี่อาจเป็นความคิดที่ทำงานได้ดีที่สุดของฉัน การถ่ายภาพระดับเสียงของ LVM เป็นแบบอะตอมและสามารถจำลองการสูญเสียพลังงานได้หรือไม่? ฉันเดาว่าบัฟเฟอร์ที่ไม่ได้ล้างข้อมูล / หน้าไม่ได้ถูกนำมาพิจารณาสำหรับภาพรวม (ซึ่งดีสำหรับการจำลองของฉัน) และฉันหวังว่าจะแนะนำสิ่งประดิษฐ์เดียวกันกับการสูญเสียพลังงานเช่นfwrite()เนื้อหาถูกเขียนเพียงครึ่งเดียว?

จะมีการเขียนที่ไม่เป็นไปตามคำสั่งหรือหน้าที่เขียนไปยังไดรฟ์ข้อมูล LVM จะถูกนำไปใช้ตามลำดับหรือไม่


คุณมีความคิดอื่น ๆ อีกไหม? คุณคิดอย่างไรเกี่ยวกับตัวเลือก? คุณเห็นด้วยหรือไม่ 4) ความคิดที่ดีที่สุดคืออะไร?

ทำไมฉันถึงทำแบบนี้: โดยพื้นฐานแล้วฉันกำลังพัฒนาฐานข้อมูลที่มีความทนทานฉันต้องการทดสอบโดยการสร้างสคริปต์อัตโนมัติที่จะทำการทดสอบการทรมานรอบใหญ่โดยให้ข้อมูลบันทึกไว้ในขณะที่จำลองการสูญเสียพลังงานกับ อย่างน้อยดิสก์จากนั้นตรวจสอบว่าไม่มีข้อมูลที่ได้รับการยืนยันและฐานข้อมูลสามารถกู้คืนได้อย่างปลอดภัย

คำตอบ:


0

สันนิษฐานว่าเป็นไดรฟ์ SATA ซึ่งอาจเป็น "hot swap"

ดังนั้นการทำการบ้านของคุณก็คือการสลับร้อนของระบบของคุณเพื่อที่คุณจะไม่ปล่อย {ควันวิเศษ} จากนั้นดึงไดรฟ์ระหว่างการทดสอบการทรมาน

ฉันจะดูแคดดี้ไดรฟ์แบบ hot-swap แทนที่จะพยายามถอดปลั๊กออกด้วยตนเอง

อ่านเพิ่มเติมได้ที่: https://serverfault.com/questions/690609/


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