การโคลนการ์ด SD โดยใช้คำสั่ง dd


48

ฉันพยายามโคลนการ์ด SD ซึ่งอาจมีพาร์ติชั่นอยู่จำนวนหนึ่งซึ่งบางตัวที่ Ubuntu ไม่รู้จัก โดยทั่วไปฉันต้องการโคลนโวลุ่มทั้งหมดไม่เพียงบางพาร์ติชัน ดังนั้นฉันจึงใส่การ์ด SD และดูสิ่งนี้ในตัวแสดงบันทึก:

kernel: [  262.025221]  sdc: sdc1 sdc2

alex@u120432:~$ ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2

เนื่องจากฉันต้องการคัดลอกดิสก์ทั้งหมดฉันรัน:

dd if=/dev/sdc of=sdimage.img bs=4M

ไฟล์ sdimage.img, 7.9 GB (7,944,011,776 bytes) สร้างขึ้น (การ์ด SD คือ 8 GB) ตอนนี้ฉันติดตั้งการ์ด SD อื่นและดำเนินการ:

dd if=sdimage.img of=/dev/sdc bs=4M

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

นี่เป็นวิธีที่ถูกต้องหรือไม่? อาจมีวิธีอื่นในการโคลนการ์ด SD หรือไม่

ระบบปฏิบัติการ: Ubuntu 12.04 (แม่นยำ Pangolin), 32 บิต


คุณสามารถเมาท์ไฟล์ img ที่สร้างขึ้นและดูว่าสร้างไฟล์ได้ถูกต้องหรือไม่?
Milan Todorovic

@MilanTodorovic - ฉันจะทำสิ่งนี้ได้อย่างไร
Alex F

ถ้าฉันจำได้อย่างถูกต้อง: mount -o loop sdimage.img / path / to / mount จากนั้นตรวจสอบเพื่อดูว่าคุณสามารถเรียกดูไฟล์ img ได้อย่างถูกต้อง
Milan Todorovic เมื่อ

@MilanTodorovic: ฉันพยายาม sudo mount -o sdimage.img / dev / mydisk และได้รับ: mount: ไม่พบ / dev / mydisk ใน / etc / fstab หรือ / etc / mtab อาจจะต้องสร้างรายการ dev ก่อน คุณสามารถโพสต์สิ่งนี้เป็นคำตอบพร้อมรายละเอียดบางอย่างได้หรือไม่? ขอบคุณ
Alex F

1
คุณไม่ควรใช้ dd บนอุปกรณ์ที่เมาท์ ถอนติดตั้งพาร์ติชันทั้งหมดก่อนจากนั้นคำสั่งของคุณจะทำงาน
ubfan1

คำตอบ:


29

คุณไม่ควรใช้ dd บนอุปกรณ์ที่เมาท์ ถอนติดตั้งพาร์ติชันทั้งหมดก่อนจากนั้นคำสั่งของคุณจะทำงาน


2
ทำไมตรงกันข้ามสำหรับฉัน ฉัน Ubuntu 12.10 และคำสั่งมีผลงานเท่านั้นที่มีพาร์ทิชัน monted ...
Luca DAvanzo

1
@Velthune คุณแน่ใจหรือไม่ ถ้าเป็นเช่นนั้นฉันขอแนะนำให้สร้างคำถามของคุณเอง
Vreality

25

ใส่การ์ด SD ต้นฉบับและตรวจสอบชื่อของอุปกรณ์ (ปกติmmcblkXหรือsdcX):

sudo fdisk -l

คุณอาจเห็น:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *       2048  2099199  2097152    1G  c W95 FAT32 (LBA)
/dev/mmcblk0p2      2099200 31116287 29017088 13.9G 83 Linux

ในกรณีของฉันการ์ด SD คือ/dev/mmcblk0( *p1และ*p2เป็นพาร์ทิชัน)

ตอนนี้คุณต้องยกเลิกการต่อเชื่อมอุปกรณ์:

