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

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

携帯電話のSamba共有を使用して、携帯電話のすべてのコンテンツをホームサーバーに同期したいと思います。

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

私が直面した最初の問題は、2つのフォルダ(携帯電話とサーバー)が「貢献」関係を持つことを望んだことです。つまり、新しいファイルと更新されたファイルが電話機からサーバーにコピーされます。電話機の名前変更がサーバー上で繰り返されます。削除されない(携帯電話からファイルを削除してもサーバーに残ります)この目標をどのように達成できますか? rsyncを使用しますか?

2番目の質問は:10分ごとにSamba共有をマウントするよりも、電話が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

関連情報