我创建了一个简单的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
已经存在于目标目录中。