创建没有未分配分区的 USB 驱动器映像

创建没有未分配分区的 USB 驱动器映像

我的系统上连接了 8GB USB 驱动器,如下所示:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

因此基本上我的 FAT 分区大约有 70 MB,ext2 分区大约有 740MB,其余空间(~7 GB)未分配。现在,当我通过以下方式 dd 我的 USB 硬盘时:

dd if=/dev/sdb of=myimage.img bs=1M

输出文件(myimage.img)大约为8GB,这是dd的正常操作。

问题:我正在寻找一种方法来直接克隆我的 USB 硬盘,而无需未分配的空间,以便我的结果文件大约为 1 GB未压缩而不是 8 GB。我之所以问这个问题是因为输出文件 (myimage.img) 正在被模拟器程序用来启动映像。模拟器可以处理 8 GB 的文件,但我不想浪费我的磁盘空间。

答案1

如果我理解正确的话,您想要创建一个从磁盘起始到最后一个分区结束的映像。

执行此操作的参数ddcount=。您的最后一个分区以 103 结尾,计数将需要为 1 extra(104),您的单元大小为 8225280 字节(根据输出fdisk -l)。因此,您可以简单地这样修改命令:

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

不过,我建议你fdisk -u -l /dev/sdb改为运行。在这个时代,圆柱体已经不再重要了,所以你最好查看扇区数以避免任何舍入错误。然后你必须运行:

dd if=/dev/sdb of=myimage.img count=...

其中 count 将设置为您fdisk -u -l在最后一个分区末尾获得的数字加一,而不是以前的 104。默认的块大小为512 字节,这也是输出中将使用的dd单位。fdisk -u -l

GPT 分区的备份分区表存储在磁盘的末尾,但由于您没有使用 GPT,所以没问题。

答案2

您只需要告诉 dd 只读取您感兴趣的驱动器部分。您正在寻找的参数是count

因此,将柱面大小 8,225,280 乘以正在使用的柱面数 103,得到 847,203,840 字节。由于您使用的块大小为 1 兆字节,因此请将该字节转换为兆字节,即 808。

所以你的命令是dd if=... of=... bs=1M count=808

相关内容