แม้ว่าในตอนแรกการ "ท้าทาย" ที่เสนออาจดูยากไม่เป็นไปได้หรือไร้เดียงสาอย่างที่บางคนวิจารณ์ แต่ก็ไม่ใช่ แนวคิดหลักที่อยู่เบื้องหลังการใช้ 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 ได้อย่างถูกต้องหลังจากที่คุณกำหนดเรขาคณิตดิสก์ใหม่แล้ว) นี่เป็นกรณีที่ซับซ้อนมากขึ้น แต่ควรกล่าวถึงเพราะแสดงให้เห็นว่าการดำเนินการชนิดนี้เป็นไปได้อย่างสมบูรณ์แบบ
โชคดี! ... และที่สำคัญที่สุดอย่าลืมสำรองข้อมูลที่สำคัญทั้งหมดก่อนการดำเนินการเช่นนั้น ความผิดพลาดและคุณสามารถทำลายข้อมูลของคุณได้อย่างถาวร
และในกรณีที่ฉันไม่ได้เน้นเพียงพอ: สำรองข้อมูลของคุณก่อนการโยกย้าย! :)
dd
คำนวณขนาดบล็อกที่ดีที่สุดจะมีประโยชน์