我创建了一个简单的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?
问候。
答案 0 :(得分:0)
这是因为--link-dest
指定了rsync应查找相同文件的目录。
您永远不会向其中写入文件,因此它不包含要链接的相同文件。因此,rsync
不会链接,导致文件名具有不同的inode。
答案 1 :(得分:0)
在我的情况下,src目录中的文件与d0相同。 如果我使用--link-dest d0从src到d1,我会期望在d1中我将拥有与d0相同的inode,因为没有任何改变。
如果查看文件b.txt,您会看到当没有变化(3.和4.迭代)时,inode 399359是相同的。 我只是徘徊为什么sambe行为不是a.txt。
据我了解rsync,如果源目录中的文件在--link-dest目录中相同,只需在目标目录中添加硬链接即可。 如果文件已更改,则发送增量数据并创建新的inode。
问候。
答案 2 :(得分:0)
rsync(1) - Linux手册页
选项
- link-dest = DIR
...
此选项在复制到空目的地时效果最佳 层次结构,因为rsync将现有文件视为最终文件(因此永远不会 已经在目标文件中查找link-dest dirs 存在强>)...
在最近两次运行中,a.txt
已存在于目标目录中。