วิธีที่ดีที่สุดในการคัดลอกไฟล์ทั้งหมดโดยไม่สนใจข้อผิดพลาด?


36

ฉันมี HD เสียหายบางส่วนที่ไม่สามารถซ่อมแซมได้โดย Disk Utility แต่สามารถติดตั้งแบบอ่านอย่างเดียวทำให้สามารถเข้าถึงข้อมูลได้

ฉันกำลังพยายามคัดลอกเนื้อหาที่กู้คืนได้ทั้งหมดไปยัง HD สำรอง แต่ทุกวิธีที่ฉันพยายามล้มเหลวเมื่อพบข้อผิดพลาด - ปล่อยให้ไฟล์ที่เหลือยังไม่เปิด

Finder - ล้มเหลว SuperDuper - ล้มเหลว Ditto (คำสั่งเทอร์มินัล) - ล้มเหลว

ฉันหวังว่า Ditto จะทำเคล็ดลับหน้า Ditto กล่าวว่า:

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

ฉันได้ส่งข้อผิดพลาดไปยัง Apple อีกครั้งไม่สามารถดำเนินการตามที่โฆษณาไว้ได้

ความคิดอื่น ๆ ?


ดูstackoverflow.com/a/27637277มากกว่า--ignore-errorsคำตอบด้านล่าง
spyle

คำตอบ:


27

ฉันใช้cp -Rfv sourcefile destinationfileกับความสำเร็จเป็นประจำ

cp = copy

R = ดูแลรักษาลำดับชั้นของไฟล์

f = หากไฟล์ปลายทางที่มีอยู่ไม่สามารถเปิดได้ให้ลบออกแล้วลองอีกครั้ง

v = โหมด verbose แสดงไฟล์ที่ถูกถ่ายโอนขณะที่มันดำเนินไป

sourcefile = ข้อมูลที่คุณต้องการคัดลอก

destinationfile = directory / drive ที่คุณต้องการคัดลอก


3
สิ่งนี้จะเพิกเฉยต่อข้อผิดพลาดในไดรฟ์ต้นทางอย่างไร (ดูคำถาม)
nohillside

1
@patrix มันไม่ได้ "ละเว้น" ข้อผิดพลาด แต่การตั้งค่าสถานะ "f" ผ่านพวกเขาเพียงคัดลอกข้อมูลเหมือนเดิม ในขณะที่คุณดูความคืบหน้า (ขอบคุณธง verbose) คุณจะเห็นผลลัพธ์ตามบรรทัดของ "ข้อมูลที่ไม่ได้คัดลอกเนื่องจากข้อผิดพลาด I / O" เมื่อพบข้อมูลที่ไม่ดี เมื่อข้อผิดพลาดจะปรากฏขึ้นก็ย้ายไปยังไฟล์ถัดไปโดยไม่ต้องใส่ผู้ใช้ใด ๆ สถานการณ์ของโปสเตอร์ฟังดูคล้ายกันมากกับหลายสิบครั้งที่ฉันใช้คำสั่งนี้เพื่อดึงข้อมูลจากดิสก์ / โวลต์ที่ไม่มั่นคง
Mr Rabbit

มีวิธีการคัดลอกไฟล์ที่ล้มเหลวด้วย postfix บางส่วนดังนั้นไฟล์ที่หายไปทั้งหมดจะดีขึ้นหรือไม่

1
จากcpคู่มือBSD (macOS): "ในโหมด -R, cp จะทำการคัดลอกต่อไปแม้ว่าจะตรวจพบข้อผิดพลาด"
Matt

