สามารถ 'dd' ใช้ในการโคลนกับ HDD ที่เล็กกว่ารู้ว่าพาร์ติชันจะต้องมีการแก้ไขหรือไม่


14

ฉันเคยddโคลนดิสก์เช่นนี้

 dd if=/dev/sdb of=/dev/sda bs=4096 conv=notrunc,noerror,sync

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

ตอนนี้ฉันค่อนข้างเข้าใจว่าถ้าฉันลอกแบบไปยังดิสก์ขนาดเล็กฉันไม่สามารถคาดหวังได้ว่าพาร์ทิชันใด ๆ ที่มี 'นอกขอบเขต' บางส่วนบนเป้าหมายจะไม่เสียหาย

อย่างไรก็ตามรู้ดีว่าฉันต้องแก้ไขพาร์ทิชันของฉันในเป้าหมายในภายหลังการลบ 'นอกขอบเขต' ฉันยังสามารถใช้ 'dd' เพื่อสร้างสำเนากำลังของแหล่งข้อมูลได้ถึงขีด จำกัด ของ ขนาดทางกายภาพของเป้าหมายหรือไม่ หรือจะ 'dd' ลดเป้าหมายเป็นกองสูบบุหรี่ของซากปรักหักพังเมื่อถึงขนาดที่ จำกัด ขนาด ;-)

BTW ทำการค้นคว้าสิ่งนี้ฉันได้เห็นคุณค่าที่แนะนำสำหรับbs=ทุกสิ่งตั้งแต่bs=1024ขึ้นไปbs=32Mสิ่งที่ดีที่สุดจริง ๆ ?


หมายเหตุหากใช้การdd คำนวณขนาดบล็อกที่ดีที่สุดจะมีประโยชน์
วิลฟ์

คำตอบ:


7

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

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

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

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


โปรดดูคำถามที่แก้ไข :)
เรย์แอนดรู

1
@rayandrews ไม่แน่ใจว่าคุณต้องการอัปเดตใด แต่โดยทั่วไปจะddคัดลอกไบต์ มันจะเริ่มต้นที่ไบต์ 0 และคัดลอกไปเรื่อย ๆ จนกว่าจะมีบางสิ่ง (ในกรณีของคุณจุดสิ้นสุดของสื่อปลายทาง) หยุดมัน นั่นจะทำให้คุณมีตารางพาร์ติชันที่ระบุไดรฟ์ที่มีขนาดใหญ่กว่าความเป็นจริงและพาร์ติชันนอกไดรฟ์ ... แต่ถ้าคุณแก้ไขมันควรจะดี แม้ว่ามันจะง่ายกว่าถ้าจะใช้ dd ต่อพาร์ติชั่นเพื่อคัดลอกข้อมูล [มันยังจะปล่อยให้คุณกับทุกปัญหา DD ปกติเช่น UUIDs ซ้ำ]
derobert

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

1
คุณจะเรียกคืนตาราง gpt ที่สองได้อย่างไร
user230910

2

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

ความคิดคือการคิดในแต่ละพาร์ติชันและไม่ดิสก์ทั้งหมดในครั้งเดียวตามที่เสนอเริ่มต้น สามารถทำได้มากกว่าเดิม: พาร์ติชั่นที่จะถูกตัดทอนสามารถย้ายได้อย่างปลอดภัยด้วยความช่วยเหลือเล็กน้อยของเครื่องมือปรับขนาดระบบไฟล์ ที่จริงแล้วการโอนย้ายแบบนั้นน่าสนใจเพื่อรักษา matadata ของระบบไฟล์และแอ็ตทริบิวต์ไฟล์เพิ่มเติมที่ไม่สามารถคัดลอกได้ง่ายด้วยเครื่องมือเช่น cp, rsync, pax, ... ซึ่งทำงานในเลเยอร์ระบบไฟล์และไม่ปิดกั้นชั้นอุปกรณ์ การใช้ dd ช่วยลดความจำเป็นในการติดตั้งระบบปฏิบัติการใหม่หรือต้องติดตั้ง FS ใหม่เพื่อหลีกเลี่ยงปัญหาเกี่ยวกับ SELinux

