การกู้คืนที่รวดเร็วจากดิสก์ที่มีเซกเตอร์เสีย


13

เมื่อเร็ว ๆ นี้ฉันพยายามเปลี่ยนddจาก HDD ที่ไม่แข็งแรงต่อไฟล์ dd if=/dev/sdb of=somefile bs=4096 conv=noerror,syncผมใช้ ปัญหาของฉันคือการddสูญเสียเวลามากเมื่อพบบล็อกที่ไม่ดี ในกรณีที่ใช้งานของฉันฉันยินดีจ่ายด้วยการสูญเสียข้อมูลบางอย่างเพื่อผลลัพธ์ที่เร็วขึ้น

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

คำตอบ:


29

ครั้งแรกสำหรับซอฟต์แวร์เพื่อใช้งาน: คุณอาจลองใช้แทนddrescuedd

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

ตัวอย่างการใช้งาน:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

จากหน้าddrescueข้อมูล:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

นี่คือแหล่งข้อมูลเพิ่มเติมที่จะใช้ddrescue:


แก้ไข

ในกรณีที่ฮาร์ดดิสก์ตัวเองเป็นเวลานานเกินไปคุณสามารถพยายามที่จะเปิดใช้งานคุณลักษณะที่เรียกว่าTLER ( T IME L imited E rror R ecovery) หรือCCTL ( C ommand C ompletion T IME L IMIT) ไม่ใช่ฮาร์ดดิสก์ทั้งหมดที่มี แต่คุณสามารถใช้เพื่อ จำกัด เวลาในตัวควบคุม HDD ได้ วิธีนี้สามารถใช้ร่วมกับการใช้ddrecueงานได้แน่นอน

Linux มีเครื่องมือที่เรียกว่าsmartctl(ในsmartmontoolsแพ็คเกจ)

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

# smartctl -l scterc /dev/sda

ในการตั้งค่าเป็นค่าคงที่ (5.0 วินาทีในตัวอย่างนี้การตั้งค่าเป็น 0 ปิดใช้งาน TLER):

# smartctl -l scterc,50,50 /dev/sda

แหล่งที่มาสำหรับ TLER: http://en.wikipedia.org/wiki/TLER


2
เครื่องมืออีกอย่างที่ต้องพิจารณาคือ dc3dd ซึ่งเป็นรุ่นทางนิติวิทยาศาสตร์ของ dd
fpmurphy

โอ้ดีฉันไม่รู้จักเครื่องมือนั่น!
Slizzered

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

2

ฉันได้ผลลัพธ์ที่ดีจากดิสก์ที่อ่านไม่ได้ด้วยซอฟต์แวร์นี้

http://www.cgsecurity.org/wiki/TestDisk

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

http://www.cgsecurity.org/wiki/PhotoRec


2

สำหรับตัวเลือกที่รวดเร็วและรวดเร็วในการกู้ดิสก์คุณสามารถใช้ไฟล์ sh sh แล้วเรียกใช้ไฟล์ด้วย sh มันมีบรรทัดนี้เพียงทำซ้ำsudo ddrescueและsleep 3อีกไม่กี่ครั้ง การพักเครื่องจะใช้เพื่อให้ไดรฟ์พักครู่หนึ่ง

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

ตัวเลือกที่ใช้ด้านบน:

  • -r0 : ไม่มีการลองใหม่
  • -e +0: exit เมื่อเกิดข้อผิดพลาดครั้งแรก
  • -T 1s: exit เมื่ออ่านไม่ถึง 1 วินาที
  • -d : Direct I / O
  • -n : ไม่มีการขูด

คุณสามารถใช้-Rหลังจากเสร็จสิ้นด้วยตัวเลือก-Aหนึ่งครั้งซึ่งจะย้อนกลับและลบข้อผิดพลาดทั้งหมดและเริ่มต้นอีกครั้งย้อนหลัง หมายความว่ามันจะอ่านข้อผิดพลาดแตกต่างกัน


0

ขึ้นอยู่กับขนาดของฮาร์ดไดรฟ์ของคุณและจำนวนบล็อกที่เสีย ฉันใช้เวลา 20 นาทีในการสำรองข้อมูลโดยใช้ DD ซึ่งเป็น hd ที่ดีต่อสุขภาพ 1 เทรา ด้วยบล็อกที่ไม่ดีฉันเพิ่งกู้คืนเช้านี้เอาฉันสองครั้ง ฉันมีปัญหาในการทำซ้ำ (สำรองข้อมูลดิสก์) ด้วยบล็อคที่ไม่ดีประมาณ 30 บล็อก สิ่งแรกที่ฉันทำคือสำรองไฟล์โดยใช้ Filezilla ปกติเพื่อสำรองข้อมูลที่ดีทั้งหมด ฉันสังเกตว่าไฟล์ใหญ่ไฟล์หนึ่งไม่ได้คัดลอกอย่างถูกต้อง (หยุดตรงกลางและเริ่มการถ่ายโอนใหม่) โชคดีที่ฉันมีการสำรองข้อมูลก่อนหน้าของไฟล์เดียวกัน เพื่อทำซ้ำดิสก์แล้วฉันต้องค้นหาบล็อกเสียบนดิสก์โดยใช้ขั้นตอนนี้:

