web-dev-qa-db-ja.com

samba共有でrsyncを使用する方法

電話のsamba共有を使用して、電話のすべてのコンテンツをホームサーバーに同期させたい。

私のアプローチは、電話のsamba共有をマウントするスクリプトを記述してから、電話上のすべてのファイルを指定されたディレクトリにコピーすることです。次に、スクリプトはcrontabを使用して10分ごとに実行されます。

私が直面している最初の問題は、2つのフォルダー(電話とサーバー)に「貢献」関係を持たせたいということです。これは、次のことを意味します。新しいファイルと更新されたファイルが電話からサーバーにコピーされます。電話での名前の変更はサーバーで繰り返されます。削除なし(電話でファイルが削除された場合、そのファイルはサーバーに残ります)。どうすればこれを達成できますか?たぶんrsyncで?

2番目の問題は次のとおりです。電話がwifiネットワークに接続されているかどうかを確認するために、10分ごとにsamba共有をマウントしようとするよりも良いアプローチはありますか?

2
giovi321

これを解決するためのスクリプトを作成しました。イタリア語のものもありますが、スクリプトがどのように機能するかは簡単に理解できると思います。とにかく、あなたは簡単にすべてを翻訳することができます。

スクリプトは基本的に、ブラックベリーがネットワークに接続されているかどうかを確認します。はいの場合、ダミーファイルが存在するかどうかを確認します。存在する場合は、スクリプトの別のインスタンスがすでに実行されているため、終了します。他のインスタンスが実行されていない場合は、スクリプトが最後に実行されたのはいつかをチェックします(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
0
giovi321

はい、rsyncで十分です。ただし、追加の手順を実行しないと、名前の変更によって重複が発生します。

転送されたファイルのリストを作成し、同じサイズと内容の既存のファイルがあるかどうかを確認します。

パート2:rsyncを開始する前に、まずpingチェックを行う必要があります。または、rsyncで小さな接続タイムアウト値を使用します。

おそらく、どのように rsyncと比較 するかという質問についてのこの古い答えもあなたを助けるかもしれません。

0
Nils