快速磁盘克隆

Mik*_*ike 5 linux storage dd parallel-io

克隆磁盘时有没有办法让Linux预读?我使用名为"dd"的程序来克隆磁盘.我最后一次这样做,似乎操作系统正在阅读然后写作,但从来没有在同一时间.理想情况下,如果源磁盘可以跟上,目标磁盘将不断等待,而不是等待.

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

Joh*_*eff 10

Jaeger准将是对的:

dd if=/dev/sda of=/dev/sdb bs=1M
Run Code Online (Sandbox Code Playgroud)

此外,调整驱动器上的"预读"通常可以提高性能.默认值可能是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)
#
Run Code Online (Sandbox Code Playgroud)


Com*_*ger 7

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

dd if=/dev/sda of=/dev/sdb bs=1M
Run Code Online (Sandbox Code Playgroud)


小智 6

对我来说最快:

dd if=/dev/sda bs=1M iflag=direct | dd of=/dev/sdb bs=1M oflag=direct
Run Code Online (Sandbox Code Playgroud)

达到~100MiB/s,而其他选项(单工艺,无直接,默认512b块尺寸......)甚至达不到30MiB/s ......

要观察进度,请在另一个控制台中运行:

watch -n 60 killall -USR1 dd
Run Code Online (Sandbox Code Playgroud)