rsync inode差异当没有任何更改时



我创建了一个简单的bash脚本,该脚本创建了我rsync的三个目录,然后检查目的地。

脚本在这里:

#!/bin/bash
function dorsync()
{
RSYDIR=$DST/$1
#rm -r $RSYDIR
echo "rsync -azP --delete --delete-excluded --link-dest=$LNKDSTDIR $SRC/ $RSYDIR" >> $LOG
rsync -azP --delete --delete-excluded --link-dest=$LNKDSTDIR $SRC/ $RSYDIR
rm -f ${LNKDSTDIR}
ln -sf ${RSYDIR} ${LNKDSTDIR}
echo "-----" >> $LOG
ls -li $DST/$1 >> $LOG
echo "-----" >> $LOG
cat $DST/$1/a.txt >> $LOG 
cat $DST/$1/b.txt >> $LOG
#du $DST >> $LOG 
echo "===================================================================" >> $LOG
}
SRC=~/tmp/src
DST=~/tmp/dst
LOG=~/tmp/log.txt
LNKDSTDIR=${DST}/Current
echo "SRC=$SRC"
echo "DST=$DST"
echo "LOG=$LOG"
echo "LNKDSTDIR=$LNKDSTDIR"

rm -R "$SRC"
rm -R "$DST"
rm $LOG
mkdir $SRC
mkdir $DST
echo "echo 'A0' > $SRC/a.txt" >> $LOG
echo "A0" > $SRC/a.txt
dorsync d0

echo "***********************************************************" >> $LOG
echo "echo 'A1' > $SRC/a.txt" >> $LOG
echo "A1" >> $SRC/a.txt
dorsync d1

echo "***********************************************************" >> $LOG
echo "echo 'B0' > $SRC/b.txt" >> $LOG
echo "B0" > $SRC/b.txt
dorsync d2

echo "***********************************************************" >> $LOG
echo "echo 'A2' > $SRC/a.txt" >> $LOG
echo "A2" >> $SRC/a.txt
dorsync d0

echo "***********************************************************" >> $LOG
echo "no change" >> $LOG
dorsync d1
echo "***********************************************************" >> $LOG
echo "no change" >> $LOG
dorsync d2

脚本的结果如下:

echo 'A0' > /home/pi/tmp/src/a.txt
rsync -azP --delete --delete-excluded --link-dest=/home/pi/tmp/dst/Current /home/pi/tmp/src/ /home/pi/tmp/dst/d0
-----
total 4
399342 -rw-r--r-- 1 pi pi 3 Jan 22 22:15 a.txt
-----
A0
===================================================================
***********************************************************
echo 'A1' > /home/pi/tmp/src/a.txt
rsync -azP --delete --delete-excluded --link-dest=/home/pi/tmp/dst/Current /home/pi/tmp/src/ /home/pi/tmp/dst/d1
-----
total 4
399356 -rw-r--r-- 1 pi pi 6 Jan 22 22:15 a.txt
-----
A0
A1
===================================================================
***********************************************************
echo 'B0' > /home/pi/tmp/src/b.txt
rsync -azP --delete --delete-excluded --link-dest=/home/pi/tmp/dst/Current /home/pi/tmp/src/ /home/pi/tmp/dst/d2
-----
total 8
399356 -rw-r--r-- 2 pi pi 6 Jan 22 22:15 a.txt
399359 -rw-r--r-- 1 pi pi 3 Jan 22 22:15 b.txt
-----
A0
A1
B0
===================================================================
***********************************************************
echo 'A2' > /home/pi/tmp/src/a.txt
rsync -azP --delete --delete-excluded --link-dest=/home/pi/tmp/dst/Current /home/pi/tmp/src/ /home/pi/tmp/dst/d0
-----
total 8
399360 -rw-r--r-- 1 pi pi 9 Jan 22 22:15 a.txt
399359 -rw-r--r-- 2 pi pi 3 Jan 22 22:15 b.txt
-----
A0
A1
A2
B0
===================================================================
***********************************************************
no change
rsync -azP --delete --delete-excluded --link-dest=/home/pi/tmp/dst/Current /home/pi/tmp/src/ /home/pi/tmp/dst/d1
-----
total 8
399347 -rw-r--r-- 1 pi pi 9 Jan 22 22:15 a.txt
399359 -rw-r--r-- 3 pi pi 3 Jan 22 22:15 b.txt
-----
A0
A1
A2
B0
===================================================================
***********************************************************
no change
rsync -azP --delete --delete-excluded --link-dest=/home/pi/tmp/dst/Current /home/pi/tmp/src/ /home/pi/tmp/dst/d2
-----
total 8
399361 -rw-r--r-- 1 pi pi 9 Jan 22 22:15 a.txt
399359 -rw-r--r-- 3 pi pi 3 Jan 22 22:15 b.txt
-----
A0
A1
A2
B0
===================================================================

我的问题是,为什么在最后两次运行inode中,不是399360而不是399347和399361?

问候。

这是因为 --link-dest指定了一个目录,其中rsync应该在其中查找相同的文件。

您永远不会写文件,因此它不包含相同的文件要链接。因此, rsync不链接,导致文件名具有不同的inodes。

在我的情况下,src目录中的文件在d0中是相同的。如果我通过使用 - link-dest D0从SRC到D1,我希望在D1中,我的Inode与D0相同,因为什么都没有改变。

如果您查看文件b.txt,您会发现当没有更改(3.和4.迭代)时,Inode 399359是相同的。我只是徘徊为什么SAMBE行为不与A.TXT一起进行。

我了解rsync,如果来自源代码的文件在-link-dest dir中相同,只需在目标目录中添加硬链接即可。如果更改了文件,则比发送Delta数据并创建新的Inode。

问候。

rsync(1)-Linux Man Page

选项

- link-dest = dir

...

复制到空目的地时,此选项最有效 层次结构,因为rsync将现有文件视为确定性(SO 当目标文件已经 存在)...

在您的最后两次运行中,a.txt已经存在于目标目录中。

相关内容

  • 没有找到相关文章

最新更新