Tomsk Sysadmins Forum
Unix => Администрирование => Topic started by: Vladn on January 23, 2007, 11:13:56
-
Есть задача: сделать backup только новых файлов (например, которые изменились с начала месяца), и размер которых не превышает определенной величины (например, чтобы не архивировать фильмы или дистрибутивы).
С первой задачей справляюсь так: tar --newer-mtime DATE /home/
А как решить вторую задачу?
-
Есть задача: сделать backup только новых файлов (например, которые изменились с начала месяца), и размер которых не превышает определенной величины (например, чтобы не архивировать фильмы или дистрибутивы).
С первой задачей справляюсь так: tar --newer-mtime DATE /home/
А как решить вторую задачу?
наверно, проще tar скомпоновать с find'ом... у последнего масса опций, включая нужные тебе
-
Спасибо. Так, наверное, и сделаю.
А готовых решений нет?
-
Спасибо. Так, наверное, и сделаю.
А готовых решений нет?
Amanda идет с федорой и, возможно, RedHat'ом...
Думаю, стоит там порыть...
Можно поискать на freshmeat.net там есть раздел Backup (через Browse... точно не помню)
-
наверно, проще tar скомпоновать с find'ом... у последнего масса опций, включая нужные тебе
Я нашёл, что с помощью find можно сформировать список файлов определенного размера, но как сформировать список файлов, размер которых больше/меньше заданного, для меня осталось загадкой.
Буду писать perl-скрипт.
-
Я нашёл, что с помощью find можно сформировать список файлов определенного размера, но как сформировать список файлов, размер которых больше/меньше заданного, для меня осталось загадкой.
Внимательнее читаем man!
Примеры, которые работают, ниже.
Файлы больше 10 килобайт:
>find ./ -size +10k -ls
Файлы меньше 10 килобайт:
>find ./ -size -10k -ls
-
Целиком решение твоей задачи выглядит так:
> find /some_dir/ -type f -size -10k -print |xargs tar czvf /tmp/small_files.tgz
т.е. архив всех файлов ниже каталога /some_dir/, размер которых менее 10 килобайт.
-
Спасибо
-
Еще можно fsbackup запользовать... Там много разных фичь и настроек можно забахать...
Можно по ftp бакапы сбрасывать, можно по ssh - есть много настроек по проверки файлов и заданию ограничений по маскам и по размерам... Можно использовать различные настройки при архивировании...
Например, архивировать только определенные папки или все кроме... Можно задать размер томов...
Можно делать либо полные, либо инкрементальные архивы... Самое удобное, что в результате обычные tarы получаются...
-
Еще можно fsbackup запользовать... Там много разных фичь и настроек можно забахать...
Можно по ftp бакапы сбрасывать, можно по ssh - есть много настроек по проверки файлов и заданию ограничений по маскам и по размерам... Можно использовать различные настройки при архивировании...
Например, архивировать только определенные папки или все кроме... Можно задать размер томов...
Можно делать либо полные, либо инкрементальные архивы... Самое удобное, что в результате обычные tarы получаются...
А там внутри, часом, не приведённая выше конструкция?
PS. Чисто из любви к искусству , "уплотнённый" вариант этого решения:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {}+
-
PS. Чисто из любви к искусству , "уплотнённый" вариант этого решения:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {}+
и еще на один символ
find /some_dir/ -type f -size -10k -exec tar czf /tmp/small_files.tgz {}+
-
и еще на один символ
find /some_dir/ -type f -size -10k -exec tar czf /tmp/small_files.tgz {}+
Кстати да, быстрее работать будет - вывод на экран всяческих отчётов жутко тормозит систему из-зи ожидания завершения вывода.
-
PS. Чисто из любви к искусству , "уплотнённый" вариант этого решения:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {}+
Это даже не только из любви к искусству - это более верный способ, т.к. при наличии в именах файлов пробелов и разных спецсимволов, использование find ... | xargs ... приводит к проблемам. Я даже пробовал find /some_dir/ -type f -print0 |xargs -0 tar czvf /tmp/small_files.tgz , но всё равно такой вариант давал сбои (если в папке some_dir очень много файлов, то архивировалась только часть).
Я пробовал на FreeBSD 6.1. В ней обязательно оказалось перед + поставить пробел:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {} +
иначе была ошибка find: -exec: no terminating ";" or "+"
А ещё я столкнулся со следующим ограничением:
при выполнении perl-строчки `tar cfvz $saveto_dir$date\.tgz $file_list `; когда размер переменной $file_list превышает 200-400Кб, то команда не выполняется. Наверно, буфер, в который записывается строчка параметров, ограничен этим значением. И, скорее всего, это ограничение действует при использовании find ... | xargs ...
-
А там внутри, часом, не приведённая выше конструкция?
Очень даже возможно... Хотя там не все так просто... Можно новые файлы по времени доступа определять - можно по md5 и т.д.
Перед созданием всегда создается хеш и это частично ускоряет время создания инкрементальных бекапов... Плюс настройка через файл конфигурации явно удобней...
У меня, например, создано несколько различных бекапов...
Один с самыми важными файлами кидается на DVD-RAM, часть кидается по sftp на другой сервак...
Все это настраивать вручную достаточно муторно...
-
Это даже не только из любви к искусству - это более верный способ, т.к. при наличии в именах файлов пробелов и разных спецсимволов, использование find ... | xargs ... приводит к проблемам. Я даже пробовал find /some_dir/ -type f -print0 |xargs -0 tar czvf /tmp/small_files.tgz , но всё равно такой вариант давал сбои (если в папке some_dir очень много файлов, то архивировалась только часть).
Я пробовал на FreeBSD 6.1. В ней обязательно оказалось перед + поставить пробел:
find /some_dir/ -type f -size -10k -exec tar czvf /tmp/small_files.tgz {} +
иначе была ошибка find: -exec: no terminating ";" or "+"
А ещё я столкнулся со следующим ограничением:
при выполнении perl-строчки `tar cfvz $saveto_dir$date\.tgz $file_list `; когда размер переменной $file_list превышает 200-400Кб, то команда не выполняется. Наверно, буфер, в который записывается строчка параметров, ограничен этим значением. И, скорее всего, это ограничение действует при использовании find ... | xargs ...
Надо просто понимать, как оно всё работает, и писать правильно - тогда проблем не будет.
-
Надо просто понимать, как оно всё работает, и писать правильно - тогда проблем не будет.
Да понимаю я как это правильно работает... Ну или достаточно ман запустить и посмотреть какие ключи юзать... Но времени это все-равно занимает много...
Хотя это не ко мне вроде относилось... Все пора спать...
-
Да понимаю я как это правильно работает... Ну или достаточно ман запустить и посмотреть какие ключи юзать... Но времени это все-равно занимает много...
Хотя это не ко мне вроде относилось... Все пора спать...
Да вот в том посте как-то не наблюдалось понимания того, что xargs запускает программу НЕСКОЛЬКО раз, с учетом ограничения на длину командной строки. Про непонимание работы шелла (в частности, экранирования спецсимволов) и другие мелочи я уж молчу. Мало маны читать по конкретным утилитам, надо еще пониать, как система функционирует.
-
Да вот в том посте как-то не наблюдалось понимания того, что xargs запускает программу НЕСКОЛЬКО раз, с учетом ограничения на длину командной строки. Про непонимание работы шелла (в частности, экранирования спецсимволов) и другие мелочи я уж молчу. Мало маны читать по конкретным утилитам, надо еще пониать, как система функционирует.
Да, есть проблема с длинной командной строки. В это случае можно выкрутиться ешё таким образом:
list=`mktemp`;find ...>$list;tar -cT $list|bzip2 -c9>arhive.tar.bz2;rm $list
Такой финт ушами позволяет обрабатывать списки любой длинны.