我有一个可引导的16 SD卡的图像。我创建了这样的图像:
cat /dev/sdd | gzip >sdcard.img.gz我很高兴因为
$ du -h sdcard.img.gz
482M sdcard.img.gz482 of而不是16 of,耶!
以下是(未压缩的)图像的详细信息:
$ du -h sdcard.img
15G sdcard.img
$ partx -s sdcard.img
NR START END SECTORS SIZE NAME UUID
1 16384 81919 65536 32M 6e1be81b-01
2 81920 3588095 3506176 1.7G 6e1be81b-02然而,现在我需要把这个图像写回SD卡,但我不想写14 of的尾随零/垃圾!那需要很长时间。
关键是,我不在乎备份中图像的大小,但我关心的是传输回SD卡的大小,因为复制到SD卡很慢,而复制14 of无用的数据是没有意义的。So压缩磁盘映像或复制到 sparse感知的 filesystem并不是我想要的。
发布于 2018-07-20 12:41:38
回答你的第一个问题:如果你有一个MBR,我建议你做一些事情,比如dd'ing原始驱动器的第一个兆字节(包含引导记录和可能的引导加载程序),然后迭代其中包含的分区:dev=/dev/sda fdisk -l "$dev" | sed -ne '/^\//s,\(^[^ ]*\) .*,\1,p' | while read part do dd "if=$part" "of=$(basename "$part")" done,在记录第一个兆字节到目标驱动器之后,请内核用partprobe或kpartx读取分区表。在此之后,您应该能够将相应的图像内容放到新的分区中。
发布于 2018-06-20 12:47:30
写到最后一个分区的末尾(例如,在本例中总共有2G (吉字节))。
为此,您可以使用dd。Check和doublecheck在您按Enter键之前将写到正确的SD卡(而不是另一个驱动器),因为dd没有任何问题地执行您告诉它做的事情。
此命令行从未压缩的映像文件中工作。
$ sudo dd if=sdcard.img of=/dev/sdx bs=1M count=2K其中x是驱动器字母。
但在这种情况下,有一个压缩的图像文件。以root的形式运行(例如,通过sudo -s和相应的命令行可以这样运行,其中zcat从gzip压缩文件中提取)。
# < sdcard.img.gz zcat | dd of=/dev/sdx bs=4096 count=524288
524288+0 records in
524288+0 records out
2147483648 bytes (2,1 GB, 2,0 GiB) copied, 56,6886 s, 37,9 MB/shttps://unix.stackexchange.com/questions/450844
复制相似问题