首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有自由空间的磁盘映像

没有自由空间的磁盘映像
EN

Unix & Linux用户
提问于 2018-06-20 11:55:49
回答 2查看 6.5K关注 0票数 1

我有一个可引导的16 SD卡的图像。我创建了这样的图像:

代码语言:javascript
复制
cat /dev/sdd | gzip >sdcard.img.gz

我很高兴因为

代码语言:javascript
复制
$ du -h sdcard.img.gz
482M    sdcard.img.gz

482 of而不是16 of,耶!

以下是(未压缩的)图像的详细信息:

代码语言:javascript
复制
$ 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的尾随零/垃圾!那需要很长时间。

  1. 如何在不复制上一个分区之后的内容的情况下创建映像?
  2. 当我已经创建了整个SD卡的形象,我如何能够截断它不包括无用的垃圾?

关键是,我不在乎备份中图像的大小,但我关心的是传输回SD卡的大小,因为复制到SD卡很慢,而复制14 of无用的数据是没有意义的。So压缩磁盘映像或复制到 sparse感知的 filesystem并不是我想要的。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 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,在记录第一个兆字节到目标驱动器之后,请内核用partprobekpartx读取分区表。在此之后,您应该能够将相应的图像内容放到新的分区中。

票数 1
EN

Unix & Linux用户

发布于 2018-06-20 12:47:30

写到最后一个分区的末尾(例如,在本例中总共有2G (吉字节))。

为此,您可以使用ddCheck和doublecheck在您按Enter键之前将写到正确的SD卡(而不是另一个驱动器),因为dd没有任何问题地执行您告诉它做的事情。

此命令行从未压缩的映像文件中工作。

代码语言:javascript
复制
$ sudo dd if=sdcard.img of=/dev/sdx bs=1M count=2K

其中x是驱动器字母。

但在这种情况下,有一个压缩的图像文件。以root的形式运行(例如,通过sudo -s和相应的命令行可以这样运行,其中zcatgzip压缩文件中提取)。

代码语言:javascript
复制
# < 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/s
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/450844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档