昨天重新看了zimbra的备份,发现源已经降到200G了,但同步后的目标目录还有300G,百思不得其解。用du看目录大小,也遭遇了很奇怪的现象,来看下面的命令
# 下面的命令得出的大小是700M
du -sh 106
# 下面的命令会先后(注意这个先后)匹配出100、106、108,得出106是300M
du -sh 10*
按照惯例,如此奇葩的问题,当然要抛出来给大家看看,同事的处理过程
# 当我们调整下目录的顺序
# 得出的大小和上面单独检查106的大小是一样的
du -sh 106 100 108
strace跟踪,发现有SYMLINK字样,0代表是具有相同链接的文件只统计一次,这里也解释了为什么把目录的顺序调整下,大小就不一样,因为前面统计了,后面的就不统计
AT_SYMLINK_NOFOLLOW
newfstatat(6, "4540-21500.msg", {st_mode=S_IFREG|0640, st_size=2590, ...}, AT_SYMLINK_NOFOLLOW) = 0
首先是软链接
# 可惜没有找到
find . -type l
那么就是硬链接啦,没有什么好办法,只好统计下具有相同inode节点文件个数
ls -liR | awk '{print $1}' | sort | uniq -c | sort -k1r
其实zimbra官方提供的备份脚本,rsync带有HK参数,其中H就是处理硬链接,而我们只用了av,解决办法就是加上HK
rsync -avHK