ขอบคุณมากสำหรับสิ่งนี้ ขณะนี้ฉันพยายามกอบกู้ให้มากที่สุดเท่าที่จะทำได้จาก HDD ที่ล้มเหลวถึงแม้ว่าฉันจะไม่สนใจข้อมูลที่เสียหาย แต่ฉันจะไม่เสียเวลาพยายามแก้ไข แต่เพียงแค่ลบมันออก นี่เป็นวิธีการทำงานเพื่อให้บรรลุเป้าหมายนี้อย่างรวดเร็ว ฉันส่งข้อผิดพลาดไปยังไฟล์บันทึกการทำงานซึ่งฉันสามารถแยกวิเคราะห์ภายหลังเพื่อลบไฟล์ที่ถูกตัดทอนโดยมีข้อผิดพลาดในการอ่านโดยผนวกต่อไปนี้:2> error.log
0x01

23

ลองใช้Gnu ddrescue - เป็นโปรแกรมกู้คืนข้อมูลที่ทำสำเนาแบบบล็อกโดยใช้การกู้คืนข้อมูลที่เสียหายระหว่างการคัดลอก คุณสามารถรับมันสำหรับ OS X หากคุณใช้Homebrewโดยพิมพ์ในหน้าต่าง Terminal:

brew install ddrescue

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

  • diskutil listค้นหาไดรฟ์โดยใช้ คอลัมน์ตัวระบุคือสิ่งที่คุณกำลังมองหา:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • ถอนติดตั้งดิสก์ที่มีปัญหา:

    diskutil unmount /dev/disk1s3    
    
  • เริ่มการดำเนินการช่วยเหลือของดิสก์ลงในภาพ ตรวจสอบให้แน่ใจว่าตำแหน่งของRescue.dmgถูกแทนที่ด้วยตำแหน่งที่คุณต้องการ

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • กู้ภาพไปยังไดรฟ์ใหม่ :

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

ได้รับคำแนะนำให้อ่านคู่มือของ ddrescue man ddrescueรู้ด้วยตัวเองเกี่ยวกับตัวเลือกที่มีอยู่โดยการทำงาน


1
หากต้องการเพิ่มการแจ้งเตือนของผู้ดูแล: นี่อาจเป็นคำตอบที่ดีมากสำหรับปัญหา แต่จำเป็นต้องใช้งานมากกว่านี้ คุณสามารถเพิ่มคำสั่ง ddrescue ตัวอย่างสำหรับอุปกรณ์ OS X ลงในคำตอบได้หรือไม่? ฉันได้แก้ไขเล็กน้อยด้วยพื้นหลังและข้อมูลที่เราต้องการดูคำตอบที่นี่ ถ้าคุณทำอย่างนั้นฉันแน่ใจว่ามันจะเป็นการตอบสนองที่ดี
Ian C.

ฉันใช้ ddrescue สำเร็จหนึ่งหรือสองปีก่อนเพื่อคัดลอกข้อมูลออกจากดิสก์ที่ไม่ดี ในอดีตอาจมีข้อผิดพลาด 200 ข้อและในที่สุดก็สามารถอ่านได้ประมาณครึ่งหนึ่ง ดิสก์ที่คัดลอกมานั้นได้รับการป้อนเข้าสู่ diskwarrior และผลที่ตามมาก็อาจจะเสียหายถึง 10 ไฟล์จากประมาณ 1 ล้านไฟล์
Pittsburgh Mike

6

ฉันชอบใช้rsyncเพื่อคัดลอกไฟล์จากแหล่งที่เสียหายไปยังปลายทางที่ใช้งานได้:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

ที่ไหน:

-a = "โหมดเก็บถาวร" = recurses ลงในไดเรกทอรีคัดลอก symlink เป็น symlink รักษาสิทธิ์ครั้งกลุ่มและไฟล์พิเศษยังรักษาเจ้าของ (เมื่อเจ้าของ = ราก) และอุปกรณ์ (เมื่อเจ้าของ = ราก)

-u= ข้ามไฟล์ในแหล่งที่มาหากการคัดลอกที่เกี่ยวข้องในปลายทางนั้นใหม่กว่า

-v = เอาต์พุต verbose

--delete= ไฟล์ในปลายทางที่ไม่มีอยู่ในแหล่งที่มาจะถูกลบ

--ignore-errors = ลบไฟล์ / ไดเรกทอรีในกรณีที่เกิดข้อผิดพลาด I / O ระหว่างกระบวนการคัดลอก


