Решено: архивирование большого кол-ва файлов

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Решено: архивирование большого кол-ва файлов

Сообщение azsx »

У меня дебиан. На компе (2,7гц, 2 ядра, Е8400, загрузка цп и без архивирования 100%) надо каждые несколько дней архивировать большое количество файлов (сейчас 900 тысяч). Файлы от 7 кб до 90 кб, в основном 50 кб. Место на винте много, винт сата загружен не сильно. Проводится архивирование, затем файлы копируются на виндос машину и распаковываются (по идее). Улучшить тех характеристики машины-сервера я сейчас не могу. Могу выделить из 8 гб оперативки 2 гб, не больше. Меня не устраивает скорость архивирования команды tar czvf
Вопрос, 1. есть ли какие либо другие решения? Скорость работы главное.
2. Не может быть такое, что я путаюсь, и скорость архивирования нормальная и лучше ничо не придумаешь, а вопрос именно в открывании большого кол-ва файлов?
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Решено: архивирование большого кол-ва файлов

Сообщение DaemonTux »

Ну если у вас 100% загрузка CPU То конечно вас скорость сжатия не устроит. Так как сжатие требует много вычислений.

Ну во первых может вы таки поделитесь что делает ваш комп. Может для начала его стоит понастроить. Чтобы меньше процессор кушался.

По сабжу. Ну есть несколько вариантов копирования. Можно и без сжатия архивировать. В чистый тар. Должно получиться быстрее так как проц будет задействован по минимому.
Можно заюзать rsync.
Если эти 900 тыс файлов не все изменяются Может сделать инкрементальный бекап.
Если эти файлы не все изменяются. еще и текстовые может имеет смысл попробовать git

В общем больше подробностей
Vladivostok Linux User Group
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено: архивирование большого кол-ва файлов

Сообщение azsx »

Ну во первых может вы таки поделитесь что делает ваш комп. Может для начала его стоит понастроить. Чтобы меньше процессор кушался.

к сожалению тот комп выполняет другую работу, не связанную с этими файлами. Там три сата винта, запущено штук 6 вбокс машин, активно юзают один из винтов, программы идут только под винду и только в той среде что их запустили (платные), эта работа тоже очень важна, так что вот так...
Если эти 900 тыс файлов не все изменяются Может сделать инкрементальный бекап.
Если эти файлы не все изменяются. еще и текстовые может имеет смысл попробовать git

смысл в том, что файлы не нужны в архиве. Мне надо заархировать, скопировать по инету на виндос машину, распаковать там и обработать. Так как я собираю свои файлы из нескольких источников, а обработка минимальная (хотя и значительно уменьшит размер), я решил что лучше просто копировать архивы.
Можно и без сжатия архивировать. В чистый тар. Должно получиться быстрее так как проц будет задействован по минимому.

допустим я соберу их свои файлы в один файл без сжатия, а затем сожму получившийся готовый большой файл. Как думаете будет прирост производительности?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: архивирование большого кол-ва файлов

Сообщение drBatty »

DaemonTux писал(а):
24.11.2011 07:13
Ну если у вас 100% загрузка CPU То конечно вас скорость сжатия не устроит. Так как сжатие требует много вычислений.

не много. Я очень сомневаюсь, что сжатие как-то замедляет (может даже немного ускоряет, ибо меньше писать). Это конечно я про gzip
azsx писал(а):
24.11.2011 08:05
допустим я соберу их свои файлы в один файл без сжатия, а затем сожму получившийся готовый большой файл. Как думаете будет прирост производительности?

на 99% будет только хуже. Ибо tar -cz делает то-же, что и tar -c | gzip, т.е. пакует, и сразу сживает. Если вы запишете и прочитаете промежуточный файл - будет ещё хуже.
azsx писал(а):
24.11.2011 08:05
смысл в том, что файлы не нужны в архиве. Мне надо заархировать, скопировать по инету на виндос машину, распаковать там и обработать. Так как я собираю свои файлы из нескольких источников, а обработка минимальная (хотя и значительно уменьшит размер), я решил что лучше просто копировать архивы.

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

Код: Выделить всё

find /dir1/ /dir2/ /dir3/ -type f -newer последний_бекап.tgz

Прямо этой-же командой вы можете создать новый архив с посл. файлами, а потом его отправить по назначению, и распаковать в те-же папки.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено: архивирование большого кол-ва файлов

Сообщение azsx »

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

меняются абсолютно все файлы, так как они формируются последовательно! После архивации и копирования файлы с линукс машины удаляются.
-----------------------------
то есть ничего быстрее gzip придумать под линукс нельзя правильно?
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: архивирование большого кол-ва файлов

Сообщение neol »

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

