dd ทำการตรวจสอบทุกชนิดหรือไม่?


16

ฉันใช้ddเพื่อคัดลอกข้อมูลจากฮาร์ดไดรฟ์เก่าไปยังใหม่ ฉันต้องการตรวจสอบให้แน่ใจว่าความสมบูรณ์ของข้อมูลนั้นปลอดภัย

ในคำตอบนี้Gilles พูด

หาก [dd] ถูกยกเลิกสำเร็จการสำรองข้อมูลจะถูกต้องยกเว้นข้อผิดพลาดของฮาร์ดแวร์ ...

นั่นหมายความว่าอะไรกันแน่? ไม่ddมีชนิดของการสร้างขึ้นในการตรวจสอบบางอย่าง?

หากฉันจะใช้ rsync แทนฉันจะใช้งานรหัสผ่านที่สองด้วย--checksumเช่นกันเพื่อตรวจสอบ ความหวาดระแวงแบบนั้นเป็นธรรมหรือไม่?


กำหนด "ความมั่นคงปลอดภัย"
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersenฉันหมายถึงสำเนานั้นเหมือนต้นฉบับ
Sparhawk

หากคุณมีไฟล์แบบแฟลตวิธีดั้งเดิมสำหรับการคัดลอกไฟล์คือการใช้ tar หรือ cpio GNU tar มีธงตรวจสอบ: gnu.org/software/tar/manual/html_section/tar_81.html วันนี้rsyncอาจจะง่ายที่สุด
Thorbjørn Ravn Andersen

1
"การจำกัดความผิดพลาดของฮาร์ดแวร์" เป็นการระบุว่าไม่ได้ทำการตรวจสอบใด ๆ หากเป็นเช่นนั้นก็อาจตรวจพบความล้มเหลวของฮาร์ดแวร์
Barmar

คำตอบ:


20

ddหรือแอปพลิเคชันอื่น ๆ ไม่มี "การตรวจสอบในตัว" ในแง่ที่คุณอาจคิดว่า: มันไม่อ่านข้อมูลจากสื่อบันทึกข้อมูลเพื่อเปรียบเทียบกับสิ่งที่เขียน นั่นคืองานของระบบปฏิบัติการ

มันเป็นไปไม่ได้จริงๆที่จะทำการตรวจสอบการอ่านลงไปที่ฮาร์ดแวร์จากแอปพลิเคชัน มันจะใช้งานได้ในบางสถานการณ์ แต่โดยส่วนใหญ่แล้วจะไม่ประสบความสำเร็จ แอปพลิเคชันสามารถอ่านสิ่งที่เพิ่งเขียนถ้ามันเขียนโดยตรงไปยังสื่อเก็บข้อมูลแต่โดยทั่วไปแล้วจะอ่านกลับจากแคชในหน่วยความจำซึ่งจะไม่ให้ความมั่นใจที่เป็นประโยชน์ใด ๆ ในตัวอย่างที่คุณกล่าวถึง , ddการเขียนไปยังท่อและในกรณีที่มีการควบคุมสิ่งที่เกิดขึ้นกับข้อมูลที่ต่อสายลงไม่มี ในตัวอย่าง rsync ของคุณรหัสผ่านที่สองของrsync --checksum ไม่มีประโยชน์: ในทางทฤษฎีแล้วมันสามารถจับข้อผิดพลาดได้ แต่ในทางปฏิบัติหากเกิดข้อผิดพลาดขึ้นรอบที่สองอาจจะไม่รายงานสิ่งผิดพลาดดังนั้นคุณจึงต้องพยายามทำบางสิ่งที่ไม่ได้ให้การรับรองที่มีประโยชน์

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

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

ในห่วงโซ่ของการคัดลอกข้อมูลข้อผิดพลาดสองชนิดสามารถเกิดขึ้นได้

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

ฉันเชื่อว่าสื่อจัดเก็บข้อมูลส่วนใหญ่ใช้ FEC เพียงพอในการตรวจจับ + แก้ไขการพลิกเพียงครั้งเดียว
Gardenhead

2
แน่นอนถ้าคุณคัดลอกฮาร์ดดิสก์ทั้งหมดด้วย dd แล้วเปรียบเทียบฮาร์ดดิสก์ที่คุณรู้ว่าใช้งานได้ทันทีเนื่องจากแคชไม่ใหญ่พอ
Joshua

