Mul*_*ync 1 command-line disk-image
我正在使用此命令将 Kubuntu 图像写入我的 U 盘
pv /home/manuel/Downloads/torrents/kubuntu-16.10-desktop-amd64.iso > /dev/sdb
Run Code Online (Sandbox Code Playgroud)
然而,输出进度条pv
从一开始就被填满了一半。因此,看起来传输会以令人难以置信的速度开始并大幅减慢。
1,49GiB 0:03:03 [8,31MiB/s] [===============// //===============>] 100%
Run Code Online (Sandbox Code Playgroud)
这使得使用该pv
命令相当无用。
如何禁用此似乎已激活的缓存功能?
小智 6
我在调查尝试将图像写入 SD 卡(通过 USB 读/写器)的类似问题时发现了您的帖子。使用 pv,它几乎会立即显示 100%,但之后需要几分钟才能真正完成。
我找到了使用dd
,pv
和管道并将写入 dd 设置为直接模式的问题的解决方案。这也有很大的提高写入速度的效果。我不知道使用这种方法是否有任何缺点(我读回了图像并执行了校验和 - 一切看起来都没有问题)。
我的示例是使用 raspbian (2017-09-07-raspbian-stretch-lite.img) 的图像,其大小为 1854590976 字节 (1.8GB)。我已经展示了其他几种方法,您可以看到所用时间的差异。
所以,使用dd | pv | dd
直接模式,只用了 2 分 57 秒:
dd if=2017-09-07-raspbian-stretch-lite.img ibs=1M status=none | pv -s 1854590976 | dd of=/dev/sdX obs=1M oflag=direct status=none
Run Code Online (Sandbox Code Playgroud)
(将 status 设置为 none 会阻止显示dd
混乱pv
)。
单独使用pv
立即显示 100%,但实际完成需要 8 分 28 秒:
pv 2017-09-07-raspbian-stretch-lite.img > /dev/sdX
Run Code Online (Sandbox Code Playgroud)
dd
在没有任何进度视图的情况下单独使用,耗时 8 分 15 秒:
dd if=2017-09-07-raspbian-stretch-lite.img of=/dev/sdX bs=1M
Run Code Online (Sandbox Code Playgroud)
使用上述相同dd
但添加oflag=direct
使其成为 2 分钟 54:
dd if=2017-09-07-raspbian-stretch-lite.img of=/dev/sdX bs=1M oflag=direct
Run Code Online (Sandbox Code Playgroud)
我尝试了多种不同的组合,它们要么慢得多(有些需要长达 12 分钟!),要么再次立即显示 100%。
使用pv
这种方式的一个警告是,您需要先找出图像的大小,并使用-s
选项指定它。如果你像我一样编写脚本,同时确定文件大小很容易。
希望它可以帮助某人。