我一直在寻找有关如何缩小或直接调整/缩小大小的信息,这是dd
我为Raspberry Pi制作的32GB USB闪存驱动器转换为2G img文件。我已经调整了分区的大小,其中一个分区的Win32 FAT为64M,Linux分区为2048Mb(2G),而我想要的只是一个dd
2G左右的IMG文件。
我知道有一种Gzip压缩方法,但是一旦解压缩,它将解压缩一个32GB的img文件,有时我没有那么多空间。我只希望能够将文件dd导入2GB USB闪存驱动器,而无需使用仅2G的32G文件。得到它?
另外,我正在使用SSD,并且我已经读过-/dev/zero
映像文件有点有害,所以我希望有一种更简单的方法来执行此操作。我可以使用Linux和Windows,因此很高兴听到您的建议!
更新:不幸的是,我犯了一个错误,并用另一个驱动器替换了USB闪存驱动器,但是我已经将整个img文件挂载/dev/loop0
并运行fdisk -l
到它,这是输出:
Disk flashrom32g.img: 29.8 GiB, 32010928128 bytes, 62521344 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: 0xaebebc78
Device Boot Start End Sectors Size Id Type
flashrom32g.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
flashrom32g.img2 137216 4331519 4194304 2G 83 Linux
USB密钥的相关部分正好占据字节的4331520
扇区512
(从0
到编号4331519
),因此命令应为:
dd if=/dev/your_usb_key of=/path/to/image.dd bs=512 count=4331520
编辑(以解决评论):
为什么是4331520(如果是4331519)呢?+1是因为原因吗?
如果从扇区开始编号,1
而最后一个是编号,4331519
那么总共会有扇区4331519
。但是,正如我所说的那样0
,这就是原因count=4331520
。
我对这种计算感到不安,难道没有一种自动的方法吗?
坦白说,我不知道。我倾向于认为,如果您需要这样做,那么您应该更好地了解自己在做什么。如果您理解了,那么您可以进行数学运算并且知道陷阱,如果没有自己的计算,您会感到不安。
像DD这样的东西,但会删除空白/未分区的空间?
您不想剥离所有未分区的空间。在扇区中有带有分区表的MBR 0
。您的扇区1..8191
可能包含引导加载程序代码。
如果有GPT,则磁盘的末尾将有一个备份分区表,并且该分区表也将位于未分区的空间中。
而且,如果您的分区之间有空间,那么dd
类似您的工具就无法跳过它,因为它将有效地将后一个分区移到映像的开头,并且必须调整分区表(在映像中)。在这种情况下,另一种策略是在将输出图像写为稀疏文件时,用零动态替换该中间分区空间。
还有一个陷阱:请阅读此问题和我的回答,然后考虑该工具需要多么复杂才能成功地从该混乱中剥离出未分区的空间。
通常,您始终可以制作MBR(或MBR +引导程序)和每个分区的单独映像。在您的情况下,将是这样的:
dd if=/dev/your_usb_key of=/path/to/image_MBR_bootloader.dd bs=512 count=8192
dd if=/dev/your_usb_key1 of=/path/to/partition1.dd
dd if=/dev/your_usb_key2 of=/path/to/partition2.dd
如果要删除空白空间(即所示的空间df
),则应使用了解文件系统并在文件级别(而不是磁盘扇区)上工作的工具。我确信dd
(或类似的东西dd
)不是适合这种工作的工具。
我如何才能确保在不将其转储到真实驱动器中进行检查的情况下可以正常工作?
学习,所以有一天你可以说“我知道我在做什么”。尝试和错误是学习过程的一部分。我认为将映像转储到实际驱动器中进行检查将是一个很好的尝试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句