ขั้นแรกให้ค้นหาดิสก์ปัญหาที่ระบุข้อมูล HD โดยใช้fdisk -l

อันดับที่ 2 ถ้าให้บอกว่าดิสก์ของคุณคือ/ dev / sdbคุณต้องรันคำสั่ง badblocks -v / dev / sdbมันจะแสดงรายการบล็อกที่ไม่ดีทั้งหมดบนไดรฟ์ โชคดีที่มีบางอย่าง หากไม่พบบล็อกที่ไม่ดีบล็อกไดรฟ์ของคุณจะใช้ได้และต้องคิดอย่างอื่น ขนาดบล็อกของฉันคือ 512 ดังนั้นฉันจึงใช้หมายเลขเริ่มต้นนั้นเพื่อรัน DD

ที่ 3 แต่ละบล็อกมีขนาด 512 ดังนั้นสิ่งที่ฉันทำคือตั้ง bs = 512

ทุกครั้งที่ฉันเรียกใช้ DD อย่างสม่ำเสมอเช่นเคยข้อมูลของฉันหลังจากข้อผิดพลาดจะเสียหาย ดังนั้นฉันจึงใช้พารามิเตอร์ตามที่อธิบายไว้ในหน้าhttps://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.htmlค้นหาส่วน "สำหรับดิสก์ที่ล้มเหลว"

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

ใช้เวลาสักครู่ แต่ละบล็อกที่ไม่ดีจะพบกับเสียงเหมือนการต่อสู้บนไดรฟ์ที่ผิดปกติ มันคัดลอกบล็อกโดยบล็อกและผ่านบล็อกที่ไม่ดีของฉันทั้งหมดทำให้เสียงเดียวกัน จำนวนครั้งที่มีเสียงดังเนื่องจากพบบล็อกที่ไม่ดีอีกอันหนึ่งและบอกคุณเกี่ยวกับข้อผิดพลาดในการแสดงข้อความ msg สิ่งที่'conv = noerror, sync'ทำคือการตัดการอ่านที่ไม่ดีด้วย NUL ในขณะที่'iflag = fullblock' ให้บริการสำหรับการอ่านระยะสั้น แต่ให้ซิงค์ข้อมูลของคุณจนถึงจุดสิ้นสุด ไม่มีการคอร์รัปชั่นเลยมันไม่ได้คัดลอกบล็อกที่ผิดปกติและเติมด้วย NUL ที่ว่างเปล่า

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

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


1
หากคำตอบเดียวกันตอบคำถามหลายข้อมีโอกาสที่ดีที่คำถามจะซ้ำกัน ถ้าเป็นเช่นนั้นจะเป็นการดีกว่าที่จะตอบคำถามหนึ่งและตั้งค่าสถานะอื่นให้ซ้ำซ้อน ที่หลีกเลี่ยงการขยายคำตอบซ้ำ ๆ และการเชื่อมโยงคำถามทำให้ผู้อ่านสามารถค้นหาคำตอบทั้งหมดได้ง่ายขึ้น
fixer1234

ไม่ใช่จริง ๆ แต่ถ้าคุณคิดอย่างนั้นแจ้งให้เราทราบเพื่อฉันจะลบคำตอบของฉัน ฉันค้นหาทุกวิธีเพื่อแก้ไขปัญหาที่ถูกต้อง แต่ฉันพบวิธีแก้ไขปัญหาเซิร์ฟเวอร์ของฉัน มีคำถามที่คล้ายกันอื่น ๆ อีกหลายข้อที่ไม่ได้ตอบปัญหาของฉัน จนถึงตอนนี้ฉันพบคำถามที่เกี่ยวกับโหลที่คล้ายกันทั้งหมดกว่าโหล ฉันเพิ่งตอบไปสองสามครั้งเพื่อเขียนประสบการณ์ของฉันและฉันสามารถแก้ไขได้อย่างไร แจ้งให้เราทราบหากคุณต้องการให้ฉันลบคำตอบและฉันยินดีที่จะทำ ความนับถือ.
Luis H Cabrejo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.