HOME / コンピュータTips / MacOSX / MacでWebDAVサーバに自動バックアップ(ファイル同期)する方法

Date: 2015/01/03 |  このエントリーをはてなブックマークに追加  |  Tags: MacOSX, webdav_sync, WebDAV, 自動同期

MacでWebDAVサーバに自動バックアップする方法

MacでWebDAVサーバに自動バックアップする方法を考えて見ました。どんなWebDAVサーバに対してもできるので、自宅サーバやVPSにWebDAVサーバを建てて使うことができますが、ここでは弊社、JUSTPLAYERが誇る高速WebDAVストレージクラウドでもある、Teraクラウドでテストしてみました。

※2015年1月4日現在、Teraクラウドでは、100G無料キャンペーンをやっているので、やってみたい方はチケットゲットして100G無料貰ってHOMEをバックアップしても良いかもしれません。

プログラムは、先日紹介したWebDAV-Syncを使います。わかる人には先日の記事だけで自動同期ができますが、OSXならではのlaunchdを使って、ちょっとエレガントにインストールしてみます。

WebDAV-syncのconfig作成

コマンドラインからWebDAV-syncが動くようにせねばなりません。

最初に、WebDAV-Syncをダウンロードします。

最新版のjarファイルをダウンロードしたら、次の様に実行します。

% java -jar  ~/Downloads/webdav_sync1_1_4.jar -h
be.re.webdav.cmd.Sync [-h] [-i seconds] [-reset] (-c config_file | [(-r|-no-recursion)] [-rename] [-rename-depth number] [-hidden-folder] [-e comma_separated_patterns] (-down|-up|-bi) -u URL -d directory)

無事、ヘルプが出てきています。

次に、launchctl用のファイルや、同期用のconfigファイル一式をアーカイブしたものをtarで固めておいたので、これをダウンロードします。

このファイルは、自分のHOMEから展開します。

cd ~/
tar xvf ~/Downloads/jp.teracloud.webdav-sync1_1_4_jp1.tar.bz2

すると、次の様なファイルが展開されます。

x Library/
x Library/Application Support/
x Library/LaunchAgents/
x Library/LaunchAgents/jp.teracloud.webdav-sync.plist
x Library/Application Support/jp.teracloud.webdav-sync/
x Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.plist-dist
x Library/Application Support/jp.teracloud.webdav-sync/webdav_sync1_1_4_jp1.jar

ここに、先ほどダウンロードした、webdav_sync1_1_4.jarをコピーします。

cd ~/Library/Application\ Support/jp.teracloud.webdav-sync/
cp ~/Downloads/webdav_sync1_1_4.jar .
ln -s webdav_sync1_1_4.jar webdav_sync.jar

次にエディタで、Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.plist-distを開き、Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.plistという名前で、セーブします。

次の様なファイルになっているので、日本語の箇所を自分のもの、自分のサーバに書き換えます。下記の例では、Documentsをバックアップすることになっています。複数列挙したい場合は、<sync>〜</sync>を複数羅列するとうまくいくでしょう。

<?xml version="1.0"?>
<config>
   <sync>
    <directory>/Users/あなたのユーザ名/Documents/</directory>
    <url>https://テラクラウドのユーザ名:パスワード@収容サーバ名.teracloud.jp/dav/Documents/</url>
    <direction>up</direction>
    <!-- Optional ACL for upload. -->
    <acl xmlns="DAV:">
      <ace>
        <principal><authenticated/></principal>
        <grant>
          <privilege><read/></privilege>
        </grant>
      </ace>
    </acl>
    <exclude>^\.DS_Store$</exclude>
    <exclude>^\.DocumentRevisions-V100</exclude>
    <exclude>^\.TemporaryItems$</exclude>
    <exclude>^core$</exclude>
    <exclude>^.*\~$</exclude>
    <exclude>^\#</exclude>
    <exclude>^\.\#</exclude>
    <exclude>^\#.*\#$</exclude>
    <exclude>^\.Trashes$</exclude>
    <exclude>^\.csync</exclude>
    <hidden-folder-name>.Hidden</hidden-folder-name>
    <!-- The following two are mutually exclusive. -->
    <!-- recursive/ -->
  </sync>
</config>

ここで動作テストをかねて、最初の同期をしてみます。

テストは途中で止めても良いのですが、最初の1発目の同期なので一気に最後までやってしまった方が良いでしょう。データ容量に見合う、太く従量制ではない回線を用意して下さい。

% java -jar ~/Library/Application\ Support/jp.teracloud.webdav-sync/webdav_sync.jar -c ~/Library/Application\ Support/jp.teracloud.webdav-sync/webdav_sync.plist
〜ログはファイルがいっぱい出てくるだけなので割愛〜

最後まで動いたことを確認し、プロセスが終了したことも確認しておきます。

launchdで常駐させる

ここまでできたら、自動的に実行するだけです。launchdを使って同期させます。利用したい一般ユーザで行います。

