Я немного знаком с тем, как использовать флаг 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/file3
backup-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/file4
backup-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
это будет делать то, что я пытаюсь сделать.