Я немного знаком с тем, как использовать флаг tar --listed-incremental для создания инкрементных резервных копий. Конечным результатом является файл backup-0 который имеет первую полную резервную копию, а затем backup-1 , backup-2 , ..., backup-x с изменениями в порядке резервного копирования.
В прошлом я использовал rsync и hard-links для создания резервных копий, где backup-0 - это текущее состояние, а в каждой папке backup-x есть файлы, относящиеся к этой резервной копии. В основном то, что описано http://www.mikerubel.org/computers/rsync_snapshots/ и http://www.admin-magazine.com/Articles/Using-rsync-for-Backups/(offset).
Я хочу имитировать эту функциональность с помощью tar. Я не могу использовать жесткие ссылки, потому что файлы tar будут в конечном итоге загружены в облачный провайдер, который не поддерживает / не понимает ссылки, а что нет. Я также хочу сохранить резервные копии, потому что я могу также зашифровать их, прежде чем они будут загружены в облако.
Таким образом, идея состоит в том, чтобы иметь растущий список файлов примерно так:
backup-0.tar.bz2- это текущая резервная копия и будет самой большой, потому что это полная резервная копияbackup-1.tar.bz2- это вчерашняя резервная копия, но в ней будут только те файлы, которые отличаются от текущих (backup-0.tar.bz2)backup-2.tar.bz2- это резервная копия, созданная два дня назад, но в ней будут только те файлы, которые отличаются от вчерашних (backup-1.tar.bz2)backup-3.tar.bz2- ...backup-4.tar.bz2- ...backup-5.tar.bz2- ...
Если это не имеет смысла, надеюсь, это будет.
Первый раз:
$ touch /tmp/file1$ touch /tmp/file2- сделать
backup-0.tar.bz2
На этом этапе backup-0.tar.bz2 имеет /tmp/file1 и /tmp/file2 .
Второй раз:
$ touch /tmp/file3$ rm /tmp/file2- .. сделать магию
С этой точки зрения:
backup-0.tar.bz2есть/tmp/file1и/tmp/file3backup-1.tar.bz2имеет/tmp/file2; у него нетfile1потому что он не изменился, поэтому он находится вbackup-0.tar.bz2
Третий раз:
$ touch /tmp/file1$ touch /tmp/file4- .. сделать магию
С этой точки зрения:
backup-0.tar.bz2есть/tmp/file1,/tmp/file3и/tmp/file4backup-1.tar.bz2есть файл/tmp/file1поскольку он был изменен.backup-2.tar.bz2есть/tmp/file2
Вот так:
| | first time | second time | third time |
|-------|------------|-------------|-------------------------|
| file1 | backup-0 | backup-0 | backup-0 and backup-1 |
| file2 | backup-0 | backup-1 | backup-2 |
| file3 | | backup-0 | backup-0 |
| file4 | | | backup-0 |
Я подумал, что это один из способов подойти к этому, но мне это кажется ужасно неэффективным. Может быть, есть функции / флаги, которые я могу использовать, чтобы сделать это более эффективным.
- первый раз =
backup-0 - второй раз
- переименовать
backup-0вbackup-1 - взять
backup-0 - удалить из
backup-1что соответствуетbackup-0
- переименовать
- третий раз
- переименовать
backup-1вbackup-2 - переименовать
backup-0вbackup-1 - взять
backup-0 - удалить из
backup-1что соответствуетbackup-0
- переименовать
- четвертый раз
- переименовать
backup-2вbackup-3 - переименовать
backup-1вbackup-2 - переименовать
backup-0вbackup-1 - взять
backup-0 - удалить из
backup-1что соответствуетbackup-0
- переименовать
Я чувствую, что это последний шаг (удалить из backup-1 что соответствует backup-0), который неэффективен.
У меня вопрос, как я могу это сделать? Если я использую tar --listed-incremental это будет делать то, что я пытаюсь сделать.
