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


13

我的系统连接了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)未分配。现在,当我通过以下方式添加USB硬盘驱动器时:

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

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

问题:我要寻找的是一种直接克隆USB硬盘驱动器而没有未分配空间的方法,这样我的结果文件将大约有1 GB的未压缩空间,而不是8 GB。我问的原因是因为模拟器程序正在使用输出文件(myimage.img)来引导映像。模拟器可以处理8 GB的文件,但我不想浪费磁盘空间。


1
这有点类似问题,有趣的解决方案:serverfault.com/q/281628/141604
一周

Answers:


15

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

dd这样做的参数是count=。您的最后一个分区以103结尾,并且计数需要额外增加1(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在最后一个分区末尾获得的数字加1,而不是以前的104。默认的块大小为dd512字节,这也是fdisk -u -l将在输出中使用的单位。

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


2

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.