我正在使用此命令将 Kubuntu 映像写入我的 USB 记忆棒
pv /home/manuel/Downloads/torrents/kubuntu-16.10-desktop-amd64.iso > /dev/sdb
然而,输出的进度条pv
一开始就显示为半满,因此,看上去传输的速度一开始就非常快,然后就明显变慢了。
1,49GiB 0:03:03 [8,31MiB/s] [===============// //===============>] 100%
这使得使用该pv
命令变得毫无用处。
我该如何禁用这个似乎已经激活的缓存功能?
答案1
我在研究一个类似的问题时发现了您的帖子,当时我正尝试将图像写入 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
(将状态设置为无会停止dd
混乱的pv
显示)。
pv
单独使用会立即显示 100%,但随后需要 8 分 28 秒才能实际完成:
pv 2017-09-07-raspbian-stretch-lite.img > /dev/sdX
dd
单独使用时没有任何进度视图,耗时 8 分 15 秒:
dd if=2017-09-07-raspbian-stretch-lite.img of=/dev/sdX bs=1M
使用与dd
上面相同的方法但添加后oflag=direct
变为 2 分 54 秒:
dd if=2017-09-07-raspbian-stretch-lite.img of=/dev/sdX bs=1M oflag=direct
我尝试了许多不同的组合,但速度要么慢得多(有些甚至需要 12 分钟!),要么立即显示 100%。
使用pv
此方法的一个注意事项是,您需要先找出图像的大小,然后使用选项指定它-s
。如果您像我一样编写脚本,那么同时确定文件大小就很容易了。
希望它能对某人有所帮助。
答案2
根据...
dd if=2017-09-07-raspbian-stretch-lite.img of=/dev/sdX bs=1M oflag=direct
我对此做了一些修改...
dd if=/dev/zero | pv -tearp -s 1820g | dd of=/dev/sda bs=100M oflag=direct
dd 立即回答:suggest iflag=fullblock
所以我做了...
dd if=/dev/zero | pv -tearp -s 1820g | dd of=/dev/sda bs=100M iflag=fullblock
写作率56,3 MiB/s
从122MiB/s
这意味着需要时间来填充 2TB 硬盘
由约9小时缩短至4小时。
设备:
ASUS x77vg
4GB Memory
Linux Mate 18.3
HDD: Seagate ST2000LM015-2E81 - Size: 1863GiB
希望这对某人有帮助......