克隆磁盘时有没有办法让Linux预读?我使用名为“dd”的程序来克隆磁盘。我最后一次这样做,似乎操作系统正在阅读然后写作,但从来没有在同一时间。理想情况下,如果源磁盘可以跟上,目标磁盘将不断地进行写操作而不必等待。
更新:我通常在克隆时选择较大的块大小(例如16M或32MB)。
答案 0 :(得分:10)
准备者耶格是对的:
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)
#
答案 1 :(得分:7)
您可以尝试使用bs参数增加块大小;默认情况下,我认为dd使用的块大小等于磁盘的首选块大小,这意味着要复制整个磁盘需要更多的读写操作。 Linux的dd支持人类可读的后缀:
dd if=/dev/sda of=/dev/sdb bs=1M
答案 2 :(得分: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
答案 3 :(得分:1)
也许你可以使用两个过程
dd if=indevfile | dd of=outdevfile
我假设您可以根据自己的需要设置其他dd选项。 这有一些开销,但应该允许读取之间的异步 一个磁盘并写另一个。
答案 4 :(得分:1)
如果两个磁盘使用不同的通道(例如SATA),则可以使用fastDD等高性能工具。作者声称:
“在这项工作中,我们审查了可靠和有效的问题 复制数据,回忆所有的硬件和软件机制 介入和干涉复制过程。我们的考虑有 已经在fastdd中编码,这是一个能够非常复制数据的C ++程序 正如我们在测试中所展示的那样有效。“
此外,该工具的语法与旧dd
非常相似。
答案 5 :(得分:0)
你确定它不会同时这样做吗?我希望磁盘缓存可以确保它发生。如果没有,非阻塞甚至异步读/写可能会有所帮助,
答案 6 :(得分:0)
关于您的更新:您的HD的缓存有多大? (特别是写作)。这可能是太多了,您可能需要减少它以防止不必要的阻塞。