快速磁盘克隆

时间:2020-03-05 18:50:52  来源:igfitidea点击:

克隆磁盘时是否可以让Linux提前读取?我使用名为" dd"的程序克隆磁盘。我上次执行此操作时,似乎操作系统正在读取然后写入,但从未同时出现过。理想情况下,如果源磁盘可以保持正常运行,则目标磁盘将不断进行写入,而无需等待。

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

解决方案

回答

也许我们可以使用两个过程

dd if=indevfile | dd of=outdevfile

我假设我们可以设置其他适合dd选项。
这有一些开销,但是应该允许阅读之间的异步
一个磁盘,写另一个磁盘。

回答

我们确定不是同时执行此操作吗?我希望磁盘缓存可以确保这种情况发生。如果没有,非阻塞甚至异步读/写都可能会有所帮助,

回答

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

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

回答

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

回答

准将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)
#