Здравствуйте. Есть дома сервер, вещает сайты в сеть.
Есть также скрипт бэкапа, самописный, который по крону запускается каждый день ночью.
Файлы он бэкапит, делая tar.gz архив, копируя на другой диск.
Возникает проблема, что если в этот момент в папке, которую tar сжимает, что-то изменится, tar вылетает с ошибкой [tar] файл изменился во время чтения. Разумеется бэкап получается не полный.
Так как вещаются сайты, то там постоянно меняется то кэш, то содержимое папки uploads, в которую фрэймворк загружает картинки, которые выкладывают пользователи, например. Или меняются логи.
Если на логи и кэш можно поставить исключения, то на папку uploads нет, ведь эти файлы - часть контента и они нужны. А иметь вероятность не полного бэкапа - не радует.
И вот как быть и что делать?
Посоветуйте, пожалуйста.
1. rsync -qWaup /path/to/side_dir /backup/ #верный вариант если есть место для полного дубля
tar -cjf backup_site`date +%y%m%d`.tar.bz2 /backup/site_dir
2. lvm snapshot 8) при условии что используется lvm
Как то так делается то, что вы сейчас хотите. Но лучше посмотреть в сторону создания человеческой копии с диффами через какой-нибудь rdiff-backup или rsnapshot
Список исключений добавьте в файл и тару говорите что исключить нуэно из файла.
Так же для rsync, можно настроить csync между серверами, тогда синхранизироватся будут практически на лету.
Что за ОС? В линуксе tar себя так не ведёт, только что проверил, fedora 18, ext4. Цитата из info tar, 3.9 Controlling Warning Messages:
<blockquote>
Sometimes, while performing the requested task, GNU `tar' notices some
conditions that are not exactly errors, but which the user should be
aware of. When this happens, `tar' issues a "warning message"
describing the condition. Warning messages are output to the standard
error and they do not affect the exit code of `tar' command.
...
file-changed
`%s: file changed as we read it'
...
</blockquote>