快速磁盘克隆 [已关闭]

Fast Disk Cloning [closed]

提问人:Mike 提问时间:9/11/2008 最后编辑:JoshuaMike 更新时间:5/17/2018 访问量:21347

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

5年前关闭。

有没有办法让 Linux 在克隆磁盘时提前读取?我使用名为“dd”的程序来克隆磁盘。上次我这样做时,操作系统似乎在读取和写入,但从未同时读取。理想情况下,目标磁盘将不断写入而无需等待,当然,如果源磁盘可以跟上。

更新:我通常在克隆时选择较大的块大小(例如16M或32MB)。

Linux 存储 DD 并行 IO

评论


答:

1赞 Thomas Kammeyer 9/11/2008 #1

也许您可以使用两个过程

dd if=indevfile | dd of=outdevfile

我假设您可以根据自己的情况设置其他 dd 选项。 这有一些开销,但应该允许读取之间的异步 一个磁盘并写入另一个磁盘。

0赞 Leon Timmermans 9/11/2008 #2

你确定它没有同时这样做吗?我希望磁盘缓存能够确保它发生。如果没有,非阻塞甚至异步读/写可能会有所帮助,

评论

0赞 Mike 9/11/2008
我相信读/写交换是由于磁盘发出的声音而发生的。
7赞 Commodore Jaeger 9/11/2008 #3

您可以尝试使用 bs 参数增加块大小;默认情况下,我相信 dd 使用的块大小等于磁盘的首选块大小,这意味着更多的读取和写入来复制整个磁盘。Linux 的 dd 支持人类可读的后缀:

dd if=/dev/sda of=/dev/sdb bs=1M
0赞 Leon Timmermans 9/11/2008 #4

关于您的更新:您的硬盘缓存有多大?(尤其是写作)。这可能是太多了,您可能需要减少它以防止不必要的阻塞。

评论

0赞 Mike 9/11/2008
我不记得任何一个磁盘的缓存大小。
10赞 John Vasileff 9/11/2008 #5

Commodore Jaeger 说得对:

dd if=/dev/sda of=/dev/sdb bs=1M

此外,调整驱动器上的“预读”通常可以提高性能。默认值可能类似于 256,最佳值为 1024。每个设置都是不同的,因此您必须运行基准测试才能找到最佳价值。

# blockdev --getra /dev/sda
256
# blockdev --setra 1024 /dev/sda
# blockdev --getra /dev/sda
1024
# blockdev --help
Usage:
  blockdev -V
  blockdev --report [devices]
  blockdev [-v|-q] commands devices
Available commands:
    --getsz (get size in 512-byte sectors)
    --setro (set read-only)
    --setrw (set read-write)
    --getro (get read-only)
    --getss (get sectorsize)
    --getbsz    (get blocksize)
    --setbsz BLOCKSIZE  (set blocksize)
    --getsize   (get 32-bit sector count)
    --getsize64 (get size in bytes)
    --setra READAHEAD   (set readahead)
    --getra (get readahead)
    --flushbufs (flush buffers)
    --rereadpt  (reread partition table)
    --rmpart PARTNO (disable partition)
    --rmparts   (disable all partitions)
#
6赞 SteveMenard 11/6/2012 #6

对我来说最快的:

dd if=/dev/sda bs=1M iflag=direct | dd of=/dev/sdb bs=1M oflag=direct

达到 ~100MiB/s,而其他选项(单进程、无直接、默认 512b 块大小等)甚至达不到 30MiB/s......

若要查看进度,请在另一个控制台中运行:

watch -n 60 killall -USR1 dd

评论

0赞 pevik 9/21/2013
实际上对我来说是禁食的。dd if=/dev/sda of=/dev/sdb bs=1M
2赞 Paolinux 7/15/2014 #7

如果两个磁盘使用不同的通道(例如SATA),则可以使用fastDD等高性能工具。作者声称:

“在这项工作中,我们审查了可靠和高效的问题 复制数据,调用所有硬件和软件机制 干预和干扰复制过程。我们的考虑有 在fastdd中编码,这是一个能够非常复制数据的C++程序 正如我们在测试中所展示的那样,效率很高。

此外,该工具保持的语法与旧的 .dd

http://www.dei.unipd.it/~zagonico/fastdd/

https://github.com/zagonico86/fastdd