使用“pv”写入磁盘似乎一开始很快,最后却很慢

使用“pv”写入磁盘似乎一开始很快,最后却很慢

我正在使用此命令将 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%,但之后需要几分钟才能真正完成。

我找到了一个解决方案,即使用ddpv和 管道,并将写入 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/s122MiB/s

这意味着需要时间来填充 2TB 硬盘

由约9小时缩短至4小时。

设备:

        ASUS x77vg
        4GB Memory
        Linux Mate 18.3
        HDD: Seagate ST2000LM015-2E81 - Size: 1863GiB

希望这对某人有帮助......

相关内容