sudo umount /dev/mmcblk0

ตอนนี้เพื่อสร้างภาพของอุปกรณ์:

sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img

จะใช้เวลาสักครู่

เมื่อเสร็จแล้วให้ใส่การ์ด SD เปล่า หากอุปกรณ์นั้นแตกต่างกัน (USB หรือเครื่องอ่านการ์ด SD ชนิดอื่น) ให้ตรวจสอบชื่อและให้แน่ใจว่าได้ยกเลิกการต่อเชื่อมแล้ว:

sudo fdisk -l
sudo umount /dev/mmcblk0

เขียนภาพไปยังอุปกรณ์:

sudo dd if=~/sd-card-copy.img of=/dev/mmcblk0

การดำเนินการเขียนช้ากว่าเมื่อก่อนมาก


4
เมื่อคัดลอกข้อมูลจำนวนมากคุณควรกำหนดขนาดใหญ่กว่าขนาดบล็อกเริ่มต้นมิฉะนั้นคุณอาจต้องรอนานมาก sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=4M
xaedes

13

ฉันใช้เครื่องมือ dd เพื่อโคลนยูเอสบีที่มีหลายพาร์ติชันนี่คือคำสั่งของฉัน:

sudo dd if=/dev/sdb of=/dev/sdc bs=4096 conv=notrunc,noerror

notrunc - อย่าตัดทอนไฟล์เอาต์พุต
noerror - ทำต่อหลังจากอ่านข้อผิดพลาด


สิ่งนี้ไม่จำเป็นต้องใช้เครื่องอ่านการ์ด SD สองเครื่องใช่หรือไม่
Peter Mortensen

1
@PeterMortensen ใช่แล้วพวกเราหลายคนใช้อะแดปเตอร์ประเภท 4-in-1
Teque5

9

วววววววววววววววยยยยยยยยยยว่ไปกว่านี้cat /dev/sdc/ > ~/backup.iso ถ้าคุณต้องการใส่มันลงในการ์ด SD อีกครั้งให้เรียกใช้cat ~/backup.iso > /dev/sdc


SD ทั้งสองคือ 8 GB cat สามารถใช้สร้างภาพ SD ได้ แต่เพื่อสร้าง SD อีกอันฉันควรใช้ dd ใช่ไหม
Alex F

0

นี่คือขั้นตอนที่ใช้งานได้สำหรับฉันบน Ubuntu เพื่อกู้คืนไฟล์ภาพ ( ~/raspberrypi2.imgในกรณีของฉัน) กลับไปยังการ์ด SD ใหม่ (แรงบันดาลใจอย่างมากจากการตอบกลับของ Alon ด้านบน):

  1. ใส่การ์ด micro SD ผ่านทางตัวอ่านการ์ด
  2. เปิดแอป Disks
  3. ฟอร์แมตการ์ดทั้งหมดอย่างรวดเร็ว (ไม่ใช่พาร์ติชันเฉพาะ)
  4. ปิดดิสก์
  5. เปิด terminal และดำเนินการ:

    sudo fdisk -l
    

เอาต์พุตที่เกี่ยวข้อง (ซึ่งแสดงว่าไม่มีพาร์ติชันเนื่องจากรูปแบบที่รวดเร็วของการ์ดทั้งหมด):

Disk /dev/sdb: 7.4 GiB, 7948206080 bytes, 15523840 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos 
Disk identifier: 0x6957f2f2

sudo dd if=~/raspberrypi2.img of=/dev/sdb

ขั้นตอนนี้ใช้เวลาไม่กี่นาที (แม้กระทั่งบน USB3) ตรวจสอบให้แน่ใจว่าไม่ได้ขัดขวางโดยการดำเนินการใด ๆ ที่จะเรียกใช้การติดตั้ง (การเปิดแอปพลิเคชันไฟล์หรือดิสก์)

ขอบคุณสำหรับคำตอบของทุกคน

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