ด้านล่างคือสิ่งที่ฉันมักจะทำเพื่อทำงานที่คล้ายกัน:

1) ขั้นแรกคุณต้องลดระบบไฟล์ภายในพาร์ติชั่นที่ได้รับผลกระทบซึ่งจะถูกตัดทอน สำหรับสิ่งนี้ใช้เครื่องมือ resize2fs (สมมติว่าเรากำลังพูดถึง ext2 / ext3 / ext4 fs - FS ที่ทันสมัยอื่น ๆ ยังมีเครื่องมือปรับขนาดสำหรับจุดประสงค์เดียวกัน) โปรดทราบว่าถึงแม้ว่า - สำหรับเหตุผลที่ชัดเจน - ระบบไฟล์ไม่สามารถมีขนาดใหญ่กว่าพาร์ติชันที่อยู่ภายในได้ แต่จะมีขนาดเล็กลงอย่างปลอดภัย เคล็ดลับความปลอดภัยที่นี่คือการลด "เกินจำเป็น" ตัวอย่างเช่นสมมติว่าคุณมีระบบไฟล์ขนาด 1TB ที่คุณต้องการย้ายไปยังไดรฟ์ 500 กิกะไบต์ ในกรณีนี้ฉันขอแนะนำให้ลด fs เป็นสมมุติ 450 Gig (คุณต้องมีพื้นที่ว่างเพียงพอสำหรับเรื่องนี้เช่นพื้นที่ว่างในระบบไฟล์ปัจจุบันไม่สามารถเกิน 450 กิ๊กได้) พื้นที่ว่างที่สูญเสียไป 50 กิกะไบต์จะถูกแก้ไขหลังจากการย้ายข้อมูล

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

3) dd ข้อมูลโดยใช้อุปกรณ์พาร์ติชันและไม่ใช่อุปกรณ์ดิสก์ (เช่นใช้dd if=/dev/sda# of=/dev/sdb#สำหรับแต่ละพาร์ติชันแทนการใช้if=/dev/sda of=/dev/sdb) หมายเหตุ: sda และ sdb ที่นี่เป็นเพียงตัวอย่าง; หมายเหตุสำคัญ: เมื่อ dd'ing จากอุปกรณ์ที่ใหญ่กว่าไปยังพาร์ติชันที่มีขนาดเล็ก dd จะบ่นเกี่ยวกับความพยายามที่จะเขียนโพสต์ไปยังจุดสิ้นสุดของอุปกรณ์บล็อกนั่นก็โอเคเพราะข้อมูลระบบไฟล์จะถูกคัดลอกทั้งหมดก่อนถึงจุดนั้น เพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาดดังกล่าวคุณสามารถระบุขนาดของการคัดลอกโดยใช้bs=และcount=พารามิเตอร์เพื่อให้ตรงกับขนาดของระบบไฟล์หด แต่จะต้องมีการคำนวณบางอย่าง (ง่าย) แต่ถ้าทำผิดอาจเสี่ยงต่อข้อมูลของคุณ

4) หลังจากทำการปรับขนาดระบบไฟล์ที่เกี่ยวข้องภายในพาร์ติชั่นปลายทางอีกครั้งโดยใช้ resize2fs เวลานี้ไม่ได้ระบุขนาดระบบไฟล์ใหม่ เมื่อรันโดยไม่มีข้อกำหนดขนาด resize2fs จะขยายระบบไฟล์เพื่อให้มีขนาดสูงสุดที่อนุญาตดังนั้นในกรณีนี้ระบบไฟล์ 450 Gig จะเติบโตขึ้นอีกครั้งเพื่อครอบครองพาร์ติชั่น 500 กิกะไบต์ทั้งหมดและไม่มีไบต์จะสูญเปล่า (วิธี "ลดมากกว่าที่จำเป็น" หลีกเลี่ยงคุณระบุขนาดโดยไม่ตั้งใจและเสี่ยงต่อข้อมูลของคุณโปรดทราบว่าหน่วย GB เทียบกับ GiB อาจมีเล่ห์เหลี่ยม)

