휴대폰의 삼바 공유를 사용하여 휴대폰의 모든 콘텐츠를 홈 서버로 동기화하고 싶습니다.
내 접근 방식은 전화기의 삼바 공유를 마운트하는 스크립트를 작성한 다음 전화기의 모든 파일을 지정된 디렉터리에 복사하는 것입니다. 그런 다음 crontab을 사용하여 10분마다 스크립트를 실행합니다.
내가 직면한 첫 번째 문제는 두 개의 폴더(휴대폰과 서버)가 "기여" 관계를 갖기를 원했다는 것입니다. 즉, 새 파일과 업데이트된 파일이 전화기에서 서버로 복사됩니다. 전화기의 이름 변경이 서버에서 반복됩니다. 삭제되지 않음(휴대폰에서 파일을 삭제해도 서버에 남아 있음) 이 목표를 어떻게 달성할 수 있나요? rsync를 사용할까요?
두 번째 질문은: 10분마다 삼바 공유를 마운트하는 것보다 전화기가 Wi-Fi 네트워크에 연결되어 있는지 확인하는 더 좋은 방법이 있습니까?
답변1
예, rsync가 가능합니다. 하지만 추가 조치를 취하지 않으면 이름을 바꾸면 중복이 발생합니다.
전송된 파일 목록을 만든 다음 동일한 크기와 내용의 기존 파일이 있는지 확인하는 등의 작업을 수행할 수 있습니다.
2부: rsync를 시작하기 전에 ping 확인을 수행해야 합니다. 아니면 rsync에서 더 작은 연결 시간 초과 값을 사용하세요.
어쩌면 이 오래된 대답은rsync와 비교그것은 또한 당신에게 도움이 될 수 있습니다.
답변2
이 문제를 해결하기 위해 스크립트를 작성했습니다. 일부 내용은 이탈리아어로 되어 있지만 스크립트가 어떻게 작동하는지 쉽게 이해할 수 있을 것 같습니다. 어쨌든 모든 것을 쉽게 번역할 수 있습니다.
이 스크립트는 주로 BlackBerry가 네트워크에 연결되어 있는지 확인합니다. 그렇다면 더미 파일이 있는지 확인하고, 그렇다면 스크립트의 다른 인스턴스가 이미 실행 중이라는 의미이므로 종료됩니다. 실행 중인 다른 인스턴스가 없으면 스크립트가 마지막으로 실행된 시간을 확인합니다(따라서 10분마다 Blackberry를 백업하지 마십시오). 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