4

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


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

3
ddrescue ดีกว่า dd ที่นี่เนื่องจากมันจะลองใหม่ในส่วนที่ไม่ดีไปเรื่อย ๆ ตราบใดที่คุณปล่อยให้มันวิ่ง - ดูคำตอบก่อนหน้านี้ที่ซึ่ง OP ได้รวบรวมข้อมูลของเขาหลังจากผ่านไปสองสามสัปดาห์ (!) โปรดทราบว่านี่เป็นวิธีการที่ดีถ้าฮาร์ดแวร์ HD ล้มเหลว แต่ไม่ได้ทำอะไรเลยเพื่อแก้ไขความเสียหายของโครงสร้างปริมาณ - ที่เพิ่งได้รับการคัดลอกพร้อมกับไฟล์
Gordon Davisson

3

คุณอาจลองใช้ddคำสั่งเพื่อทำสำเนาบล็อกต่อบล็อกจาก HDD ที่เสียหายของคุณไปยัง HDD ใหม่ของคุณ

การสันนิษฐานว่า HDD ใหม่ของคุณ/dev/disk2มีขนาดเท่ากันหรือมากกว่า HDD เสียหายของ/dev/disk1คุณคุณสามารถออก:

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

blocksized @ 4k อย่าตัดทอนข้อมูลใด ๆ โดยละเว้นข้อผิดพลาดทั้งหมด

ในการค้นหาชื่ออุปกรณ์ให้เรียกใช้mountจาก Terminal ก่อน


0

dittoคำสั่งควรจะทำงานผมจะใช้dittoร่วมกับ-vตัวเลือกสำหรับการอย่างละเอียดเพื่อให้คุณสามารถดูว่าสิ่งที่จะช่วยให้คุณมีข้อผิดพลาดในสิ่งที่มันสำเนา


3
ตามผู้dittoถามไม่ทำงาน ทำไมคุณถึงคิดว่ามันทำ?
nohillside

op กำลังถามเกี่ยวกับทางเลือกอื่น ๆditto
juniorRubyist

0

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

ขั้นตอน:

  1. เลือก 'backup all files' เป็นกลยุทธ์การสำรองข้อมูล
  2. ในตัวเลือกให้เลือก 'การอัปเดตอัจฉริยะ' (ไม่เช่นนั้นกระบวนการนี้จะใช้เวลานานมากหากคุณมีข้อผิดพลาดมากกว่าหนึ่งหรือสองข้อคุณจะต้องมีรุ่นที่ชำระเงิน)
  3. เรียกใช้การคัดลอก
  4. เมื่อการคัดลอกล้มเหลวอ่านไฟล์บันทึกเพื่อค้นหาไฟล์ที่ไม่สามารถคัดลอกได้จากนั้นกด ok / close เพื่อกลับไปที่หน้าจอ 'เริ่ม'
  5. เลือก 'แก้ไขสคริปต์คัดลอกที่เลือก' จากดรอปดาวน์การใช้
  6. ภายใต้คำสั่งสคริปต์ให้เพิ่มไฟล์ที่ล้มเหลวในการคัดลอกมันควรจะพูดว่า 'เพิกเฉย' เมื่อมันถูกเพิ่มเข้าไปในรายการไฟล์
  7. บันทึกสคริปต์ของคุณด้วยชื่อ (เช่นไฟล์ที่ไม่ได้รับความเสียหาย)
  8. เลือกสคริปต์ของคุณและทำซ้ำขั้นตอนที่ 3-7 ซ้ำหลายครั้งตามที่จำเป็นเพื่อละเว้นไฟล์ที่เสียหายทั้งหมด

-2

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

http://www.roadkil.net/program.php?ProgramID=29


นั่นเป็นโปรแกรม Windows เท่านั้นและ OP กำลังขอวิธีแก้ไขปัญหา Mac (บนฟอรัมเฉพาะสำหรับ Mac!)
Haydentech
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.