Резервное копирование Rsync на BTRFS очень медленное

Резервное копирование Rsync на BTRFS очень медленное

Моя среда — 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

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

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

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

-H, --hard-links

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

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

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

-z, --сжать

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

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

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

Связанный контент