我们的备份有点问题。我们的设置如下:
- 我们使用命令创建备份
rsync
。 - 备份使用选项选项
--link-dest
,为所有未更改的文件创建带有指向旧备份的硬链接的增量备份。
一切看起来都很好,到目前为止我们检查过的每个文件自上次备份以来都没有发生变化,并且都正确地硬链接(与旧备份中的文件的 inode 编号相同)。
然而,最近两周备份服务器上的存储需求大幅增加。我们怀疑要么是我们的备份过程出了问题,要么是用户在普通服务器上添加(和/或更改)了大量文件。
我们要检查自上次备份以来发生变化的文件(部分);这意味着检查同一目录结构中具有不同 inode(无硬链接)的所有文件。
如何找到这些文件?
(Ubuntu 12.04 LTS)
答案1
我一下子想到了两种方法:
使用
find
并限制链接数量find -type f -links 1
上述命令将查找所有 inode 仅由单个链接指向的文件。这意味着指向相同 inode 的任何文件都不会被打印。
列出所有 inode 并仅显示唯一的 inode
ls -1i | awk '{print $1}' | sort | uniq -u
请注意,以上内容不会打印文件名,只会打印 inode。这是因为 i) 我们需要对 inode 进行排序/唯一化;ii) 文件名可能包含奇怪的字符(例如换行符),这会破坏排序/唯一化。如果您确信文件名是合理的,则可以使用此方法打印文件名:
ls -1i | awk '{c[$1]++;l[$1]=$0;} END{for(i in c){if(c[i]==1){print l[i]}}}'