7

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

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

4

7 回答 7

10

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)
#
于 2008-09-11T04:14:15.023 回答
7

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

dd if=/dev/sda of=/dev/sdb bs=1M
于 2008-09-10T16:46:00.417 回答
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
于 2012-11-06T11:07:13.147 回答
2

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

“在这项工作中,我们回顾了可靠和有效地复制数据的问题,回顾了干预和干扰复制过程的所有硬件和软件机制。我们的考虑已经被编码为 fastdd,一个能够非常有效地复制数据的 C++ 程序,正如我们在测试中所展示的那样。”

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

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

https://github.com/zagonico86/fastdd

于 2014-07-15T13:05:17.227 回答
1

也许你可以使用两个进程

dd if=indevfile | dd of=outdevfile

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

于 2008-09-10T16:43:23.700 回答
0

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

于 2008-09-10T16:45:07.097 回答
0

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

于 2008-09-10T16:56:16.417 回答