Який найшвидший спосіб скопіювати розріджений файл? Який метод призводить до найменшого файлу?


11

Передумови : Я копіюю розріджений VM-образ qcow2 розміром 200 ГБ, але має 16 ГБ виділених блоків. Я намагався різними методами скопіювати цей розріджений файл на одному сервері і отримав деякі попередні результати. Навколишнім середовищем є RHEL 6.6 або CentOS 6.6 x64.

ls -lhs srcFile 
16G -rw-r--r-- 1 qemu qemu 201G Feb  4 11:50 srcFile

Через cp - найкраща швидкість

cp --sparse=always srcFile dstFile
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 1:02 (mm:ss) 

Via dd - найкращий загальний виконавець

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=4M conv=sparse
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/21GB actual, bloat: 5GB
    Copy time: 2:02 (mm:ss)

Через cpio

mkdir tmp$$
echo srcFile | cpio -p --sparse tmp$$; mv tmp$$/srcFile dstFile
rmdir tmp$$
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 9:26 (mm:ss)

Через rsync

rsync --ignore-existing -aS srcFile dstFile
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 24:49 (mm:ss)

Через virt-sparsify - найкращий розмір

virt-sparsify srcFile dstFile
    Copied 200GB max/16GB actual VM as 200GB max/16GB actual, bloat: 0
    Copy time: 17:37 (mm:ss)

Варіант блочного розміру

Мене хвилювало "роздуття" під час копіювання DD (збільшення розміру файлу від оригіналу), тому я змінив розмір блоків. Я використав "час", щоб отримати також загальний час і% CPU. Оригінальний файл у даному випадку - це 7,3 ГБ із розрідженим 200 ГБ файлом:

4K:   5:54.64, 56%, 7.3GB
8K:   3:43.25, 58%, 7.3GB
16K:  2:23.20, 59%, 7.3GB
32K:  1:49.25, 62%, 7.3GB
64K:  1:33.62, 64%, 7.3GB
128K: 1:40.83, 55%, 7.4GB
256K: 1:22.73, 64%, 7.5GB
512K: 1:44.84, 74%, 7.6GB
1M:   1:16.59, 70%, 7.9GB
2M:   1:21.58, 66%, 8.4GB
4M:   1:17.52, 69%, 9.5GB
8M:   1:10.92, 76%, 12GB
16M:  1:17.09, 78%, 16GB
32M:  2:54.10, 90%, 22GB

ЗАПИТАННЯ : Чи можете ви підтвердити, що я визначив найкращі методи копіювання розрідженого файлу для отримання найкращої загальної продуктивності? Будь-які пропозиції щодо того, як зробити це краще, вітаються, як і будь-які занепокоєння, які ви можете мати з приводу методів, які я використовую.


Єдиний інший, який я б спробував, враховуючи ваші похвальні зусилля, - це rsync з варіантом --sparse. Можливо також, що різний розмір блоку в dd поліпшив би його швидкість або посилився.
mpez0

дьоготь - це також добре спробувати
Олів'є Дулак

@OlivierDulac Я спробував tar, але виконавець настільки поганий, що я навіть не включав його. Мені слід мати. Вище наведені місцеві копії. Я додаю мережеві дані про ефективність копіювання для мережі 10 Гбіт / с, копіюючи в ту ж підмережу. Після того, як я це отримаю, я думаю, що у мене буде достатньо даних, щоб зробити вагомий висновок, для якого найкращий виконавець.
Стів Америге

rsync також підтримує --sparse для створення цього стилю копіювання. Ви можете спробувати це. Крім того, є додаткова перевага під час вимірювання як при локальному, так і в мережевому копіюванні.
Тревіс Кемпбелл

@TravisCampbell Я додав дані для rsync. Це був найгірший виконавець усіх тестів, які я проводив.
Стів Америдж

Відповіді:


5

З вищенаведеного бенчмаркінгу, схоже, що використання DD на нашому цільовому обладнанні з блочним розміром 64K дає нам найкращий загальний результат, враховуючи час копіювання та розшарування:

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse

2
Привіт Стіве, будь ласка, розділіть на питання відповідь, як це працюють сайти обміну stackexchange.
буммі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.