如何使用 DD 從磁碟映像複製分割區?

如何使用 DD 從磁碟映像複製分割區?

我有一個磁碟映像,它是一個“整個”磁碟映像,例如包含多個分割區,我想克隆其中(不是第一個..)到外部磁碟機上的一個分割區上,上面有多個分割區(我也沒有將其複製到磁碟的第一個分割區上...)

對影像進行 FDisk 可以得到以下結果:

# fdisk -l 2013-02-09-wheezy-raspbian.img

磁碟 2013-02-09-wheezy-raspbian.img:1939 MB,1939865600 位元組
255個磁頭,63個扇區/磁軌,235個柱面,總共3788800個扇區
單位 = 1 * 512 = 512 位元組的磁區
扇區大小(邏輯/物理):512 位元組/512 位元組
I/O 大小(最小/最佳):512 位元組/512 位元組
磁碟標識符:0x00014d34

                         裝置引導開始結束區塊 ID 系統
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

塊設備如下圖所示:

# fdisk -l /dev/sdc

磁碟 /dev/sdc:8014 MB,8014266368 位元組
247個磁頭,62個扇區/磁軌,1022個柱面,總共15652864個扇區
單位 = 1 * 512 = 512 位元組的磁區
扇區大小(邏輯/物理):512 位元組/512 位元組
I/O 大小(最小/最佳):512 位元組/512 位元組
磁碟標識符:0x00000000

   裝置引導開始結束區塊 ID 系統
/dev/sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 Linux
#

我希望圖像的第二個分區替換塊設備的第二個分區。不用擔心尾部損壞的可用空間,我將使用 GParted 來清理它,而且無論如何我都需要它來做其他事情。

答案1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

如果--partscan不起作用,您也可以使用以下方法之一:

# partx -a /dev/loop7
# kpartx /dev/loop7

或類似的分區映射解決方案。

您可能應該先安裝它,看看它是否正確或是什麼。

當然,您也可以讀取 fdisk 輸出並直接給出或dd其他skip=131072內容,即使其跳過許多輸入區塊,以便它開始讀取分區所在的位置;但使用循環設備查看實際分割區會更好。

答案2

像這樣的東西應該​​有效:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

如果= 設定您要克隆的圖像

= 設定要複製映像的目標分割區

答案3

  1. 將鏡像掛載為環回設備:losetup -fP yourImage.img
  2. 現在您可以直接存取映像的每個分割區。如果你必須使用dd,你可以這樣做dd if=/dev/loop0p1 of=image.img,但我認為你會cat更喜歡。在 root shell 中,只需執行cat /dev/loop0p1 > image.img.這兩個範例都假設您需要第一個分割區,並且分配給您的環回裝置是/dev/loop0
  3. 使用完環回設備後,您可以使用 分離它losetup -d /dev/loop0。再次假設這/dev/loop0是您的環回設備。

答案4

您可以使用此命令僅將第二個分割區複製到單獨的映像

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

然後您可以將其複製到磁碟上的分割區的位置

dd if=second.img of=/dev/sdc2 bs=512

或者你甚至可以用一個命令來完成

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

只需確保在寫入之前卸載 /dev/sdc2 即可。

相關內容