ownCloudサーバ側でファイルを追加する

2018年12月11日

ownCloudについての全投稿は/tag/owncloudを参照してほしい。

※以下には続編がある。ownCloudグループにいる技術者から、occ file:scanはこのような使い方をすべきでは無いと忠告されたため、WebDAVによるアクセスに切り替える予定。やり方は、ownCloudにWebDAV経由でアクセスするに記述した。

ownCloudは、そのクライアントどうしでファイルを共有できる仕組みなのだが、しかし特にサーバ側で発生したファイルをクライアントにダウンロードさせたい。

以下はCentOS-6.9、OwnCloud-9での操作。

目的:サーバファイルのバックアップをしたい

この目的としては、サーバファイルのバックアップをとることである。このサーバは多数のウェブサイトやgit開発レポジトリを抱えているので、そのバックアップファイルを自動的にownCloud管理にし、クライアントがONのときに自動でダウンロードさせたい。

ownCloudがインストールされているならば、他にこのようなバックアップ機能をつけるより、楽になるだろうとの予測のもとにやってみる。

ファイルはどこにあるのか?

あるユーザ名、usernameのファイルは「/var/lib/owncloud/data/username/files」にある。ownCloudがインストールされた点で以下のフォルダ・ファイルが自動的に作成されている。

drwxr-xr-x 2 apache apache    4096 Mar 12 14:40 Documents
drwxr-xr-x 2 apache apache    4096 Mar 12 13:59 Photos
-rw-r--r-- 1 apache apache 4055415 Mar 12 13:59 ownCloud Manual.pdf

そこで、「/var/lib/owncloud/data/username/files/Documents」に適当にファイルを置いてみるが、当然ながら何も起こらない。

ファイルをスキャンする。

調べてみると、ファイルスキャンなるものをする必要があるという、それもwwwユーザの権限で。おそらくCentOSの環境ではapacheだろう。そして、sudoコマンドも必要である。

yum list installed | grep sudo

でsudoコマンドの存在を確認し、以下のコマンドを投入する。

sudo -u apache php /usr/share/owncloud/occ file:scan username

コマンド投入時に、特に特定のフォルダをカレントにする必要は無い。指定されたユーザのファイルすべてをスキャンするようだ。

これで勝手に置いたファイルが同期対象になるようで、無事にクライアント側に現れた。

サーバ側で削除するとゴミ箱には入らない

これは当然のことかと思うが、いったんownCloud管理になったファイルを、サーバ側で削除しocc file:scanによる同期を行うと、ownCloudからも削除されることになるが、その場合は(クライアントで削除したようには)ゴミ箱に入ることは無い。

つまり、サーバ側で削除してしまうと、削除前のファイルはどこにも残らないことになる。これには注意した方がよい。

同じファイル名、中身が同じでタイムスタンプだけ異なるとどうなるか?

touch somefile
sudo -u apache php /usr/share/owncloud/occ file:scan username

としてみると、同期は行われる。ということは、何の変更も無い状態でバックアップし、内容が同じであっても無駄な同期が行われてしまうということだ。

さらに、ファイル名を変更するとどうなるか?

mv foofile barfile
sudo -u apache php /usr/share/owncloud/occ file:scan username

これでも再度ダウンロードされてしまう。異なるファイルと認識されてしまうようだ。つまり、以前のものが消され、新たなものが出現したことになる。

では、バックアップの方策としては?

logrotate等を行って履歴を残すのではなく、バックアップは単一で良いものとする。つまり、毎日定時にサーバ内でバックアップを同じ名前で作成する。ただし、以前と全く同じ内容であれば、ownCloud管理のファイルを上書きすることはしない。単純にバックアップは行わない。

ということで以下になる。

  • あるフォルダやデータベースを一時領域にバックアップする。
  • それが既存のownCloud管理のバックアップと同一であれば、一時領域のファイルを消す。
  • 同一でなければ、ownCloud管理のバックアップに上書きする。