หมายเหตุสำหรับการดำเนินการที่ซับซ้อนมากขึ้น: หากคุณมีตัวจัดการการบูตที่คุณตั้งใจจะคัดลอกซึ่งน่าจะเป็นกรณีนี้คุณสามารถ dd สองสามกิโลไบต์แรกของดิสก์โดยใช้อุปกรณ์ดิสก์แทนอุปกรณ์พาร์ติชัน (เช่น dd if=/dev/sda of=/dev/sdb bs=4096 count=5) จากนั้นกำหนดค่ารูปทรงเรขาคณิตใหม่ใน / dev / sdb (ซึ่งจะมีรูปทรงเรขาคณิตที่ไม่ถูกต้องชั่วคราวสำหรับไดรฟ์ใหม่ แต่ตัวจัดการการบูตที่สมบูรณ์และถูกต้อง) ในที่สุดก็ใช้อุปกรณ์พาร์ติชั่นตามที่อธิบายไว้ข้างต้นเพื่อทำการแบ่งพาร์ติชั่นในแต่ละครั้ง ฉันทำสิ่งนี้มาหลายครั้งแล้ว เมื่อเร็ว ๆ นี้ฉันทำการย้ายข้อมูลที่ซับซ้อนได้สำเร็จเมื่ออัปเกรดจาก HDD ที่มีการติดตั้ง MacOSX & Linux เป็น SDD ที่เล็กลงใน MacMini6,2 ของฉัน ในกรณีนี้ฉันต้องบูตลินุกซ์จากไดรฟ์ภายนอกเรียกใช้ bootmanager รัน gdisk เพื่อแก้ไข GPT ในดิสก์ใหม่และในที่สุดก็แยกแต่ละพาร์ติชั่นที่มีไฟล์บีบอัดเพียงอันเดียว (โปรดทราบว่ารูปแบบพาร์ติชัน GPT จะเก็บสำเนาของตารางพาร์ติชันไว้สองสำเนาชุดหนึ่งอยู่ในตำแหน่งเริ่มต้นและอีกชุดหนึ่งอยู่ท้ายดิสก์ gdisk บ่นมากเพราะไม่สามารถค้นหาสำเนาที่สองของ PT และเนื่องจากพาร์ติชันมีขนาดเกินขนาดดิสก์ แต่แก้ไขปัญหาการคัดลอก PT ได้อย่างถูกต้องหลังจากที่คุณกำหนดเรขาคณิตดิสก์ใหม่แล้ว) นี่เป็นกรณีที่ซับซ้อนมากขึ้น แต่ควรกล่าวถึงเพราะแสดงให้เห็นว่าการดำเนินการชนิดนี้เป็นไปได้อย่างสมบูรณ์แบบ

โชคดี! ... และที่สำคัญที่สุดอย่าลืมสำรองข้อมูลที่สำคัญทั้งหมดก่อนการดำเนินการเช่นนั้น ความผิดพลาดและคุณสามารถทำลายข้อมูลของคุณได้อย่างถาวร

และในกรณีที่ฉันไม่ได้เน้นเพียงพอ: สำรองข้อมูลของคุณก่อนการโยกย้าย! :)


คำอธิบายที่ดีมากขอบคุณ!
nirvana-msu

1

หากคุณต้องการติดตั้งรถยนต์ในทางเดินที่แคบกว่ารถยนต์ 20 ซม. และคุณตัดรถทิ้งไว้ 20 ซม. ด้านซ้ายรถจะยังใช้งานได้หรือไม่ อาจจะไม่.

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

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

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

