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

openjdk(SPARC)

SPARC用のJAVA。 最近は新しいバージョンがSPARCでリリースされず、苦労している人も多いのですが、SPARC Solarisの界隈人達がビルドして代わりに使われているものです。 Solaris 11 SPARC jdk builds
»続きを読む

Solaris11のCPU(Critical Patch Unit)の当て方

コンピュータTips/Solaris/Solaris11のCPU(Critical Patch Unit)の当て方

Solaris 11.4には4つのリビジョンがあります。 2024年4月現在、Solaris自体の開発はメンテナンスフェーズになったわけでもなく、SRU毎に、最新機能がモリモリ入っていきます。 GA(Release 版) 一応、無償のOTNライセンスの利用も可能 いわゆる、リリース時点のバージョンのことですが、現在は 利用しません 。 以前は、1〜2年に1度の頻度でリリ …
»続きを読む

Emacs.appで書類(Documents)がアクセス出来ないとき

コンピュータTips/MacOSX/Emacs.appで書類(Documents)がアクセス出来ないとき

Catalina以降の権限問題なので、システム設定のセキュリティとポリシーの中にあるプライバシー内のFull Disk Accessに、Emacs.appと/usr/bin/rubyを入れればすむ。 /usrフォルダを、プライバシーの+から入れるのは、ちょっと面倒なので、あらかじめFinderのお気に入りの中に入れておくと良いでしょう。   rubyが入るのは、Emac …
»続きを読む

SONY WH-1000XM3

自分用メモです。 ノイズキャンセラーの性能が良い。 WH-1000Xのころは、ノイズキャンセラーを有効すると、音は聞こえないのに妙な音圧があったが、それがかなり軽減。個人的には気にならなくなった。 また、WH-1000Xのころは、ノイズキャンセラーを無効にしても、なんか作られたような音が出ていたような気がしたが、割と普通に聞こえる。 USB-Cになったのも良い。飛行機でも使う …
»続きを読む

Catalina(10.15)

Catalina Beta を入れ始めたので、自分用のまとめ。 2019/10/8、Catalinaが振ってきたので製品版用に記載を変えました。 32bitアプリを確認すること。 Activity Monitorで32bitアプリがわかるので、そういうアプリがあるなら代替品を見つけておくこと。 /etc以下のいくつかのファイルをバックアップしておくこと。 /etc …
»続きを読む

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

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

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

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

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

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

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

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