![如何将 rsync 与 samba 共享结合使用](https://linux22.com/image/60794/%E5%A6%82%E4%BD%95%E5%B0%86%20rsync%20%E4%B8%8E%20samba%20%E5%85%B1%E4%BA%AB%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8.png)
我想使用手机的 samba 共享将手机的所有内容同步到我的家庭服务器。
我的做法是写一个脚本挂载手机的samba共享,然后将手机上的所有文件复制到指定目录。然后使用 crontab 每 10 分钟运行一次脚本。
我面临的第一个问题是我希望两个文件夹(电话和服务器)具有“贡献”关系。这意味着:新的和更新的文件将从手机复制到服务器。手机上的重命名会在服务器上重复。不删除(如果文件在手机上删除,它仍保留在服务器上)。我怎样才能实现这个目标?也许用rsync?
第二个问题是:有没有比尝试每 10 分钟挂载一次 samba 共享来查明手机是否连接到 wifi 网络更好的方法?
答案1
是的,rsync 就可以了。但如果您不采取其他步骤,重命名将导致重复。
这些可能是:制作传输文件的列表,然后检查是否存在相同大小和内容的现有文件...
第二部分:在启动 rsync 之前,您应该先进行 ping 检查。或者只是在 rsync 中使用较小的连接超时值。
也许这个旧答案是关于如何与rsync比较也可能对你有帮助。
答案2
我写了一个脚本来解决这个问题。有些内容是意大利语,但我认为您可以轻松理解脚本的工作原理。无论如何,您可以轻松翻译所有内容。
该脚本主要检查黑莓是否连接到网络。如果是,它检查虚拟文件是否存在,如果存在,则意味着脚本的另一个实例已经在运行,因此它退出。如果没有其他实例正在运行,它会检查上次运行脚本的时间(因此不要每 10 分钟备份一次黑莓)。如果 dummy.file.time 早于 3 小时(10800 秒),它将使用 rsync 启动备份。
#!/bin/sh
# BlackBerry backup via SMB share
#
# Cosa fa lo script?
#
# Lo script fa il ping del blackberry
# Se il ping va a buon fine, controlla se esiste "$dummyfile"
# (per non eseguire più backup in parallelo).
# Se esiste "$dummyfile", controlla se "$dummyfiletime" è più
# vecchio di due ore (per non ripetere il backup in continuazione).
# Se "$dummyfiletime" è più vecchio di due ore, monta lo SMB share
# del blackberry e inizia il backup con rsync.
#
##### PARAMETERS START #####
logdate=$(date +"%m-%Y")
ip="192.168.1.5"
dummyfile="/media/truecrypt2/blackberry SMB Backup/dummy.file"
dummyfiletime="/media/truecrypt2/blackberry SMB Backup/dummy.file.time"
monta="mount -t cifs -o username=USER,password=PASSWORD //$ip/media/ /media/blackberrySMB/"
sincronizza="rsync -a /media/blackberrySMB /media/truecrypt2/blackberry\ SMB\ Backup"
scriptlog="/var/log/blackberrySMBbackup/script_$logdate.log"
rsynclog="/var/log/blackberrySMBbackup/rsync_$logdate.log"
dummyfiletimeage=$(( `date +%s` - `stat -L --format %Y "$dummyfiletime"` )) #age of the dummy.file.time
defaultage="10800" #in seconds
###### PARAMETERS END ######
echo "$(date +"%D %T") : BlackBerry SMB backup lanciato." >>$scriptlog
echo "Effettuo ping verso $ip" >>$scriptlog
if fping -c 1 -t 500 $ip >>/dev/null
then
echo "Risposta al ping ricevuta da $ip" >>$scriptlog
if [ -f "$dummyfile" ]
then
echo -e "dummy.file esistente. Forse il processo e gia in esecuzione. Esco.\n" >>$scriptlog
exit
else
echo "dummy.file non esistente. Controllo se dummy.file.time e piu vecchio di 3 ore." >>$scriptlog
if [ "$dummyfiletimeage" -gt "$defaultage" ]
then
echo "dummy.file.time e piu vecchio di 3 ore. Inizio il backup." >>$scriptlog
touch "$dummyfile"
rm "$dummyfiletime"
touch "$dummyfiletime"
umount //$ip/media/
umount //$ip/media/
$monta
echo "$(date +"%D %T") : BlackBerry SMB rsync lanciato." >>$rsynclog
rsync --verbose -a /media/blackberrySMB /media/truecrypt2/blackberry\ SMB\ Backup >>$rsynclog
echo "***************************" >>$rsynclog
umount //192.168.1.5/media/
rm "$dummyfile"
echo -e "Backup completato. Esco.\n" >>$scriptlog
exit
else
echo -e "dummy.file.time e piu recente di 3 ore. Esco.\n" >>$scriptlog
exit
fi
fi
else
echo -e "Nessuna risposta al ping da $ip. Blackberry non connesso. Esco.\n" >>$scriptlog
exit
fi