หากคุณต้องการคัดลอกข้อมูลบางส่วนจากดิสก์ขนาดใหญ่ไปยังดิสก์ขนาดเล็กให้สร้างพาร์ติชันบนดิสก์ขนาดเล็ก catหากคุณต้องการคัดลอกพาร์ทิชันพาร์ทิชันขนาดเดียวกันคุณสามารถทำมันได้ด้วย หากคุณต้องการคัดลอกพาร์ทิชันพาร์ทิชันที่มีขนาดเล็กสร้างระบบแฟ้มบนพาร์ติชันเป้าหมายและทำสำเนาแฟ้มระดับกับสิ่งที่ต้องการหรือcp -apax -rw -pe -t

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


ใช่ฉันสบายดีกับพาร์ทิชันสุดท้ายที่หายไป ในดิสก์ของฉันทุกสิ่งที่สำคัญทั้งหมดควรอยู่ในขนาดที่เล็กที่สุดของดิสก์ของฉัน พาร์ติชันที่นอกเหนือจากนั้นไม่จำเป็นเสมอ สิ่งที่มี 'cat' คือมันจะไม่สร้างพาร์ติชันหรือ MBR (เว้นแต่ฉันผิด)
Ray Andrews

@rayandrews หากคุณเรียกใช้catบนดิสก์ทั้งหมดมันจะสร้างพาร์ติชันเดียวกัน (โดยมีข้อแม้สำหรับพาร์ติชัน MBR ดูการแก้ไขของฉัน) เดียวกันจะไปสำหรับddใช้เป็นเพียงวิธีที่ซับซ้อนของการทำdd catหากคุณรันcatบนพาร์ติชันแน่นอนว่ามันจะไม่สร้างพาร์ติชัน ใช้ fdisk / gdisk / แยก / ... สำหรับสิ่งนั้น
Gilles 'หยุดความชั่วร้าย'

น่าสนใจมาก. ตกลงแสดงคำสั่งตัวอย่างให้ฉันจากนั้นฉันจะลองและถ้าเป็นไปได้นี่เป็นทางออกที่ดีที่สุด
เรย์แอนดรู

@rayandrews ตัวอย่างคำสั่งให้ทำอะไร
Gilles 'หยุดชั่วร้าย'

เพียงแค่คำสั่งตัวอย่างโดยใช้ 'cat' เพื่อโคลนดิสก์ ทำให้เป็นคำตอบใหม่เพื่อให้ฉันสามารถยอมรับได้
Ray Andrews

0

ฉันต้องการแบ่งปันประสบการณ์ของฉันกับหัวข้อนี้หากสิ่งนี้พิสูจน์ได้ว่าเป็นประโยชน์ต่อผู้อ่านรายอื่น เมื่อเร็ว ๆ นี้ฉันใช้DDRESCUEเพื่อกู้คืนพาร์ติชั่น NTFS 1 ใน 3 จากฮาร์ดไดรฟ์ที่ชำรุดและสร้างส่วนที่กู้คืนพาร์ติชั่นใหม่ลงบนฮาร์ดไดรฟ์ขนาดเล็กลงได้สำเร็จ ต่อไปนี้เป็นขั้นตอนที่ฉันทำ(เช่นวิธี HACKSAW !!) ...

ฮาร์ดไดรฟ์แหล่งที่มาประกอบด้วยรูปแบบ 750GB ใน NTFS พร้อมไฟล์ MBR ฉันใช้มันเพียงไม่กี่ครั้งในการสำรองไฟล์เพื่อให้ไฟล์ส่วนใหญ่อยู่ที่จุดเริ่มต้นของไดรฟ์มูลค่าประมาณ 160GB สมาชิกในครอบครัวเคาะฮาร์ดไดรฟ์ (ติดตั้งภายนอก) ลงบนพื้น - มันไม่ทำงานอย่างถูกต้องหลังจากนั้น! ใช้ ddrescue (อย่างระมัดระวัง) ฉันสามารถกู้คืนส่วนใหญ่ของการเริ่มต้นของไดรฟ์ เนื่องจากความเสียหายทางกายภาพมันปิดบ่อยมากตลอดกระบวนการ ...

