การสูญเสียพลังงานที่ไม่คาดคิดเป็นอันตรายต่อการติดตั้ง Linux หรือไม่


22

ฉันกำลังพัฒนาแอปพลิเคชั่นบนกระดานฝังตัว Linux (รันเดเบียน) เช่น Raspberry Pi, Beagle Board / Bone หรือ olimex บอร์ดทำงานบนสภาพแวดล้อมที่มีการตัดกระแสไฟฟ้าโดยไม่คาดคิด (มีความซับซ้อนในการวาง PSU และอื่น ๆ ) และมันจะเกิดขึ้นทุกวันสองครั้ง ฉันสงสัยว่าการตัดไฟที่ไม่คาดคิดอาจทำให้เกิดปัญหา / ปัญหาในระบบปฏิบัติการ Linux หรือไม่ หากเป็นสิ่งที่ฉันควรกังวลคุณจะแนะนำอะไรเพื่อป้องกันความเสียหายที่เกิดขึ้นกับระบบปฏิบัติการเมื่อไฟดับอย่างไม่คาดคิด

PS แอปพลิเคชันต้องเขียนข้อมูลบางอย่างไปยังสื่อบันทึกข้อมูล (การ์ด SD) ฉันคิดว่ามันจะไม่เหมาะที่จะเมานต์แบบอ่านอย่างเดียว


1
อยู่ห่างจาก ext2 (ใช้ ext3 หรือสูงกว่า) ในระบบไฟล์ที่คุณแก้ไขบ่อยครั้งและคุณควรจะยอมรับได้เป็นส่วนใหญ่
LawrenceC

ถ้าคุณเป็นมากระมัดระวังในการ spec'ing SD การ์ดของคุณบัตรไม่รับประกันอะไรถ้าคุณตัดอำนาจโดยไม่คาดคิด การ์ดอาจอยู่ในช่วงกลางของการเลื่อนระดับการสวมใส่ซึ่งนำไปสู่การทุจริตแปลก ๆ ที่ไม่คาดคิด - ซึ่งอาจอยู่ในพาร์ติชั่นอื่น!
Derobert

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

อย่างต่อเนื่อง เกือบจะใช้งานได้แล้ว ไฟล์ปัจจุบันใหม่จะต้องใช้ธุรกรรมที่จำเป็นต้องประมวลผลธุรกรรมสองครั้งดังนั้นฉันแน่ใจว่ามีวิธีที่ดีกว่า ไม่ว่าในกรณีใดมันอาจจะเร็วกว่าและปลอดภัยกว่าการคัดลอกไฟล์ทั้งหมดถ้ามันใหญ่
Joe

คำตอบ:


14

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

ตามที่ l0b0 เขียนไว้การใช้ระบบไฟล์ที่ทำเจอร์นัลจะช่วยได้เนื่องจากจะสามารถติดตามสิ่งที่ได้ทำไปจริง นอกเหนือไปจากข้อมูลวิกิพีเดียที่ l0b0 เชื่อมโยงคุณอาจจะสนใจใน /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failureเช่นกัน .

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


10
กระบวนการทั่วไปในรหัสเพื่อป้องกันการขัดจังหวะการเขียนที่ทำให้เกิดความเสียหายกับไฟล์คือแทนที่จะแก้ไข file.name โดยตรงคุณแทนการเขียนไฟล์ file.name.newversion ใหม่ทั้งหมดจากนั้นใช้คำสั่งลบ / เปลี่ยนชื่อเพื่อแทนที่เวอร์ชันเก่าด้วย อันใหม่. คุณต้องเพิ่มโค้ดการล้างข้อมูลเพื่อกู้คืนจากการหยุดชะงักในแต่ละขั้นตอน แต่วิธีการนี้ทำให้สำเนาของไฟล์บนดิสก์ดีเสมอ สิ่งนี้อาจส่งผลกระทบต่อการออกแบบของคุณเนื่องจากทำการอัปเดตไฟล์ขนาดใหญ่เพียงไฟล์เดียวหรือทำการเปลี่ยนแปลงบ่อยครั้งเป็นไฟล์เดียว
Dan Neely

11

เพื่อช่วยลดความเป็นไปได้ที่จะเกิดความเสียหายของระบบปฏิบัติการควรใช้พาร์ทิชัน "ระบบ" และ "ข้อมูล" แยกต่างหากในการ์ด SD ด้วยวิธีนี้คุณสามารถเมาต์พาร์ติชัน "ระบบ" เป็นแบบอ่านอย่างเดียวและใช้ FS ที่มีความยืดหยุ่นสูงในพาร์ติชัน "data"

นอกจากนี้บอร์ดส่วนใหญ่มีความต้องการพลังงานต่ำมากดังนั้นจึงสามารถสำรองแบตเตอรี่ได้ บอร์ด "LiPo rider" สำหรับ Raspberry Pi สามารถใช้เป็นยูพีเอสพื้นฐานเพื่อให้ปิดระบบได้อย่างสะอาดจากการสูญเสียพลังงาน


5

สิ่งนี้จะขึ้นอยู่กับ

  1. ไม่ว่าคุณจะใช้ระบบไฟล์ทำเจอร์นัลและ
  2. แอปพลิเคชันสามารถจัดการการประมวลผลที่ถูกยกเลิกได้ดีเพียงใด

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

อาจเป็นเรื่องยากมากที่จะพูดอะไรที่ชัดเจนเกี่ยวกับระบบที่ซับซ้อนตามสมมติฐาน แต่ซอฟต์แวร์ Linux ที่เสถียรที่สุดดูเหมือนว่าจะสามารถจัดการกับข้อขัดข้องได้ค่อนข้างดี


1

เนื่องจากไม่มีใครพูดถึงระบบไฟล์ที่เฉพาะเจาะจง: ระบบไฟล์ที่ทันสมัยมากขึ้น (ext3, ext4, ntfs) จึงสามารถจัดการกับข้อขัดข้องได้ดีกว่าระบบไฟล์รุ่นเก่า (ext2, ext, fat32) เนื่องจากการทำเจอร์นั

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

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