分页: 1 / 1

[讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-18 18:03
zgalvin
用tar做增量备份很方便。
但是对于已经删除的文件,增量备份不会记录。只记录新增的和修改的文件。

可不可以用

代码: 全选

find $Source -print > index.txt 
每次做增量备份的时候顺便导出最新的文件列表到index.txt

需要恢复的时候先请空$Source目录

代码: 全选

tar -xvpzf backup.tar.gz $Source -PT index.txt
tar -xvpzf backup-1.tar.gz $Source -PT index.txt 
tar -xvpzf backup-2.tar.gz $Source -PT index.txt
这样来剔除最初备份的时候存在,但是后来删除了文件。


或者有没有其他的备份方法可以满足:
1 增量/差异备份(记录增加,修改,删除
2 压缩
3 可以选择在备份的时候要忽略的目录

新手还望大家多多指教


楼下说没看明白,我再说详细点--关于增量备份
比如我有一个backup目录要备份
里面有a b c三个文件。
首先 我用

代码: 全选

tar -g snapshot -cvpzf backup.tar.gz backup
做一个完全备份,backup.tar.gz 里面包含a b c
然后我新建一个文件 d ,修改文件 c ,删除文件b
这时候我的目录下有 a c d三个文件。
再做一个增量备份

代码: 全选

tar -g snapshot -cvpzf backup-1.tar.gz backup
这时候backup-1.tar.gz里面就会有文件 c d 的备份。

假如我现在不小心丢失了backup目录,恢复的时候按顺序解压缩每个备份包,就可以还原。
但是还原后目录里面有 a b c d这4个文件,其中 b 早就已经被我删掉了,不应该出现的。这就是tar做增量备份的一个缺陷。
[/color]

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-18 18:19
eexpress
● type t.u
t.u 是 `tar uPvf ' 的别名

我只会这个。
没明白你做增量的具体含义。你可以试试git做备份。

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-18 23:00
lilydjwg
eexpress 写了:● type t.u
t.u 是 `tar uPvf ' 的别名

我只会这个。
没明白你做增量的具体含义。你可以试试git做备份。
git 做备份连 7z 都不如,系统备份的话是绝对绝对要保留权限信息的。

要记录删除的文件很简单,把现在的文件列表和之前的文件列表对比下就可以了。所以需要在每个 tar 里保留文件列表。另外,squasfs 应该会比 tar 备份好用。

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-18 23:05
eexpress
我没看出他这是系统备份。你咋看出来的?

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-18 23:27
photor
:em09

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-28 16:13
dukelec
一直糾結於離綫數據備份。。。 樓主的方法生成的 index.txt 太大,最好還是想辦法只記錄已刪除文件的列表。

在想是否可用 inotify 監控文件改變,然後分別輸出記錄到不同的列表,最好用三個:新建、修改、刪除,最後再用腳本打包處理等。

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-02-28 16:57
dukelec
又試了試,發現 tar 自身是可以同步刪除的文件的,只要解壓包的時候也帶上 -g 參數即可,指定的是生成此 tar 包後的列表文件。

如果要雙向同步的話,需要在各自都生成相應的 list 文件,解包同步的時候指定對方的 list 文件,同步後再更新本地 list 文件。

現在的問題是每次更新 list 文件的時候都會生成一個 tar 包,而此 tar 包是無用的,我不想讓它生成,不知道可不可以,當然輸出重定向到 /dev/null 也是可以的,但畢竟會慢一些。

Re: [讨论] tar增量备份 记录已删除文件的方法

发表于 : 2012-05-04 18:58
millenniumdark
dukelec 写了:又試了試,發現 tar 自身是可以同步刪除的文件的,只要解壓包的時候也帶上 -g 參數即可,指定的是生成此 tar 包後的列表文件。

如果要雙向同步的話,需要在各自都生成相應的 list 文件,解包同步的時候指定對方的 list 文件,同步後再更新本地 list 文件。

現在的問題是每次更新 list 文件的時候都會生成一個 tar 包,而此 tar 包是無用的,我不想讓它生成,不知道可不可以,當然輸出重定向到 /dev/null 也是可以的,但畢竟會慢一些。
info tar裏有寫的,解壓恢復時 -g /dev/null 就可以。