% launchctl load ~/Library/LaunchAgents/jp.teracloud.webdav-sync.plist

何も出てきませんが、これで自動実行が開始しています。次のようにすると、実際に動作する過程が見れるはずです。

% tail -f ~/Library/Logs/jp.teracloud.webdav-sync.err

※このtailは、いつでもctrl+cで止めて構いません。

launchctlに登録していることを確認したいときは、下記の様にタイプします。sudoしてはいけません。

launchctl list | grep teracloud
-	0	jp.teracloud.webdav-sync

次に、jp.teracloud.webdav-syncサービスを起動する方法です。

launchctl start jp.teracloud.webdav-sync

すると、次の様に起動されます。

launchctl list | grep teracloud
24960  -       jp.teracloud.webdav-sync

実際にプログラムが起動してるかどうかは、下記の様に確認できます。

ps -aef | grep java
1004 25095   233   0 12:38AM ??         0:12.78 /usr/bin/java -jar /Users/kohju/Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.jar -i 300 -c /Users/kohju/Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.plist

launchdのマニフェスト

~/Library/LaunchAgents/jp.teracloud.webdav-sync.plistは、次の様に書かれています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>jp.teracloud.webdav-sync</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/java</string>
                <string>-jar</string>
                <string>/Users/kohju/Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.jar</string>
                <string>-i</string>
                <string>300</string>
                <string>-c</string>
                <string>/Users/kohju/Library/Application Support/jp.teracloud.webdav-sync/webdav_sync.plist</string>
        </array>
        <key>LowPriorityIO</key>
        <true/>
        <key>Nice</key>
        <integer>1</integer>
        <key>StandardOutPath</key>
        <string>/Users/kohju/Library/Logs/jp.teracloud.webdav-sync.out</string>
        <key>StandardErrorPath</key>
        <string>/Users/kohju/Library/Logs/jp.teracloud.webdav-sync.err</string>
        <key>KeepAlive</key><true/>
</dict>
</plist>

※このplistの書き方は、下記のコマンドで詳しく調べることができます。

man launchd.plist

この設定では、-cオプションにて、300秒に1度、daemon modeとして実行しています。webdav_syncは決して軽いプログラムではないので時間に1度ぐらいにしても良いかも知れませんね。

TimeMachineは、1時間に1度ぐらいしかコピーしませんしね。

ファイルのリストア方法

1つ1つのファイルが壊れてしまった時等、個別にバックアップから復元する必要がある場合は、なんらかのWebDAVのクライアント(例:CyberduckやTransmitなど)を使うことで、ファイルの取り出しができるでしょう。

また、Teraクラウドを利用している場合は、誤って削除されてしまった状態で同期されてしまった場合でも、サーバ側でスナップショットを残すので、Webからログインしてスナップショットから救出をすれば、1日以内なら3時間ごと、1週間以内なら1日ごとでデータの救出ができます。

マシンがクラッシュした時など、まるまるリストアしたいときは、次の様にすればリストアができるでしょう。

java -jar ~/Library/Application\ Support/jp.teracloud.webdav-sync/webdav_sync.jar -down -u https://ユーザID:パスワード@収容ホスト名.teracloud.jp/dav/Documents/ -d ~/Documents/

もちろん先に~/Documentsではなく、別のフォルダにダウンロードしておき、必要な物だけコピーすることもできます。

その他のこと・・・

このwebdav-syncは、1つのインスタンスしか実行できないようです。したがってwebdav-syncをlaunchdで実行しているときは、他の用途でwebdav-syncを使えません。ちなみに、起動中のインスタンスがあると、何も言わずすぐに終了します。これがまた、なんで動かなくなったのかわからなくて、結構焦ります(笑)。

 

また、webdav-syncは、問題があると「IOException」をだしてすぐに止まる設計思想?のようです。ファイル名に特殊キャラクタがあったり、ファイル名の長さだったり、様々な理由でサーバから正しくお断り(403:Forbidden)されると、IOExceptionしてプログラムが停止し、その先のファイルコピーを完全に諦めてしまいます。

これではバックアップ用途には都合が悪いので、そのファイルのアップロードにはWarningをだして諦め、先に進むようにパッチを当てました。

実は配布アーカイブにいれてあります。この意外にも、「別のwebdav-syncがロックしているので動かない」ときのエラーメッセージなど、気になるIOExceptionを拾うようにしておきました。

パッチ版を利用するには次のようにします。

cd ~/Library/Application\ Support/jp.teracloud.webdav-sync/
rm webdav_sync.jar
ln -s webdav_sync1_1_4_jp1.jar webdav_sync.jar

webdav_syncは双方向同期機能があるようです。webdav_sync.jarは私のプログラムではないので、正直、どういうメカニズムで動いてるか確認していません。双方向同期はリスクがかならずつきまとうので、有効にする方はご注意を。