inotify, а не find потому что:
- файл будет уже точно полностью записан
- не будет необходимости пробегать все 900к файлов, чтобы найти нужные.

Хотя как вариант можно формировать списочек find'ом, загонять в архив и тут же удалять.
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Решено: архивирование большого кол-ва файлов

Сообщение MrClon »

Что это за файлы, хорошо-ли сжимаются. Жирный-ли у сервера канал в интернет? Может быстрее передавать файлы в не сжатом виде (tar cf если мне не изменяет память).
Что за обработке, значительно уменьшающей их объём, подвергаются файлы? Почему её нельзя делать непосредственно на сервере.
Те приложения в виртуалках действительно активно используют CPU? Аппаратная виртуализация включена? О другой системе виртуализации не задумывался? VB всё-же в основном под десктопы заточен.

P.S. кстати да, стоит задуматься а не вытягивать-ли файлы с сервера чаще.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено: архивирование большого кол-ва файлов

Сообщение azsx »

наверное беда в том, что я не правильно задал вопрос. Надо было спросить, есть ли архивация быстрее gzip в линуксе. drBatty сказал, проц нагружается мало, при расчете производительности архивирования (в моем случае) тормозит систему винт, а не проц.
Что это за файлы, хорошо-ли сжимаются. Жирный-ли у сервера канал в интернет? Может быстрее передавать файлы в не сжатом виде (tar cf если мне не изменяет память).
Что за обработке, значительно уменьшающей их объём, подвергаются файлы? Почему её нельзя делать непосредственно на сервере.
Те приложения в виртуалках действительно активно используют CPU? Аппаратная виртуализация включена? О другой системе виртуализации не задумывался? VB всё-же в основном под десктопы заточен.
P.S. кстати да, стоит задуматься а не вытягивать-ли файлы с сервера чаще.

файлы текстовые, сжатие в 5,5 раз (щас посчитал на одном из архивов в 80 тыщ файлов). Не хочу делать обработку на сервере, так как сперва желательно все подготовить, а потом уже всё обработать., обработка - удаление мусора и грамотная разбивка текстового файла для разных полей в бд (муть короче). Да приложения вбокс активно используют цпу и винт, даже не знаю на е8400 включать виртуализацию? не охота мне тот комп настраивать мне только бы мою задачу решить. Другую систему поставить не могу, программы не пойдут, они привязаны к системе в общем (опять же, мне это не надо). Вытягивать файлы чаще с этого сервера я смысла не вижу, фйлы собираются по миллиону (приблизительно) потом скрипт завершается (надо с другими параметрами запускать). Мне кажется правильнее сперва обрабатывать всеь скрипт, а потом ставить архивацию, это будет в разы быстрее, чем что то там настраивать. На другом впс я такое настрою, когда доберусь, пока я там мучаюсь. Вот на впс винт 5 гб, там очень разумно сделать архивацию по крону, но мне уже предложили способ с файнд.
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Решено: архивирование большого кол-ва файлов

Сообщение MrClon »

azsx писал(а):
24.11.2011 11:09
наверное беда в том, что я не правильно задал вопрос. Надо было спросить, есть ли архивация быстрее gzip в линуксе. drBatty сказал, проц нагружается мало, при расчете производительности архивирования (в моем случае) тормозит систему винт, а не проц.

Да, но нужно учитывать что у тебя проц уже не слабо нагружен. В общем ещё не известно где узкое место.
Что-бы разгрузить хард можно избавиться от записи сжатого файла на диск. Например сразу писать его на удалённый хост.

azsx писал(а):
24.11.2011 11:09
даже не знаю на е8400 включать виртуализацию?

Почему нет? Это сильно снизит нагрузку на CPU/производительность виртуальных машин. К тому-же для систем в виртуалках это, кажется, совершенно прозрачно.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: архивирование большого кол-ва файлов

Сообщение drBatty »

azsx писал(а):
24.11.2011 08:40
то есть ничего быстрее gzip придумать под линукс нельзя правильно?

под венду - тоже. Вообще, LZ77/LZ78 это насколько я знаю самый быстрый алгоритм (реализация в ZIP & gzip).
Быстрее него только совсем уж тупое сжатие RLE, и ещё немного быстрее сжатие по повторам нулевого байта. Второе реализовано в команде cp (man cp и далее по ссылкам). Вот только вам, с вашими текстами, это НЕ подходит. Просто сжатия никакого не будет.
azsx писал(а):
24.11.2011 11:09
Надо было спросить, есть ли архивация быстрее gzip в линуксе.

для вашего случая - нет. Мало того, часто сжатие БЫСТРЕЕ, чем простое архивирование (и уж тем более чем копирование).
но конечно нужно проверять в конкретном случае...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: архивирование большого кол-ва файлов

Сообщение watashiwa_daredeska »