1
ขอบคุณสำหรับคำตอบ (+1) ฉันอาจจะพูดถึงฉันใช้พื้นฐานอย่างเป็นธรรมdd if=/dev/sdc of=/dev/sdb bs=4Mเพื่อความเข้าใจของผมคือว่าปัญหาของการไม่สนใจข้อผิดพลาดและอินเทอร์เน็ตความเร็วสูง (มากกว่าหรือน้อยกว่าเมื่อเทียบกับcat) เป็นที่สงสัย คุณกำลังบอกว่าจะตรวจสอบขนาดโดยการติดตั้งแล้วdf?
Sparhawk

4

ไม่ddไม่ได้ทำการยืนยันที่ชัดเจน หากคุณต้องการ / ต้องการสำเนาดิสก์ของคุณหรือส่วนใดส่วนหนึ่งที่ผ่านการตรวจสอบทางนิติวิทยาศาสตร์ให้ใช้dcflddซึ่งเป็นเวอร์ชันที่ได้ddรับการพัฒนาที่ได้รับการพัฒนาโดยแล็บนิติเวชคอมพิวเตอร์ของกระทรวงกลาโหมสหรัฐอเมริกา


4

วิธีเดียวที่จะ "มั่นใจ" คือการทำบัตรผ่านอ่านและเปรียบเทียบเพิ่มเติม (หลังจากวางแคช)

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

ความหวาดระแวงแบบนั้นเป็นธรรมหรือไม่?

หากคุณไม่สามารถเชื่อถือฮาร์ดแวร์ของคุณให้เชื่อถือได้สิ่งต่าง ๆ มีความซับซ้อน ...


มันซับซ้อนกว่านี้ทั้งเกี่ยวกับการอ่านและเปรียบเทียบและddการตรวจจับข้อผิดพลาด
Gilles 'หยุดความชั่วร้าย' ใน

ถ้าคุณไปไกลขนาดนั้นddมีปัญหาข้อมูลเสียหายร้ายแรงแต่กรณีพิเศษเช่นสิ่งเหล่านี้ไม่ได้เป็นส่วนหนึ่งของคำถาม
frostschutz

ddปัญหาความเสียหายของผู้ที่สามารถปรับการตรวจสอบข้อมูลการผลิตโดยใช้ วิธีการแก้ปัญหาที่แท้จริงคือการใช้อะไร แต่เนื่องจากความเสียหายของข้อมูลเงียบเป็นพิเศษของdd dd
Gilles 'หยุดความชั่วร้าย' ใน

2
@Gilles หรือเพียงไม่บอกddให้ละเว้นข้อผิดพลาด คุณไม่สามารถตำหนิโปรแกรมที่ทำสิ่งที่คุณขอให้ทำ
ทำเครื่องหมาย

@ มาร์กและวิธีการภาวนาให้คุณบอกddไม่ให้ละเว้นข้อผิดพลาด? และไม่conv=noerrorไม่ใช่คำตอบที่ถูกต้อง ดูคำตอบของ frostschutzสำหรับตัวอย่าง ฉันทำตำหนิการออกแบบddสำหรับการทำข้อผิดพลาดการละเว้นโหมดเริ่มต้นและหนึ่งที่ไม่สามารถปิดได้โดยไม่ทราบกลไกภายในของตนได้อย่างแม่นยำมาก
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

2

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

โดยปกติแล้วฉันใช้ md5 หรือ sha1 hash เพื่อตรวจสอบว่าข้อมูลไม่เป็นอันตรายโดยการอ่านทั้งต้นทางและปลายทางอีกครั้งเช่น:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

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


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

miracle173 แต่หลังจากซิงค์แล้วระบบปฏิบัติการไม่ได้เก็บไว้ในแคชในสิ่งที่เขียนไว้? ดังนั้นฉันไม่แน่ใจว่าจะยกเลิกการต่อเชื่อมจะล้างแคชทั้งหมดจาก RAM
Matt

1

จากman dd:

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

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

ddตรวจสอบขนาดบล็อกอินพุต / ouput ที่ตรงกันทุกครั้งที่คัดลอกบล็อก หากไม่เป็นเช่นนั้นจะจัดการกับข้อผิดพลาดด้วยคำเตือนหรือข้อผิดพลาดร้ายแรง (แทนที่ด้วยnoerror) นั่นเป็นเหตุผลที่ddทำงานได้ตลอดเวลา

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


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