ฉันมีฮาร์ดไดรฟ์ขนาดเล็กสำหรับแล็ปท็อปขนาด 150GB (ติดตั้งจากภายนอก) ซึ่งฉันดึงข้อมูล ddrescue โดยตรงไปที่ อีกทางหนึ่งฉันสามารถดึงข้อมูลไปยังไฟล์รูปภาพและติดตั้งไฟล์ในภายหลังได้ แต่ฉันคิดว่าการเขียนข้อมูลโดยตรงไปยังฮาร์ดไดรฟ์นั้นจะแคบกว่านี้

เคล็ดลับสำคัญในการช่วยเหลือคือการแก้ไขทั้งข้อมูล MBR และ NTFS Boot Sector ด้วยตนเองบนฮาร์ดไดรฟ์กู้ภัย หากไม่ทำเช่นนั้นฮาร์ดไดรฟ์จะไม่ถูกจดจำโดยระบบปฏิบัติการใด ๆ ฉันไม่สามารถหาโปรแกรมที่เหมาะสมใน linux ได้ดังนั้นฉันจึงหันไปใช้ windows มีแพ็คเกจที่ใช้งานง่ายชื่อเครื่องมือสนับสนุน Windows แต่ก็ยังคงมีประโยชน์อยู่ (ดูลิงค์ด้านล่าง)! เครื่องมือที่ฉันใช้แก้ไขพาร์ติชั่นคือ Disk Probe ตรวจสอบให้แน่ใจว่าได้ทราบค่าเซคเตอร์ปลายทางของฮาร์ดไดรฟ์ของคุณ (ฉันใช้ fdisk -l ใน Ubuntu)

https://en.wikipedia.org/wiki/Windows_Support_Tools

การใช้เครื่องคิดเลขที่ดีและความคิดสร้างสรรค์ฉันโหลดและติดตั้งฮาร์ดไดรฟ์ลงใน Disk Probe ใน Windows และแก้ไขค่าเซกเตอร์ปลายทาง ใน MBR ต้องมีการเปลี่ยนแปลงค่าสองชุดกล่าวคือก) ภาคปลายฮาร์ดไดรฟ์และ b) ภาคส่วนปลายพาร์ติชัน NTFS ในบูตเซกเตอร์ NTFS ค่าทั้งหมดของพาร์ติชันจะต้องมีการเปลี่ยนแปลง ในแต่ละกรณีค่าตัวเลขลดลงเพื่อให้ตรงกับ "มิติ" ที่ลดลงของฮาร์ดไดรฟ์ขนาดเล็ก (เซกเตอร์ปลายทางเปลี่ยนจาก 750GB เป็น 150GB) คลิกที่แท็บมุมมองเพื่อแก้ไขค่าเหล่านี้

นี่คือภาพของ Disk Probe ในการแก้ไขข้อมูล NTFS Boot Sector เครื่องมือสนับสนุน Windows - Disk Probe

เมื่อทำการแก้ไขฟิลด์ดังกล่าว Windows รับรู้พาร์ติชันเป็นพาร์ติชันที่ถูกต้องแม้ว่าความเสียหาย ฉันป้อนพรอมต์คำสั่งและเรียกใช้โปรแกรม Windows Chkdsk บนฮาร์ดไดรฟ์ที่เสียหาย (chdsk D :) มันน่าตื่นเต้นที่ได้เห็นพาร์ติชั่นกลับมามีชีวิตชีวาอีกครั้งโดยไฟล์! โปรแกรมสร้างตารางพาร์ติชันขึ้นใหม่และทำการแมปไฟล์ทั้งหมดที่คัดลอกมาใหม่จากฮาร์ดไดรฟ์ที่เสียหายสำเร็จ ไฟล์ที่อยู่นอกช่วง (ไม่คัดลอก) ไม่พบและถูกกำจัดดังนั้น

