Моя среда — 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.
Хороший и простой урок, который объясняет эти флаги, а также другие.можно найти здесь.