เป็นไปได้หรือไม่ที่จะสลับเพียงหนึ่งบิตเพื่อให้ไฟล์ของฉันแสดงตัวอักษร“ Q” แทน“ S”


22

ในแอปพลิเคชันของเราเราใช้ Hibernate และ PostgreSQL เพื่อเก็บข้อมูล ในตารางฐานข้อมูลหนึ่งในเรามีคอลัมน์ discriminator ซึ่งระบุเช่น "TIPPSPIEL" มันเป็นสตริงคงที่และไม่สามารถจัดการได้โดยผู้ใช้ใด ๆ

ทันใดนั้นเรามีหนึ่งรายการในตารางขนาดใหญ่นี้ที่เรามี "TIPPQPIEL" แทนที่จะเป็น "TIPPSPIEL" เราไม่มีเงื่อนงำว่าสิ่งนี้จะเกิดขึ้นได้อย่างไร

เป็นไปได้หรือไม่ว่าฮาร์ดไดรฟ์ของเราสลับหนึ่งบิตดังนั้นตัวอักษร "S" ของเราจึงไม่ถูกเข้ารหัสเป็น "1010001" อีกต่อไป แต่กลายเป็น "Q" บนฮาร์ดดิสก์โดยเปลี่ยนไปหนึ่งบิตเช่นนี้: 1010011?

ฉันไม่ใช่ผู้เชี่ยวชาญเรื่องฟิสิกส์ bit bit แต่ฉันเดาว่า OS หรือดิสก์มี checksums และสิ่งอื่น ๆ เพื่อให้แน่ใจว่าสิ่งนี้จะไม่เกิดขึ้น

เป็นไปได้หรือไม่ที่จะสลับเพียงหนึ่งบิตเพื่อให้ไฟล์ของฉันแสดงตัวอักษร "Q" แทน "S"

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


ฉันอยากจะคิดว่านี่มาจากความทรงจำที่ผิดพลาด คุณยังมีบันทึกอยู่หรือไม่เมื่อมีการเขียนคอลัมน์นั้น
ott--

1
มันน่าจะเป็นไปได้ แต่เป็นไปได้บิตในการขนส่งถูกพลิกด้วยความสม่ำเสมอระดับสูงดู 'bitsquatting'
Sirch

คำตอบ:


10

มันยากมากที่เราเห็นคำถามที่น่าสนใจอย่างแท้จริงในเว็บไซต์นี้ดังนั้นขอขอบคุณก่อนอื่น

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

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

มันเป็นสิ่งที่แปลก แต่สิ่งนี้อาจเกิดขึ้นหลายครั้งต่อวินาทีทั่วโลก


1
คุณพูดถูกมันเป็นการตั้งค่าดิสก์แบบ non-Raid ในกรณีนี้ ขณะที่การวิเคราะห์เพิ่มเติมของฉันแสดงว่ามันเกิดขึ้นนานหลังจากบันทึกถูกเขียน
Janning

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

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

ควรทำคำถามนี้เป็นที่ยอมรับหรือไม่
Deer Hunter

@psusi เป็นไปไม่ได้ในขณะที่คุณเพียงแค่ต้องพลิกบิตในเซกเตอร์เพื่อให้ ECC ออกมาอย่างถูกต้อง ผู้ผลิตดิสก์ไม่น่าจะเป็นไปได้ แต่เป็นไปได้ที่อ้างถึงอัตราข้อผิดพลาดสูงพอที่คุณควรคาดหวังที่จะเห็นบางอย่าง ผมเคยได้ยินข่าวลือที่ว่าคน ZFS เห็นพวกเขา (เนื่องจาก checksums ข้อมูล ZFS ระดับ) ...
derobert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.