drBatty писал(а):
24.11.2011 15:14
Мало того, часто сжатие БЫСТРЕЕ, чем простое архивирование
Как обычно, надо искать узкое место. В данном случае, насколько я понимаю, узкое место — нехватка процессора. При замеренном сжатии в 5.5 раз если сеть нагружена не более, чем на 100/5.5≈18%, то передача несжатых данных может дать прирост.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21477
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Решено: архивирование большого кол-ва файлов

Сообщение Bizdelnick »

azsx писал(а):
24.11.2011 11:09
есть ли архивация быстрее gzip в линуксе

pigz?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено: архивирование большого кол-ва файлов

Сообщение azsx »

благодаря слову pigz нашел сравнение, которое мне интересно...
Обсуждение архиваторов
насколько я понимаю, узкое место — нехватка процессора. При замеренном сжатии в 5.5 раз если сеть нагружена не более, чем на 100/5.5≈18%, то передача несжатых данных может дать прирост.

я конечно не знаю почему, но мне кажется, что у меня скорее тормозит винт, а не проц. Хотя доказать я этого не могу.
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Решено: архивирование большого кол-ва файлов

Сообщение DaemonTux »

Почему бы не посмотреть показатели i/o
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: архивирование большого кол-ва файлов

Сообщение drBatty »

watashiwa_darede... писал(а):
24.11.2011 15:25
Как обычно, надо искать узкое место. В данном случае, насколько я понимаю, узкое место — нехватка процессора.

а я думаю, что без сжатия tar жрёт 0.5% CPU, а со сжатием будет жрать 1%. Что никак не скажется на его производительности. Вопрос не в том, где узкое место, а в том, хватает его или нет. ИМХО в случае ТС - хватает, и скорость упирается в чтение и запись. Т.к. это конкурирующие и не распараллелимые процессы, то ускорение одного из них прибавит скорость. ТС пишет, что его файлы хорошо жмутся.
azsx писал(а):
24.11.2011 11:09
сжатие в 5,5 раз

т.е. скорость записи возрастёт в 5.5 раз. И если скорость записи и скорость чтения грубо принять одинаковой, то общая скорость дисковых операций возрастёт в 2/(1+0.2) = 1.(6) раз. Ну а само сжатие выполняется параллельно с чтением/записью, и, ИМХО CPU успеет всё обсчитать.

Для ТС - просто попробуйте. tar -c vs tar -cz
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: архивирование большого кол-ва файлов

Сообщение watashiwa_daredeska »

drBatty писал(а):
25.11.2011 14:31
т.е. скорость записи возрастёт в 5.5 раз
А там что, еще и локальная запись? Насколько я понял, архив льется по сети на другую машину, и тормозит совсем не та другая, а эта, на которой происходит чтение и сжатие, но не запись.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено: архивирование большого кол-ва файлов

Сообщение azsx »

Для ТС - просто попробуйте. tar -c vs tar -cz

обязательно попробую. Я тама чуть чуть ошибся, теперь удаляю 850 тысяч пустых файлов. Потом освобожусь - попробую разные параметры архивации, правда зачем мне архивация без сжатия?
А там что, еще и локальная запись? Насколько я понял, архив льется по сети на другую машину, и тормозит совсем не та другая, а эта, на которой происходит чтение и сжатие, но не запись.

На локальной машине сперва создаю архив, а потом копирую его на другой комп.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: архивирование большого кол-ва файлов

Сообщение watashiwa_daredeska »

azsx писал(а):
25.11.2011 18:12
На локальной машине сперва создаю архив, а потом копирую его на другой комп.
А зачем? Особенно, если есть подозрение в нагруженности дисковой подсистемы?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: архивирование большого кол-ва файлов

Сообщение drBatty »

watashiwa_darede... писал(а):
25.11.2011 20:30
А зачем? Особенно, если есть подозрение в нагруженности дисковой подсистемы?

ну видимо раньше это было удобно и надёжно - иметь локальную копию бекапа. Сейчас стало не удобно, файлов больше.
azsx писал(а):
25.11.2011 18:12
зачем мне архивация без сжатия?

потому-что создавать файлы - тоже время отнимает. И довольно много, если в одном каталоге много файлов. Намного быстрее создать один файл.
И да, передать 850000 файлов тоже намного дольше, чем один тарбол.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: Решено: архивирование большого кол-ва файлов

Сообщение Jonnywalker »

Попробуйте rdiff-backup.
Он использует для передачи данных библиотеки rsync и ssh.
Бэкап инкрементный. В точке назначения вы всегда имеете актуальное состояние исходной папки и всю историю изменений, позволяющую восстновить более ранние состояния (не забывайте своевременно выносить старые инкременты).
Спасибо сказали: