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


9

ฉันมีการ์ด SD 16GB ที่มีพาร์ทิชันอยู่สองสามอัน (จริงๆแล้วเป็นการ์ดสำหรับ Raspberry Pi) ฉันมีการ์ด 4GB อีกหลายตัวที่ฉันต้องการโคลนบัตรหลัก 3 พาร์ติชันบนบัตรหลักคือ:

  • Rasp boot partition, FAT, 60MB
  • พาร์ติชัน Linux, ext2, 1GB
  • พาร์ติชั่น "storage" เพิ่มเติม, FAT, 1GB

ถ้าฉันใช้ddเพื่อสร้างภาพของการ์ดผ่าน:

dd if=/dev/sdb of=~/sd-card.bin

ค่าผลลัพธ์ของ bin คือขนาด 16GB มีวิธีใช้ddในการคัดลอกเฉพาะสิ่งที่ใช้จริงคือ <4GB เพื่อที่ฉันจะนำddมันไปใช้กับการ์ด 4GB ใหม่ได้หรือไม่? หรือมีทางออกที่ดีกว่าที่ฉันควรใช้?


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

คำตอบ:


9

ฉันคิดว่าคุณใช้ PC linux หรือคอมพิวเตอร์ mac เพื่อทำสำเนาไม่ใช่ราสเบอร์รี่ pi เอง คุณอาจต้องเพิ่มขนาดบล็อก

ฉันได้เห็นหนึ่งและสี่ megs ใช้สำหรับดิสก์ Raspberry pi โดยระบุ bs = 1M หรือ bs = 4M ฉันคิดว่าขนาดบล็อกมีความสำคัญมากกว่าเมื่อเขียนดิสก์เนื่องจากการถ่ายโอนจำนวนมากเร็วกว่าขนาดที่เล็กกว่า นี่ไม่ได้ตั้งค่าขนาดบล็อกสำหรับดิสก์ แต่จะมีผลกับขนาดของการถ่ายโอน dd ที่ใช้ เหตุผลหนึ่งในการตั้งขนาดบล็อกขนาดใหญ่คือความจำเป็นในการลบแฟลชก่อนที่จะเขียน สิ่งนี้ทำโดยอัตโนมัติ แต่เร็วกว่าสำหรับการถ่ายโอนที่มีขนาดใหญ่กว่าขนาดลบขั้นต่ำ

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

สิ่งที่ต้องการdd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000จะสร้างภาพที่มีขนาด 4000MB

ดูhttp://en.wikipedia.org/wiki/Dd_(Unix)และhttp://elinux.org/RPi_Easy_SD_Card_Setupสำหรับข้อมูลเพิ่มเติม ไม่แน่ใจว่าจะหาจุดจบของพาร์ติชั่นสุดท้ายหรือขนาดการ์ดทั้งหมดได้อย่างไร อย่างไรก็ตามหากคุณฟอร์แมตดิสก์คุณอาจจะรู้วิธีการทำเช่นนี้


ขอบคุณสำหรับข้อมูล. ฉันไม่ทราบตัวเลือกการนับ ฉันจะลองดูสิ

@ chanlie มันจะน่าสนใจถ้าคุณสามารถลองใช้โดยไม่ต้องมีตัวเลือกการนับและรายงานกลับ ตรวจสอบให้แน่ใจว่าได้ตรวจสอบว่ามีการรายงานขนาดของดิสก์อย่างไรและหากคุณสามารถเพิ่มไฟล์ลงในดิสก์และการเปลี่ยนแปลงขนาดได้ 'cos เมื่อ dd ล้มเหลวที่เกี่ยวข้องกับดิสก์ขนาดต่าง ๆ คุณจะได้รับปัญหาแบบนั้น นี่คือตัวอย่างที่ฉันสับสนกับ dd กับไดรฟ์ที่มีขนาดต่างกันสองตัว superuser.com/questions/538583/difficulty-resizing-a-partition ในที่สุดฉันก็ไม่ได้ใช้ dd เพื่อทำโคลน
barlop

3

เมื่อขยายคำตอบของ Williamคุณสามารถคำนวณจุดจบของพาร์ติชั่นสุดท้ายโดยใช้fdiskและเครื่องคำนวณ:

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 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: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

พื้นที่ใช้งานทั้งหมดเป็นไบต์ = เซกเตอร์สิ้นสุดของขนาดเซกเตอร์พาร์ติชัน X ล่าสุด (ที่นี่คือ 3667967 x 512)

พื้นที่ใช้งานทั้งหมดในหน่วย GB = พื้นที่ใช้งานทั้งหมดเป็นไบต์ / 1024 3 (นี่คือ 1.749023 GB)

โดยปกติแล้วมันไม่สำคัญที่จะสร้างภาพที่ตัดลงไปจนถึงบิตสุดท้ายของข้อมูลที่มีประโยชน์ดังนั้นในตัวอย่างข้างต้นฉันจะสร้างภาพขนาด 2 GB โดยใช้วิธีที่ William อธิบายไว้ในคำตอบก่อนหน้านี้ :

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

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

วิธีนี้ใช้ได้ผลกับฉันมากกว่าหนึ่งโหล หากมีข้อบกพร่องร้ายแรงในวิธีนี้พวกเขายังไม่ได้โผล่ขึ้นมา

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