Syncthingを使ってみる、その5

2023年1月17日

Syncthingを使ってみる、その4の続きである。

Syncthingのバージョン管理

バージョン管理とは、あるファイルを編集したり、削除したりした場合でも、前の状態を覚えておくということ。これにより、「やっぱり前の方が良かった」とか、「うっかり消してしまった」という要求に応えられるようにする。

Syncthingにはバージョン管理機能があり、いくつかの種類がある。

簡単な選択肢としては、いわゆる「ゴミ箱」フォルダで、ファイルを消してしまっても、それをゴミ箱に残しておくというアレである。複雑なところでは、ファイルが変更されたり、削除された履歴を定期的にとるらしい。

デフォルトでは、バージョン管理機能は無しである。ファイルを削除したり、変更したりすれば、ファイルそのものが無くなってしまうか、前の状態は残らない。

ただし、これを例えばWindowsの中で行った場合には、Windowsの機能として「ゴミ箱」機能があるので、そこには残っているはずである。これはMacでも同じ事情のようだが、AndroidやLinuxでは一般にゴミ箱機能は装備されていないので注意。

Syncthingのバージョン管理はローカルには反映されない

Syncthingのゴミ箱機能、あるいはバージョン管理を初めてやってみて面食らった点だが、ローカルには反映されないのである。今以下のような状況だとする。

  • あるフォルダAをX,Y,Zのマシンで共有しているとする
  • マシンX,YでAフォルダのババージョン管理にゴミ箱を指定したとする。Zにはバージョン管理無し。

そして、マシンXのAフォルダから一つのファイルを削除したとする。すると、XのAフォルダの.stversionsというフォルダにゴミが残るかと思いきや、残らない。残るのは、YのAフォルダの.stversionsフォルダである。

※ただし、この.stversionsという、「ドット」から始まる名称は、一般的には「隠しファイル・フォルダ」になっているので、「隠しファイル・フォルダを表示する」というオプションを選択しないと表示されない。

この事情については、No .stversions folder?に説明がある。つまり、こういうことだ。

  • ファイルを削除した当該のマシンでは、この機能は動作しない(ただし、それがWindows/Macなら、そのOS自体のゴミ箱には残っている)
  • そのフォルダを共有している別のマシンで「ゴミ箱」を有効にしているなら、その.stversionsには残っている。

ということなのである。

このような仕様になっている理由

おそらくこういうことだ。マシンXでユーザが手作業でファイルを削除した場合、それをOSが検出し、Syncthingに伝えるわけだが、その時には既に元のファイルがないため(たとえOSのゴミ箱にあったとしても)、そのマシンの.stversionsに元ファイルを放り込むすべが無いものと思われる。

しかしながら、マシンXで起こった変更が伝えられるマシンYの方では、そのファイルが削除されたことが通知され、削除前の状態が残っているので、ゴミ箱に入れることができるのだろう。

バージョン管理の種類

さて、バージョン管理の種類はいくつかある。

すべてを試してみたわけではないし、少々意味不明なところもあり、想像もあるのだが、以下の種類だそうだ。

バージョン管理をしない

何もしない。ファイルが消されれば消されっぱなし(ただし、OSのゴミ箱サポートがあれば、それは行われる。

ゴミ箱によるバージョン管理

当該マシン以外で、そのフォルダを共有しているマシンにおいて、削除された場合は、それが.stversionsというゴミ箱に放り込まれる。また、ファイルが上書きされた場合にも前のバージョンがゴミ箱に放り込まれる。

何度も上書きされた場合でも前のバージョンしか残らないものと思われる。

単純バージョン管理

「Syncthingによって置き換えられたり削除されたファイルは、タイムスタンプ付きのファイル名で .stversions ディレクトリに移動します」とある。

例えば、test..txtというファイルを作成し、これに変更を加えて保存していくと、以下のようなファイル名で.stversionsに格納される。

つまり、ファイルを変更する都度、前のバージョンがどんどんと無制限に格納されていく。ただし、「最大保存日数」を指定できる。

期間別バージョン管理

「Syncthingによって置き換えられたり削除されたファイルは、タイムスタンプ付きのファイル名で .stversions ディレクトリに移動します。 古いバージョンは、最大保存日数もしくは期間ごとの最大保存数を超えた場合、自動的に削除されます。

保存間隔は次の通りです。初めの1時間は30秒ごとに古いバージョンを保存します。同様に、初めの1日間は1時間ごと、初めの30日間は1日ごと、その後最大保存日数までは1週間ごとに、古いバージョンを保存します。」

あまり役に立ちそうもないので、詳しく調べておらず、これも想像だが、こういうことかもしれない。ファイルが作成されたばかりの時は、頻繁に、かつ大きく変更される可能性が高い。しかし、保存の都度、やたらと前のバージョンを保存しても意味が無い。そこで、前のバージョンから、上の時間が経過している場合には、次のバージョンを保存するということかもしれない。

外部バージョン管理

Syncthing内部でバージョン管理を行うのではなく、バージョン管理を外部コマンドにまかせてしまうということらしい。これも詳しくは調べていない。

どれを選択するか

結局のところ、すべての履歴を保存してくれるのが最も良い。つまり、選択すべきは単純バージョン管理である。

その一方で、この方式はディスクスペースを使い過ぎる。だからこそ、他の選択肢があるわけだ。

しかし、作業中のマシンには、一切履歴が残らず、そのフォルダの同期先にのみ残るわけだから、これはむしろ都合が良い。

作業は容量の比較的容量の小さいノートパソコンにし、その同期先として自宅据え置きのNAS(ネットワークストレージ)なり、デスクトップパソコンとすれば、それは、単純バージョン管理にしておいてもそれほど無茶な話しではないだろう。

ただし、もちろん、Syncthingによるバージョン管理は、プログラムソースには全く向いていない。そういった用途では、git等のシステムを使うべきだろう。

未分類

Posted by ysugimura