Всем Привет!Подскажите как грамотнее сделать такой скрипт:
Есть папка /Data, в ней папки с данными юзеров
/Data/user1,
/Data/user2,
/Data/user3
итдХочу сделать так, чтобы был один архив
Data.tar.gz и в нем архивы:
/user1.tar.gz
/user2.tar.gz
/user3.tar.gzто есть получается архив архивов
Не имея ответа на вопрос, хочу узнать причину, зачем вам это нужно? очень любопытно!
> Не имея ответа на вопрос, хочу узнать причину, зачем вам это нужно?
> очень любопытно!Для бэкапа, идея построения такого типа архива, возникла из-за большого объема данных, очень много мелких файлов в папках юзеров, в основном это письма.
Все папки в сумме имеют размер ~250 gb
> Для бэкапа, идея построения такого типа архива, возникла из-за большого объема данных,
> очень много мелких файлов в папках юзеров, в основном это письма.Бэкап делают совсем не так. Подумай вот над какими задачами
1. в приличных заведениях бэкап делают каждый день
2. бэкап предполагает восстановление
3. иногда всего одного файла
4. иногда за позапрошлый год
5. иногда неизвестно, за какой день, так что нужны все известные версииПоставь нормальный софт для бэкапа, настрой и проверь результаты.
>> Не имея ответа на вопрос, хочу узнать причину, зачем вам это нужно?
>> очень любопытно!
> Для бэкапа, идея построения такого типа архива, возникла из-за большого объема данных,
> очень много мелких файлов в папках юзеров, в основном это письма.
> Все папки в сумме имеют размер ~250 gbИ сколько резервных копий вы планируете хранить, сколько за какой период?
Вероятно, подсказка: бывает например такая схема:
7 ежедневных за последнюю неделю
4 недельных за последний месяц
12 помесячных за последний год~25 штук по 250Гб = 6.5Тб, ну пусть сархивируем немного....
>[оверквотинг удален]
> итд
>
Какая коварная коварность.. Вы хотите сжать данные юзеров дважды..чтоб им было больнее...
скрипт на шелле Вам поможет. сперва в цикле проходите по каталогам сжимая их.. потом сжимаете то что получилось...
>[оверквотинг удален]
>> Data.tar.gz и в нем архивы:
>>
>> /user1.tar.gz
>> /user2.tar.gz
>> /user3.tar.gz
>>
>> то есть получается архив архивов
> Какая коварная коварность.. Вы хотите сжать данные юзеров дважды..чтоб им было больнее...
> скрипт на шелле Вам поможет. сперва в цикле проходите по каталогам сжимая
> их.. потом сжимаете то что получилось...Это для бэкапов, никакой боли для юзеров))
>[оверквотинг удален]
>>>
>>> /user1.tar.gz
>>> /user2.tar.gz
>>> /user3.tar.gz
>>>
>>> то есть получается архив архивов
>> Какая коварная коварность.. Вы хотите сжать данные юзеров дважды..чтоб им было больнее...
>> скрипт на шелле Вам поможет. сперва в цикле проходите по каталогам сжимая
>> их.. потом сжимаете то что получилось...
> Это для бэкапов, никакой боли для юзеров))Сначала tar-ить всех оптом, потом gzip-ить не подойдет? Чего-ж gzip на gzip накладывать.
Если есть свободные мощности и средства - пустите их на благотворительность или на майнинг биткойнов.
> Сначала tar-ить всех оптом, потом gzip-ить не подойдет? Чего-ж gzip на gzip
> накладывать.
> Если есть свободные мощности и средства - пустите их на благотворительность или
> на майнинг биткойнов.тогда уж сначала зипить, потом тарить. по крайней мере профит по объему I/O.
а еще лучше потом сверху закриптить и пасс прое....терять.
Все проблемы от технической безграмотности. Она в том числе мешает правильно задать вопрос.Вы уже делаете полный бэкап данных юзеров и вам требуется иметь возможность без проблем отдать каждому юзеру его папку в виде архива. Угадал?
При этом вы похоже не знаете, что тар умеет распаковывать только нужные вам файлы, а не все сразу.
Решение 1:
У вас уже есть архив, в котором лежат папки с данными юзеров.
Когда вам надо отдать архив с данными юзеру user1, вы делаете следующую вещь
tar -xzf all.tar.gz /Data/user1 | tar -czf user1.tar.gz
Это долго, но терпимо, если редко надо.
Решение 2:
Вы делаете бэкап каждого юзера в отдельный файл и не имеете общего архива вообще.
find /home -type d -maxdepth 0 | grep user | xargs -l -I{} tar -czf /backups/{}.tar.gz -C /home {}
Для восстановления всех юзеров будет достаточно сделать
for f in /backups/*.tar.gz ; do tar -xf "$f" -C /home ; done
PS команды не проверял