Накладные расходы на флаг -a в команде cp - PullRequest
1 голос
/ 23 февраля 2011

Допустим, у нас есть специальная служба резервного копирования, которая следует подходу rsync , предложенному Майком Рубелем .Чтобы выполнить резервное вращение, необходимо использовать команду cp:

cp -al source target

Имея это, я пытаюсь повернуть каталог на 35 ГБ, в котором много маленьких файлов (~ 5–200 КБ)очень большой каталог дерева.Проблема в том, что это длится не менее пяти часов.Мне кажется, что это много, особенно с использованием опции -l.

Это нормально, что поведение с дисками SATA?Может ли флаг комбинации -al вызывать дополнительные издержки в команде cp, что приводит к этой задержке?

Спасибо!

1 Ответ

1 голос
/ 23 февраля 2011

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

Но в любом случае это звучит разочаровывающе.

Несколько идей сразу приходят на ум:

  • Вы можете повернутьВыключите a_time время простоя для конкретной файловой системы, если вы не используете a_time для чего-либо.(Добавьте параметр noatime mount(8) в ваш файл fstab(5).) Это предотвратит огромное количество очень маленьких разбросанных записей по всей стороне «чтения» вашей операции копирования.Это может сбить небольшой процент времени.5%?10%?Может больше?Плюсом является то, что для использования mount(8) -oremount,noatime требуется несколько секунд, а затем выясняется.:)

  • Вы можете использовать жесткие ссылки вместо копий .(cp(1) упоминает параметр командной строки -l для использования ссылок - я должен смущенно признать, что никогда не пробовал, я всегда делал свои ссылки с помощью ln(1), но для сотен тысяч файлов звучит неоправданноПоэтому попробуйте от -l до cp(1) и отчитайтесь. :) Преимущество использования жестких ссылок заключается в (а) сохранении дискового пространства (б) сохраненной пропускной способности диска - только метаданные считываются / записываются, что может быть в тысячи раз быстрее,Однако это может быть не тот инструмент, который вам нужен, он действительно зависит от того, как ваши приложения изменяют данные во время выполнения операции резервного копирования.

  • Можно придумать более разумную замену для всего этого.rsync отличный инструмент, но не в высшей степени блестящий.git(1) может быть более умным инструментом для вашей задачи.Во-первых, вообще не создавая копию, это может пойти намного быстрее.

  • Вы можете использовать некоторые хитрые приемы блочных устройств: например, LVM снимки, чтобы разрешитьВаша операция резервного копирования должна продолжаться параллельно с использованием, и удалить моментальный снимок, когда резервное копирование будет сделано.Это должно быть значительно быстрее, если в ваших данных нет большого оттока.Если есть много оттока, это может быть только немного лучше.Но это позволило бы вашему rsync начать сразу же, а не с другой стороны пятичасового окна.

...