web-dev-qa-db-ja.com

USBドライブを接続するだけでrsyncをトリガーしますか?

自動的にマウントし、rsyncを起動してUSBドライブをディレクトリと同期することが可能かどうか知りたいですか?具体的には、ドライブが保持できる限り多くのデータをコピーし、スペースが必要な場合にのみ最も古いファイルを削除したいと思います。スクリプトを使ってこのようなことをすると思いますが、私の問題はどこから始めればよいかということです。コメントや提案をいただければ幸いです。

ありがとうございました

7
Mister IT Guru

おそらく、スクリプトを起動するためにUdevルールを調べたいと思うでしょう。 udevルールの良いところは、バックアップに使用されるUSBドライブをロックダウンできるため、すべてのUSBドライブがそれを起動するわけではないことです。

最初のステップは、udevルールを実行することです。

これは書くことに関する素晴らしいチュートリアルです devルール
そしてここに 別の

次に、スクリプトの側面に進むことができます。最初のリンクは、udevからスクリプトを起動する方法を少しカバーしているので、そこからrsyncを呼び出す必要があります。

man:rsyncには使用法に関する多くの情報があります。

1
Dan M.

これが、マウントされたUSBベースのハードディスクをチェックするバックアップジョブの要点です。他の目的で変更してから、cron経由で呼び出し続けるか、重要な部分の周りにスリープループを設定してバックグラウンドで実行するのは簡単です。このスクリプトを使用すると、USBディスクが見つかる可能性のある場所(sdd)を指定できますが、ドライブIDでUSBスティックを探すように変更するのは非常に簡単です。

バックアップのソースはNFSマウントされたドライブですが、必要に応じて変更/削除できることは明らかです。

バックアップする場所を指定するforループが中央にあります

 # V1.01
 # Uses variable for usbdisk partition

started=`date`
usbdisk='sdd1'

if [ $(mount | grep -c /mnt/usbdisk) != 1 ]; then
 echo "USB disk is not mounted - trying to mount..."
 mount /dev/$usbdisk /mnt/usbdisk
 if [ $(mount | grep -c /mnt/usbdisk) != 1 ]; then
   echo "USB disk still not mounted - alerting admins and quitting"
   echo "USB disk is not mounted on Tux9 so backup cannot continue" | mail -s "Tux9 backup problem" [email protected]
   exit 1
 fi
fi

if [ $(mount | grep -c /mnt/nas) != 1 ]; then
  echo "NAS NFS mount is not present - trying to mount..."
  mount -t nfs -o proto=tcp,port=2049 mynas3:nas /mnt/nas
  if [ $(mount | grep -c /mnt/nas) != 1 ]; then
    echo "NAS NFS mount is still not present - alerting admins and quitting"
    echo "NAS NFS mount is not present on Tux9 so backup cannot continue" | mail -s "ASLTUX9 backup problem" [email protected]
    exit 1
  fi
fi

echo "All mount points present - backup starting..."

for i in /boot / /home /var /mnt/nas
# for testing for i in /boot
do
        if [ $i = "/" ]; then
                rsync -axv --delete [email protected]:$i /mnt/usbdisk/backup/root
        Elif [ $i = "/mnt/nas" ]; then
                rsync -axv --delete $i/ /mnt/usbdisk/backup/nas
        else
                rsync -axv --delete [email protected]:$i/ /mnt/usbdisk/backup$i
        fi
done

echo done, started at $started, finished at `date`
echo "Backup of NAS3 and Tux8 to USB disk on Tux9 done. Started at $started, finished at `date`" | mail -s "Tux9 backup completed" [email protected]
0
Linker3000