スクリプトでは、3つの主要な操作を考慮に入れようとしました。
- WebDAVディレクトリのマウント
- 同期(これは上記の記事で未解決のままの問題です)
- アンマウント
アイデアの本質
上記の記事のコメントで表現されたアイデアを実現しようとしました。 2N WebDAVアカウントがあります。 N個をデータストレージに使用し、ある種のRAIDに組み合わせます。 アカウントが閉鎖された場合やデータが破損した場合に備えて、バックアップデータの保存に残りのNを使用します。
ファイルの複数のバージョンを保存することも可能ですが、この記事ではそのような方法は考慮されません。
それでは始めましょう、祈りましょう...
0.開始
マウントするには、 mhddfsおよびdavfs2パッケージが必要です。これらはすぐにインストールします。
sudo apt-get install mhddfs davfs2
パスワードのマウントが要求されない場合、特別なファイルに書き込みます。
sudo nano /etc/davfs2/secrets
次の形式で:
URL login pass
URLが一致する場合、ディレクトリへのパスを使用できます。
初期変数を処理します。
# URL WEBDAV_URL1=URL1 WEBDAV_URL2=URL2 WEBDAV_URL3=URL3 WEBDAV_URL4=URL4 # WebDAV( ) WEBDAV_DIR1=/mnt/webdav1/ WEBDAV_DIR2=/mnt/webdav2/ WEBDAV_DIR3=/mnt/webdav3/ WEBDAV_DIR4=/mnt/webdav4/ # , WebDAV RAID_DIR=/mnt/webdav RAID_DIR_BACKUP=/mnt/webdav.backup # # "user" SYMLINK_WEBDAV=/home/user/webdav # ROOT_UID=0 # $UID 0 root. E_NOTROOT=67 # root-. ME=`basename $0`
スクリプトはすぐに必要になるので、すぐにルート権限で実行するようにしてください。
if [ "$UID" -ne "$ROOT_UID" ]; then echo " root." exit $E_NOTROOT fi
1.取り付け
マウント用の関数を作成します。
function mount_webdav() { # , , , , . if [ ! -d "$WEBDAV_DIR1" ]; then echo " $WEBDAV_DIR1" mkdir $WEBDAV_DIR1 fi # WebDAV echo " $WEBDAV_DIR1" mount -t davfs -o rw $WEBDAV_URL1 $WEBDAV_DIR1 # ... # ... # , # WebDAV if [ ! -d "$RAID_DIR" ]; then echo " $RAID_DIR" mkdir $RAID_DIR fi echo " $RAID_DIR" mhddfs $WEBDAV_DIR1,$WEBDAV_DIR2 $RAID_DIR -o allow_other if [ ! -d "$RAID_DIR_BACKUP" ]; then echo " $RAID_DIR_BACKUP" mkdir $RAID_DIR_BACKUP fi echo " $RAID_DIR_BACKUP" mhddfs $WEBDAV_DIR3,$WEBDAV_DIR4 $RAID_DIR_BACKUP -o allow_other # echo " $SYMLINK_WEBDAV $SYMLINK_WEBDAV" ln -s $RAID_DIR $SYMLINK_WEBDAV
2.同期
ここではすべてが非常に簡単です。 同期には、標準のrsyncユーティリティを使用します。
function sync_webdav() { # rsync --progress -zuogthvr --delete-after $RAID_DIR $RAID_DIR_BACKUP }
オプションの説明は、インターネット上、特にここで見つけることができます 。
3.アンマウント
アンマウントに加えて、この関数は空のディレクトリ自体を削除します。 RAIDの見た目を作成したディレクトリが最初にマウント解除されることに注意してください(理由はわかります)。
function umount_webdav() { echo " $RAID_DIR_BACKUP" umount $RAID_DIR_BACKUP rm -rf $RAID_DIR_BACKUP echo " $RAID_DIR" umount $RAID_DIR rm -rf $RAID_DIR echo " $WEBDAV_DIR1" umount $WEBDAV_DIR1 rm -rf $WEBDAV_DIR1 # ... # ... # rm $SYMLINK_WEBDAV }
4.ヘルプ
助けのない通常のスクリプトはどこにありますか? 状況を修正してください。
function print_help() { echo " Webdav" echo echo ": $ME options..." echo ":" echo " -m webdav." echo " -u ." echo " -s ." echo " -h ." echo }
スクリプトをパラメーターなしで実行する場合は、ヘルプを開きます。
if [ $# = 0 ]; then print_help fi
5.ほぼ完了
私たちの機能の切り替えシステムを完成させることは残っています。
while getopts msuh opt ; do case $opt in m) mount_webdav; ;; s) sync_webdav; ;; u) umount_webdav; ;; h) print_help ;; *) echo " "; echo " $ME -h"; exit 1 ;; esac done
まとめ
これでスクリプトの準備が整いました。必要に応じて、本格的なツールに拡張できます。 rsyncを使用すると、アカウントからアカウントへのデータの増分コピーを整理できます。 よく知られているDropboxの類似物を受け取って、ディスク上のデータとの同期を追加できます。 それはすべてあなたの想像力にかかっています。
上記のスクリプトの主な欠点は、それ自体がソースデータの安全性を制御せず、別の場所にコピーするだけであることです。 うまくいけば、私はこの問題を解決します。
スクリプトの完全版のほか、開発のヘルプはこちらにあります 。
PSスクリプトはまだ十分に未加工です。 記事は更新され、補足されます。 計画では、インストールディレクトリの空をチェックして、「ばかから」保護することです。 お楽しみに...