LINUX.ORG.RU
ФорумAdmin

Архивирование больших директорий, продолжение

 , , , ,


1

2

Это продолжение темы «Архивирование больших директорий (миллионы файлов) на продакшн сервере».

Были внесены поправки в код в соответствии с замечаниями пользователей Gotf (общие рекомендации), xorik (оценка работы ionice, упоминание cgroups c отличной ссылкой на обзор cgroups), val-amart (трюк с проверкой наличия команды)

Повторю основные функции скрипта archive_huge_dir.sh:

  1. Позволяет архивировать и паковать в тихом режиме директории с миллионами файлов в файлы со структурой директорий /целевая/директория/<год>/<месяц>/<исходная поддиректория>.tar.gz.
  2. Есть возможность лимитировать скорость чтения (опционально).
  3. Прогресбар поставляемый Pipe Viever-ом.
  4. В дополнение: если не хочется ограничивать по скорости, то стоит воспользоваться комбинацией
    ionice -c 3 nice -n 19 ./archive_huge_dir.sh ...

В процессе анализа предыдущей темы были сделаны выводы:

  • ionice помогает снизить нагрузку на диск, если снизить приоритет до idle. В компании с nice, который позволяет уменьшить нагрузку на проц, это не плохое решение для многих.
  • Тем кто решает задачи нагрузки на сервер нyжно знать о существовании cgroups.
  • Lock file или файл блокировок - это техника, позволяющая предотвратить одновременно работающие скрипты. flock хорошо справляется с этой задачей. Пример:
    flock -n ~/.archive_huge_dir.lock ./archive_huge_dir.sh ...

Спасибо всем за полезные коментарии к предыдущей теме. Если я не обратил внимания на чьи-то коментарии, то это сделано не нарочно, а потому что у меня не было времени все проверить.

я всё понять не могу: зачем нужен бекап, в котором часть файлов вчерашние, часть сегодняшние, а часть завтрашние?

А ты не боишься, что у тебя файл Б сделан из А, но в бекапе старая копия Б и новая копия А?

Или разворачивание «бекапа» не планируется, и это просто тренировка/спорт?

emulek ()
Ответ на: комментарий от emulek

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

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

taronto ()

Я бекаплю rdiff-ом, меня больше волнует вопрос «запасного бекапа», который льётся на другой сервер по сети.

Использую tar через pipe, или через nc (хотя это то еще извращение). Интересует как проверить что все файлы передались, сверить контрольные суммы не очень хороший вариант, файлов около 10 млн. Можно конечно сделать архив, затем передать его и сверить суммы архивов - но это уже оверхед.

invokercd ★★★★ ()
Ответ на: комментарий от invokercd

Интересует как проверить что все файлы передались

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

taronto ()
Ответ на: комментарий от taronto

Да как проверять то, если проверять сумму каждого файла это серьезно затормозит процесс. Разве что покопаю в сторону этого процесса через pipe.

invokercd ★★★★ ()
Ответ на: комментарий от invokercd

Да как проверять то, если проверять сумму каждого файла это серьезно затормозит процесс. Разве что покопаю в сторону этого процесса через pipe.

количество архивов быть большим не должно или вы собираетесь не архивы проверять а файлы в них? это не рационально. Либо я вас не понял, либо ваша задача далека от моей

taronto ()
Ответ на: комментарий от taronto

у меня есть много миллионов файлов (разного типа), их нужно передать на другую тачку по сети. Архивировать и передавать их одним архивом - это, как мне кажется, оверхед.

Хотел узнать мнение ваше.

invokercd ★★★★ ()

Cтоит рассмотреть возможность добавления информации для восстановления. Программа par2 делает это с помощью кода Рида-Соломона. Предлагаю встроить в скрипт добавление, сверку и восстановление с помощью par2.

Сразу убьется два зайца: как проверить целостность архива после передачи по сети и что делать с битым архивом.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от invokercd

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

этот скрипт удаляет исходные файлы, я забыл упомянуть, так что для бекапа не подходит в текущем виде, нужно выкинуть кусок из скрипта. Как сказал PtiCa можно использовать par2 (par2 create archive.tar.gz и par2 repair archive.tar.gz.par2) он проверку целостности данных делает и восстанавливает. Мой скрипт решает проблему чтения с диска в плохой большой директории, проверку целостности сюда вносить пока рано, слишком узкая специализация у скрипта

taronto ()
Ответ на: комментарий от Deleted

Cтоит рассмотреть возможность добавления информации для восстановления

конечно это бы хуже не сделало, но это усложнит скрип. А добавить пару шагов по созданию par2 данных и проверке архива не сложная задача, тем более там настройки свои есть. Скрипт будет не про то уже тогда

taronto ()
Ответ на: комментарий от invokercd

Если будет желание, могу помочь в тестинге и разработке.

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

taronto ()
Ответ на: комментарий от invokercd

я так понял, что речь шла о помощи. Возможно я предложил не приемлемый формат общения. Может создать полноценный репозиторий на гитхабе? Мой скайп такой же как и пользователь в ссылке на гитхаб в этой теме, если предложение в силе.

taronto ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.