ส่วนต่อไปฉันไม่เข้าใจสาเหตุที่เป็นเพราะ windows ได้สร้างฮาร์ดไดรฟ์ 150GB พร้อมไฟล์ให้เรียบร้อย อย่างไรก็ตามหน้าต่างดั้งเดิมไม่สามารถเปิดพาร์ติชั่นฮาร์ดไดรฟ์เพื่อดูไฟล์ได้ (มีข้อผิดพลาด) อย่างไรก็ตาม Ubuntu เพื่อช่วยเหลือ! ฉันบูตเครื่องใหม่ใน Ubuntu ติดตั้งฮาร์ดไดรฟ์ภายนอกและไม่มีปัญหาเลยไฟล์ที่กู้คืนทั้งหมดปรากฏขึ้น!

หวังว่าวิธีแฮ็กซอว์วิธีนี้ในการกู้คืนไฟล์จากฮาร์ดไดรฟ์ขนาดใหญ่ไปยังฮาร์ดไดรฟ์ขนาดเล็กจะพิสูจน์ให้เห็นว่ามีประโยชน์สำหรับคนที่มีจิตใจไม่ดีอื่น ๆ นอกเหนือจากตัวฉันเอง ไชโย!


1
คุณคิดอย่างชัดเจนในคำตอบนี้ น่าเสียดายที่มันไม่ได้ตอบคำถามจริงๆ " ddrescueไม่ใช่อนุพันธ์ของddและไม่เกี่ยวข้องกับddวิธีการใด ๆ ยกเว้นในกรณีที่ทั้งสองสามารถใช้สำหรับการคัดลอกข้อมูลจากอุปกรณ์หนึ่งไปยังอุปกรณ์อื่นความแตกต่างคือ ddrescue ใช้อัลกอริทึมที่ซับซ้อนเพื่อคัดลอกข้อมูลจากไดรฟ์ที่ล้มเหลว เสียหายมากที่สุด " - วิกิพีเดีย ยิ่งไปกว่านั้นคำตอบของคุณดูเหมือนจะเน้นไปที่สภาพแวดล้อมการทำงานของ Windows เป็นหลักซึ่งไม่ใช่การกำหนดค่าทั่วไปที่นี่
Fox

1
ในฐานะผู้ถามเดิมฉันยังพบว่าประสบการณ์ของแดนเป็นประโยชน์มากที่สุดก็ดีที่จะรู้ว่าสิ่งใดที่สามารถทำได้ในสถานการณ์ที่สิ้นหวังแน่นอนว่ามันเป็นอุปกรณ์ต่อพ่วงของเธรดนี้ แต่ไม่เข้มงวดเกินไป
Ray Andrews

0

คุณจำเป็นต้องลดขนาดพาร์ติชันบนแหล่งที่มาก่อน (หรือลบออกนอกขอบเขต)
กว่าddและหลังจากที่คุณอาจต้องซ่อมแซมตารางพาร์ทิชันโดยใช้gdisk /dev/sd<target>
และลำดับสำคัญในการซ่อมแซมตารางv r d w
ฉันขอแนะนำให้คุณแบ่งพาร์ติชันที่มีขนาดเล็กกว่าที่ต้องการเล็กน้อยและหลังจากขยายกลับไปที่ขนาดเต็มของดิสก์เป้าหมาย
(คำตอบนี้ขึ้นอยู่กับประสบการณ์ส่วนตัวของฉันเมื่อโคลน HDD ของฉันกับ SSD ขนาดเล็ก)


+1 วิธีนี้ใช้ได้กับฉันด้วย: การโคลนนิ่งทำงานเมื่อพาร์ทิชันทั้งหมดพอดีภายในไดรฟ์เป้าหมาย :-) เพียงความคิดเห็นเดียว: คุณต้องซ่อมแซมตารางพาร์ติชันสำรองของตารางพาร์ติชัน GUID (GPT) แต่ถ้ามี MSDOS แบบเก่า ตารางพาร์ติชันไม่มีตารางพาร์ติชันสำรองเพื่อซ่อมแซม
sudodus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.