การคัดลอกเอาต์พุตคอนโซลของ dd ไปยังไฟล์รวมถึงคอนโซล


0

ฉันพยายามที่จะทำภาพฮาร์ดไดรฟ์โดยใช้ dd ซึ่งให้ข้อผิดพลาด I / O ดังนั้นฉันจึงเพิ่มพารามิเตอร์ 'noerror' แต่ฉันต้องการติดตามข้อผิดพลาดเพื่อพยายามกู้คืน

ความพยายามในปัจจุบันของฉันคือ:

sudo dd if=/dev/sdb bs=1M conv=sync,noerror of=output.img 2>&1 | tee output.log

ด้วยสิ่งนี้ทั้ง output.img และ output.log ถูกสร้างขึ้น แต่ทั้งคู่มีขนาด 0 ไบต์และเมื่อยกเลิก dd ไม่มีเอาต์พุตใน echoed ไปยังเทอร์มินัล

ฉันต้องการลองใช้ตัวเลือก 'noerror' ก่อนเครื่องมือเช่น ddrescue เพราะฉันคุ้นเคยกับวว

นอกจากนี้ไดรฟ์นี้มีพาร์ติชัน NTFS เดียวดังนั้นพอยน์เตอร์เกี่ยวกับวิธีการกู้คืนพาร์ติชัน NTFS ที่มีบิตหายไปจะได้รับการชื่นชม (ไดรฟ์คือ 500GB และข้อผิดพลาดแรกที่ฉันพบคือประมาณ 30GB)

ขอบคุณ!


แม้ว่าคุณจะหยุดก็ยังควรสร้างข้อความบอกเลิกกับระเบียนในและนอกและจำนวนไบต์คัดลอกเว้นแต่คุณจะใช้dd kill -15
AFH

ฉันรู้แล้วและเพิ่งจะยกเลิกมันด้วย ^ C
Ansel Pol

จากนั้นคุณควรจะมีบรรทัดสรุปยกเว้นว่าการคาดการณ์ของAttieนั้นถูกต้องที่ddไม่เคยเริ่มต้นแม้ว่าฉันจะไม่สามารถสร้างการรันที่ไม่มีเอาต์พุตได้ - ฉันจะได้รับสรุปเสมอ
AFH

1
คุณสามารถตรวจสอบว่าddทำงานจริงหรือไม่หลังจากเรียกใช้sudoคำสั่งโดยการพิมพ์ps -efl | grep "dd "ในเทอร์มินัลอื่น
AFH

คำตอบ:


1

ฉันขอแนะนำอย่างยิ่งให้คุณใช้ddrescue- อย่าหลีกเลี่ยงเครื่องมือที่เหมาะกับงานการรันมันไม่ยากและคุณจะช่วยให้คุณเครียด

การร้องขอนั้นง่าย:

วิ่งครั้งแรก:

  • -p - จัดสรรพื้นที่ล่วงหน้า
  • -b 4M - ใช้ขนาดเซกเตอร์ขนาดใหญ่เพื่อความเร็ว
ddrescue -p -b 4M ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

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

  • -b 512 - ใช้ขนาดเซกเตอร์ที่เล็กลงเพื่อลองและเติมลงในช่องว่าง
  • -r 10 - ใช้การลองส่งซ้ำหลายครั้ง
ddrescue -b 512 -r 10 ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

ส่วนที่มีข้อผิดพลาดในการอ่าน (โดยค่าเริ่มต้น) จะมีเลขศูนย์และคุณจะจบลงด้วยไฟล์บันทึกที่คล้ายกับด้านล่าง:

#      pos        size  status
0x00000000  0x00014E00  +
0x00014E00  0x00000200  -
0x00015000  0x00005800  +
0x0001A800  0x00000200  -
0x0001AA00  0x00028000  +
0x00042A00  0x00000200  -
0x00042C00  0x00125400  +

เส้นที่ทำเครื่องหมาย+คือภูมิภาคที่ปราศจากข้อผิดพลาดบรรทัดที่ทำเครื่องหมาย-เป็นพื้นที่ที่มีข้อผิดพลาด


คุณอาจต้องพิจารณาตัวเลือกต่อไปนี้บางอย่างขึ้นอยู่กับลักษณะของข้อผิดพลาดในการอ่านของคุณ:

   -d, --direct
          use direct disc access for input file

   -K, --skip-size=<min>[,<max>]
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -O, --reopen-on-error
          reopen input file after every read error

   -r, --retry-passes=<n>
          exit after <n> retry passes (-1=infinity) [0]

   -R, --reverse
          reverse the direction of all passes

ตอบคำถามของคุณโดยตรง:

  1. คุณอาจกำลังประสบปัญหาบัฟเฟอร์ ... คุณอาจเห็นว่ามีหลายบรรทัดปรากฏขึ้นพร้อมกันและไม่มีอะไรอีกแล้ว - ดู unbuffer
  2. sudo อาจขอรหัสผ่าน แต่คุณเปลี่ยนเส้นทางพรอมต์ไป ... ดังนั้นจึงไม่มีอะไรเกิดขึ้น

-pตัวเลือกจะไม่ใช้เวลานาน (ประมาณสองสามชั่วโมงตามความเร็วที่ฉันได้รับด้วย dd: ประมาณ 70MB / s ผ่าน USB3) เพื่อสร้างไฟล์ 500GB บนไดรฟ์ปลายทางก่อนที่จะเริ่มการช่วยเหลือ ถ้ามันเป็นsudoปัญหาที่พรอมต์จะไม่sudoพร้อมท์จะสะท้อนไปยังสถานีเช่นเดียวกับล็อกไฟล์เพราะtee?
Ansel Pol

ฉันกำลังจะตอบกลับด้วย " ไม่เพราะไฟล์หร็อมแหร็ม " แต่จำได้ว่าddrescueจะหลีกเลี่ยงการทำไฟล์หร็อมแหร็มเว้นแต่ได้รับคำแนะนำให้ทำ ... ฉันจะขอบคุณถ้าคุณสามารถลองด้วย / ไม่และดูว่าผลลัพธ์คืออะไร !
Attie

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