我已经创建了一个简单的bash脚本,它创建了三个目录,我rsync,然后检查目的地inode。
剧本在这里:

#!/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 for a.txt时不是399360,而是399347和399361?
当做。

最佳答案

这是因为--link-dest指定了rsync应该在其中查找相同文件的目录。
您从不向其写入文件,因此它不包含要链接的相同文件。rsync因此不链接,导致文件名具有不同的索引节点。

关于linux - 什么都没有改变时rsync inode差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21318480/

10-14 16:09