そんなわけで、これさえ仕込んでおけば、たまに

% tail -f ~/Library/Logs/jp.teracloud.webdav-sync.err

を使って確認する程度で、WebDAVサーバにバックアップしてることを確認でき、とても便利です。WebDAVサーバなら、スマフォやタブレットに沢山のクライアントがあるので、そこから好きなものを使えばデータの閲覧も容易です。

もちろんTeraクラウドならば、これ以外にもファイル単位のデータの公開など、様々な機能がありますので、WebDAVサーバを自分用に作るのはちょっとしんどいなぁ・・・なんて思う方は、是非、Teraクラウドのアカウントを作ってみてくださいね。


teracloud.png


コンピュータTips/MacOSX

Recent Updates

ディスクの不良を確認する(iostat -EnのError等)

ディスク関係のスタックをざっくり書くと次の様になっています 例、SAS Expanderを使う場合、 例、AHCIなどを使う場合、 これらのエラーは、次の様なコマンドで知ることができます。 出力結果例 このなかで、 たとえば、SATAディスクを利用している際に負荷が上がってしまい、ディスクの応答が間に合わないシチュエーションでは、Transport Errorが一気に …
»続きを読む

2017年、新年明けまして、おめでとうございます。

日記/2017年、新年明けまして、おめでとうございます。

新年明けまして、おめでとうございます。今年もよろしくお願いします。 昨年中は、皆様にお世話になりました。 昨年は、コツコツと3年程前から行ってきた改革がある程度完成された年で、この先5年、10年を見据えて、次のフェーズへと進む為の土台が完成した年でもありました。 それにキャッチアップする形で、個々の従業員一同が、役割を自覚し、明確に動けた年であったかと考えています。 …
»続きを読む

RSA鍵認証のみにし、Password認証を無効化する

意外に覚えきれなくて、いつも忘れるので、メモついでに残しておきます。 古いOpenSSHや、SunSSHの場合は、これも無効にします。 ユーザ目線でのザックリとした説明を。OpenSSHではなく別のSSH実装も含めて考えているので、OpenSSHのソースをじっくり読んだわけではないため、間違ってたらすみません。 まず、Password認証を無効にする場合、 PasswordAut …
»続きを読む

Nexus7 2013をMarshmallow(Android 6.0)化

OTAでない方法で。 だいたい ここに書いてある方法 なんだけど、adbなどが一式使えている状態で。 まずは自分の機種のものをダウンロードする。僕のは、 Android 6.0 Marshmallow for Nexus 7 2013 Wi-Fi 。tgzを展開し、zipも解いておく。 まずはboot loaderへ。 bootloader自体のアップデート。一式、updat …
»続きを読む

OS X 10.11 El Capitanで、phpのモジュールインストール

Yosemiteからのアップデートは割と簡単です。なぜならYosemite時に、すでにapache 2.4になり、php 5.5になっているから(笑 アップデート前に、まずはphp.iniとhttpd.confをバックアップしておきましょう きになるなら、hostsとかapache以下全てをバックアップしておいてもいいかも。 後はEl Capitanにアップデートする。 アッ …
»続きを読む

EasyAcc Powerbank PB4000CB

スマフォTips/モバイルバッテリー/モバイルバッテリー製品レビュー/EasyAcc Powerbank PB4000CB

薄型のモバイルバッテリーEasyAcc Powerbank PB4000CBです。 今や、モバイルバッテリーは大型のものが好まれるのか、隙間無く商品があります。20,000mAh越えで、「でけえ!」とか言ってますけど、大きいのを探せば、100Wh(27,000mAh)、200Wh当たり前、探せば500Wh(135,000mAh)とか、もっともっとあるのです。用途がどんどん異なっていくので …
»続きを読む

EC Technology Sports Headsets S10-JWH07B

デバイスTips/Bluetooth/EC Technology Sports Headsets S10-JWH07B

Bluetoothのスポーツヘッドセット、 S10-JWH07B について。 今までブログに記載することはなかったのですが、実は割とBluetoothと言うか無線型のヘッドフォンを沢山持っています。赤外線や独自物、Bluetoothなどいくつもストックを持っていたりします。普通の人からするとマニアです。でも、マニアからみるとそうでもないレベルです。 ただ「ヘッドフォンの音質」というの …
»続きを読む

静岡県内をVPNでつなぐ(割と特殊な例)

静岡というのはある意味特殊な土地で、ほとんどのインターネットプロバイダのPOIは静岡でつながれておらず、NTT西圏内のどこかで繋がっているので、大抵大阪折り返しになる。仮に静岡県内にPOIがあっても、だいたい静岡でルーティングしてないので、やっぱり東京折り返しになってたりする。例え 同じプロバイダを使っていたとしても 。 だから静岡←→静岡のVPNは、静岡←→東京や、静岡←→大阪よりも遅 …
»続きを読む

最新  |  << 前ページ  |  次ページ >>  |  最初