
我有一個磁碟映像,它是一個“整個”磁碟映像,例如包含多個分割區,我想克隆一其中(不是第一個..)到外部磁碟機上的一個分割區上,上面有多個分割區(我也沒有將其複製到磁碟的第一個分割區上...)
對影像進行 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
- 將鏡像掛載為環回設備:
losetup -fP yourImage.img
- 現在您可以直接存取映像的每個分割區。如果你必須使用
dd
,你可以這樣做dd if=/dev/loop0p1 of=image.img
,但我認為你會cat
更喜歡。在 root shell 中,只需執行cat /dev/loop0p1 > image.img
.這兩個範例都假設您需要第一個分割區,並且分配給您的環回裝置是/dev/loop0
- 使用完環回設備後,您可以使用 分離它
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 即可。