5

Моя среда - Ubuntu 15.04 с ядром 3.19.0-28-generic и Btrfs v3.17.

У меня есть два идентичных внешних жестких диска USB, которые я использую со своим сценарием резервного копирования. Один из них отформатирован с помощью btrfs а другой - с помощью ext4 . Исходная файловая система всегда ext4 . Команда rsync выглядит так:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

Я только что понял, что резервное копирование, выполняемое на btrfs занимает очень много времени: чуть больше часа, по сравнению с 4 минутами, которые требуются для выполнения той же копии на ext4 .

Чтобы исключить сбои в работе диска, я выполнил несколько тестов, с dd и «дисковой утилитой», поставляемой с Ubuntu, но у меня одинаковая производительность на обоих дисках. Медленная часть кажется жесткой связью с предыдущей резервной копией. Даже после дефрагментации и очистки следующая команда занимает около 53 минут на btrfs , но только 1 минуту на ext4:

cp -arl "$previousBackup" "$destDir"

Исследуя Интернет, я обнаружил намеки на то, что производительность btrfs страдает от жестких ссылок, но я не ожидаю такой огромной разницы. Я обнаружил, что эта команда быстрее, но все еще занимает более 30 минут:

cp -ar --reflink "$previousBackup" "$destDir"

Кто-нибудь имеет опыт работы с таким поведением и может подтвердить это? Есть ли простой способ исправить это (например, различные варианты монтирования), или я должен попытаться удалить как можно больше жестких ссылок и просто использовать ссылки?

РЕДАКТИРОВАТЬ

Я только что узнал, что даже удаление каталога из btrfs требует более одного часа. Эта же операция выполняется мгновенно на "двойном" диске ext4 . Очевидно, здесь есть проблема с метаданными.

1 ответ1

1

Вы говорите, что копируете жесткие ссылки с помощью команды rsync , но где флаг -H ? Я не вижу это в вашей команде:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

Как я понимаю, как работает rsync отношении жестких ссылок, так это то, что без флага -H копируются реальные данные вместо жесткой ссылки, как объяснено на справочной странице rsync:

-H, -hard-ссылки

Это говорит rsync искать жестко связанные файлы при передаче и связывать вместе соответствующие файлы на принимающей стороне. Без этой опции жестко связанные файлы в передаче обрабатываются как отдельные файлы.

Я могу себе представить, что такая процедура, когда много похожих файлов копируются снова и снова, а не жестко связаны, привела бы к более медленному времени передачи.

Также рассмотрите возможность использования флага -z (--compress):

-z, --compress

С помощью этой опции rsync сжимает данные файла при его отправке на конечный компьютер, что уменьшает объем передаваемых данных - что полезно при медленном соединении.

Да, это передача с USB на USB в той же системе, поэтому, скорее всего, скорость уже оптимизирована, но не мешает увидеть -z , возможно, поможет преодолеть естественные узкие места в передаче данных через USB.

Хороший, простой учебник, который объясняет эти флаги, а также другие, можно найти здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .