1. ที่เก็บข้อมูลแบบ Flash
มันขึ้นอยู่กับประเภทของดิสก์ (ฮาร์ดไดร์ฟดั้งเดิมเทียบกับโซลิดสเตตดิสก์) หรือตัวแปรอื่น ๆ ที่ฉันอาจไม่ทราบหรือไม่? มันเกิดขึ้น (ถ้ามี) เฉพาะใน Linux หรือมีอยู่ในระบบปฏิบัติการอื่นหรือไม่?
เมื่อคุณมีทางเลือกคุณไม่ควรให้พื้นที่จัดเก็บข้อมูลแบบแฟลชสูญเสียพลังงานโดยไม่ต้องปิดเครื่องใหม่
ในที่เก็บข้อมูลราคาประหยัดเช่นการ์ด SD คุณสามารถคาดหวังว่าจะลบบล็อกการลบทั้งหมด (ใหญ่กว่า 4KB หลายเท่า) สูญเสียข้อมูลซึ่งอาจเป็นไฟล์ต่าง ๆ หรือโครงสร้างที่สำคัญของระบบไฟล์
SSD ที่มีราคาแพงบางตัวอาจเรียกร้องให้รับประกันที่ดีกว่าในกรณีที่ไฟฟ้าขัดข้อง อย่างไรก็ตามการทดสอบของบุคคลที่สามแสดงให้เห็นว่า SSD ราคาแพงจำนวนมากไม่สามารถทำได้ เลเยอร์ที่ทำการแมปบล็อกใหม่สำหรับ "การปรับระดับการสึกหรอ" นั้นซับซ้อนและเป็นกรรมสิทธิ์ ความล้มเหลวที่เป็นไปได้รวมถึงการสูญเสียข้อมูลทั้งหมดในไดรฟ์
เมื่อใช้กรอบการทดสอบของเราเราจะทำการทดสอบชุดผลิตภัณฑ์ 17 รายการจากผู้จำหน่ายหกรายโดยใช้วงจรการฉีดผิดมากกว่าสามพันวงจร ผลการทดลองของเราพบว่าอุปกรณ์ SSD ที่ทดสอบ 14 รายการจาก 17 ชิ้นมีพฤติกรรมความล้มเหลวที่น่าประหลาดใจภายใต้ข้อผิดพลาดด้านพลังงานรวมถึงความเสียหายของบิตการเขียนที่ไม่เหมาะสมการเขียนที่ไม่สามารถระบุได้
2017: https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat
2013: https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf?wptouch_preview_theme=enabled
2. การหมุนฮาร์ดดิสก์ไดรฟ์
การหมุน HDDs มีลักษณะแตกต่างกัน เพื่อความปลอดภัยและความเรียบง่ายฉันขอแนะนำให้สมมติว่าพวกเขามีความไม่แน่นอนในทางปฏิบัติเช่นเดียวกับที่เก็บข้อมูลแบบแฟลช
เว้นแต่คุณจะมีหลักฐานเฉพาะซึ่งคุณไม่ชัดเจน ฉันไม่มีตัวเลขเปรียบเทียบสำหรับการหมุน HDD
HDD อาจทำให้ส่วนที่เขียนไม่สมบูรณ์มีการตรวจสอบที่ไม่ดีซึ่งจะทำให้เราล้มเหลวในการอ่านที่ดีในภายหลัง พูดอย่างกว้าง ๆ ว่าโหมดความล้มเหลวของ HDD นั้นคาดว่าจะสมบูรณ์ ระบบไฟล์ Linux ดั้งเดิมได้รับการออกแบบโดยคำนึงถึงมัน พวกเขามุ่งมั่นที่จะรักษาสัญญาfsync()
ในการเผชิญกับความผิดพลาดของการสูญเสียพลังงานประเภทนี้ (เราอยากเห็นสิ่งนี้รับประกันใน SSD)
อย่างไรก็ตามฉันไม่แน่ใจว่าระบบไฟล์ลีนุกซ์จะสามารถทำสิ่งนี้ได้หรือไม่
การบู๊ตครั้งถัดไปหลังจากความผิดประเภทนี้อาจต้องซ่อมแซมระบบไฟล์ นี่เป็น Linux มันเป็นไปได้ที่การซ่อมแซมระบบไฟล์จะถามคำถามที่คุณไม่เข้าใจซึ่งคุณสามารถกด Y ได้เท่านั้นและหวังว่ามันจะเรียงลำดับตัวเองออกมา
2.1 หากคุณไม่ทราบว่าสัญญา fsync () คืออะไร
สัญญา fsync () เป็นแหล่งที่มาของข่าวดีและข่าวร้าย คุณต้องเข้าใจข่าวดีก่อน
ข่าวดี: fsync()
มีการบันทึกไว้เป็นอย่างดีว่าเป็นวิธีที่ถูกต้องในการเขียนข้อมูลไฟล์เช่นเมื่อคุณกด "บันทึก" rename()
และมันก็เป็นที่เข้าใจกันอย่างกว้างขวางว่าบรรณาธิการข้อความเช่นต้องแทนที่ไฟล์ที่มีอยู่โดยใช้อะตอม สิ่งนี้มีไว้เพื่อให้แน่ใจว่าคุณเก็บไฟล์เก่าไว้เสมอหรือรับไฟล์ใหม่ (ซึ่งถูกfsync()
แก้ไขก่อนเปลี่ยนชื่อ) คุณไม่ต้องการถูกปล่อยให้มีไฟล์ใหม่เป็นแบบครึ่งภาษา
ข่าวร้าย: เป็นเวลาหลายปีการเรียกใช้ fsync () บนระบบไฟล์ Linux ที่ได้รับความนิยมมากที่สุดอาจทำให้ทั้งระบบหยุดทำงานชั่วคราวเป็นเวลาสิบวินาที เนื่องจากแอปพลิเคชันไม่สามารถทำอะไรเกี่ยวกับเรื่องนี้ได้จึงเป็นเรื่องปกติที่จะใช้การเปลี่ยนชื่อ () โดยไม่ใช้ fsync () ในแง่ดีซึ่งดูเหมือนจะเชื่อถือได้ในระบบไฟล์นี้
ดังนั้นแอปพลิเคชันที่มีอยู่ซึ่งไม่ได้ใช้ fsync () อย่างถูกต้อง
โดยทั่วไปเวอร์ชันต่อไปของระบบไฟล์นี้จะหลีกเลี่ยงการแฮงค์ fsync () ในเวลาเดียวกันกับที่มันเริ่มพึ่งพาการใช้ fsync () ที่ถูกต้อง
ทั้งหมดนี้เป็นสิ่งที่ไม่ดีเลยทีเดียว การทำความเข้าใจกับประวัตินี้อาจไม่ได้รับความช่วยเหลือจากน้ำเสียงที่ไม่ไยดีและใช้คำหยั่งรู้ซึ่งใช้โดยผู้พัฒนาเคอร์เนลที่ขัดแย้งกันหลายคน
ความละเอียดในปัจจุบันคือระบบไฟล์ Linux ที่เป็นที่นิยมในปัจจุบัน ค่าเริ่มต้นเพื่อสนับสนุนรูปแบบการเปลี่ยนชื่อ () โดยไม่ต้องใช้ fsync ()ใช้ "ความเข้ากันได้ข้อผิดพลาดข้อบกพร่อง" กับรุ่นก่อนหน้า สิ่งนี้สามารถปิดการใช้งานได้ด้วยตัวเลือกการเมานnoauto_da_alloc
ต์
นี่ไม่ใช่การป้องกันที่สมบูรณ์ โดยพื้นฐานแล้วมันจะทำการล้าง IO ที่ค้างอยู่ที่เวลาเปลี่ยนชื่อ () แต่จะไม่รอให้ IO ทำการทำให้เสร็จสิ้นก่อนที่จะเปลี่ยนชื่อ มันดีกว่าหน้าต่างอันตราย 60 วินาที! ดูเพิ่มเติมที่คำตอบของระบบไฟล์ใดที่จำเป็นต้องใช้ fsync () เพื่อความปลอดภัยจากการชนเมื่อแทนที่ไฟล์ที่มีอยู่ด้วยการเปลี่ยนชื่อ ()
ระบบไฟล์ที่ได้รับความนิยมน้อยกว่าบางระบบไม่มีการป้องกัน XFS ปฏิเสธที่จะทำเช่นนั้น และUBIFSก็ไม่ได้นำไปใช้เช่นกันอาจยอมรับได้ แต่ต้องการงานจำนวนมากเพื่อให้เป็นไปได้ หน้าเดียวกันชี้ให้เห็นว่า UBIFS มีปัญหา "สิ่งที่ต้องทำ" อื่น ๆ สำหรับความสมบูรณ์ของข้อมูลรวมถึงการสูญเสียพลังงาน UBIFS เป็นระบบไฟล์ที่ใช้โดยตรงกับที่เก็บข้อมูลแฟลช ฉันจินตนาการว่าความยากลำบากบางอย่างที่ UBIFS กล่าวถึงกับที่เก็บข้อมูลแฟลชอาจเกี่ยวข้องกับข้อบกพร่องของ SSD