svn commitに失敗してcleanupもできない

I/Oエラーでcommitに失敗してもう一度実行するとcleanupしろと言われるができない。(Subversion v1.8.9)

>svn cleanup
svn: E200030: sqlite[S10]: disk I/O error
svn: E200030: Additional errors:
svn: E200030: sqlite[S10]: disk I/O error
svn: E200030: Additional errors:
svn: E200030: sqlite[S1]: cannot rollback - no transaction is active
svn: E200030: Additional errors:
svn: E200030: sqlite[S1]: cannot rollback - no transaction is active

ディスクの空きはGB単位であるし、通常のファイル操作は成功する。昨日試しに入れてみたAvastが疑わしいが、ファイルシステムシールド*1を一旦オフにしてみても変わらない。
他でこのworking copyを使っている等の正当なロックではないので直接いじって解除してみる。

>cd .svn
>copy wc.db wc.db.bak
>sqlite3 wc.db .tables
ACTUAL_NODE    NODES          PRISTINE       WC_LOCK
EXTERNALS      NODES_BASE     REPOSITORY     WORK_QUEUE
LOCK           NODES_CURRENT  WCROOT

少し違うが似たようなcleanup不可事例ではWC_LOCK と WORK_QUEUE テーブルが関係するらしい。一応 LOCK も見てみる。

>sqlite3 wc.db --header "select * from LOCK"
#空
>sqlite3 wc.db --header "select * from WORK_QUEUE"
#空
>sqlite3 wc.db --header "select * from WC_LOCK" (--html)
wc_id local_dir_relpath locked_levels
1 -1

WC全体のロックが残っているだけのようだ。svn stの状態とも矛盾しないのでこれを消してみる。

>sqlite3 wc.db "delete from WC_LOCK"
>cd ..
>svn commit
ファイルのデータを送信しています .svn: E155011: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: E155011: ファイル '/path/to/wc/changed/file' はリポジトリ側と比べて古くなっています
svn: E170004: File '/trunk/changed/file' is out of date

確認のためのsvn stを忘れたがロックは消えたようだ。前のコミットは成功していたらしい。同期してみる。

>svn up
Updating '.':
svn: E200030: sqlite[S10]: disk I/O error
svn: E200030: Additional errors:
svn: E200030: sqlite[S10]: disk I/O error
svn: E200030: Additional errors:
svn: E200030: sqlite[S1]: no such savepoint: svn
svn: E200030: Additional errors:
svn: E200030: sqlite[S1]: no such savepoint: svn
svn: E200030: Additional errors:
svn: E200030: sqlite[S1]: no such savepoint: svn
svn: E200030: Additional errors:
svn: E200030: sqlite[S1]: no such savepoint: svn

またもや失敗。ただしcommit時と違い今回ロックは残らなかった。
もう一度Avastを切って試したところ、今度はupdateに成功した。
検索してもAvastでSubversionが動かなくなったという話は聞かないし、 C:\ProgramData\AVAST Software\Avast\log にも何も書いてないのだが。*\.svn\*をスキャンから除外して様子を見ることにする。

Avastをアンインストールした*2

再びSubversionでI/Oエラーが出たり、.iniファイルが消えたり、スクリプトが不規則に失敗したりする症状が出るようになっていたのだが、ダメ押しでWindowsがロック状態から復帰できなくなりハードリセットする羽目になったためとりあえずMSSEに戻すことにした。
そもそもMSSEがリアルタイム保護しか使っていないのに、起動していないアプリのスキャンをPCの使用中に始めたりするため代替品を探していたのだが、仕方ない。
Windows 7では今までこれほどPCが不安定になった事は無い。

*1:ファイルシステムシールド以外は不要だったため入れていない。

*2:アンインストーラを実行したらブラウザを管理者権限で起動してくれたおまけ付き。