マイクラデータ(%APPDATA%/.minecraft
以下)は Google ドライブにバックアップしてきたが、そのサイズが巨大になってきて、使用容量が 90% を越え、これ以上は困難になってきた。
仕方がないので、古いノートPC に差した USB3 ハードディスクにバックアップをとるようにした。
が、データのチェック(restic check...
)時にどうしてもエラーになってしまう。
UNCパス形式ではなく、ネットワークドライブにすると解消できるだろうか。
そこで pushd コマンドを使って「もし、バックアップ先パスが UNC パスだったら、自動的かつ一時的にネットワークドライブにする」よう修正してみた。
@setlocal @set PROMPT=$D$S$T$G$S @rem to convert UNC-Path to network-drive pushd "%RESTIC_REPOSITORY%" for /F %%I in ('cd') do set "RESTIC_REPOSITORY=%%I" cd /D "%APPDATA%" restic.exe backup ^ --exclude ".minecraft/backups/*" ^ --exclude ".minecraft/mods/*" ^ .minecraft || exit /b 1 timeout 300 restic.exe check --read-data || exit /b 1 restic.exe forget --keep-last 3 --prune popd @endlocal
pushd の機能は /? オプションで確認できる。
$ pushd /? POPD コマンドで使用するために現在のディレクトリを保存し、 指定したディレクトリに変更します。 PUSHD [パス | ..] パス 現在のディレクトリとして設定するディレクトリを指定します。 コマンド拡張機能を有効にすると、PUSHD コマンドは、通常のドライブ文字 とパスだけでなくネットワーク パスも受け付けるようになります。 ネットワーク パスを指定した場合は、PUSHD は指定されたネットワーク リソースを指し示す一時的なドライブ文字を作成し、新しく定義されたドライブ 文字を使って現在のドライブとディレクトリを変更します。一時的な ドライブ文字は、Z: から前へ順に、最初に見つかった未使用のドライブ文字が 割り当てられます。
net use コマンドを使わなかったのは、バックアップ先がローカルディスクでも機能するようにしたかったためだ。
しかし、これでもなお、エラーが出る。
2024/12/23 月 10:29:29.09> restic.exe check --read-data || exit /b 1 using temporary cache in C:\Users\hymkor\AppData\Local\Temp\restic-check-cache-3040023258 create exclusive lock for repository repository 4b90f469 opened (version 2, compression level auto) created new cache in C:\Users\hymkor\AppData\Local\Temp\restic-check-cache-3040023258 load indexes [0:01] 100.00% 4 / 4 index files loaded check all packs check snapshots, trees and blobs [0:02] 100.00% 4 / 4 snapshots read all data Load(<data/3700bfe26b>, 16865032, 0) returned error, retrying after 568.188448ms: open \\?\Z:\restic-minecraft\data\37\3700bfe26b174502c744777f5bf703871cd6a13ab1f1a45d6de2cad4d281eea2: The semaphore timeout period has expired. Load(<data/3700bfe26b>, 16865032, 0) returned error, retrying after 2.99526185s: open \\?\Z:\restic-minecraft\data\37\3700bfe26b174502c744777f5bf703871cd6a13ab1f1a45d6de2cad4d281eea2: The semaphore timeout period has expired.
うーむ。そもそもrestic check
に --read-data
オプションを付けてフルチェックまでするのが誤りなのだろうか(うーむ、前もこんなことやってたなぁ。FTPで)
追記 @ 2024-12-23
その後の試行錯誤:
- リモートマシン上で、USB2 ディスクに対して
chkdsk /F /R
→ フリーエリアで破損クラスターはあったが、ユーザファイル上での破損はなし - リモートマシン上で、
restic check --read-data
を実行
→ 数分で終了。エラーなし
うーむ、やはり、ネットワーク層に10GB超のデータをとおすと、不安定になるか… Windows のファイル共有に限らず、FreeBSD の FTPD でも同様であったから、32bit時代に作られたものの宿命かもしれない。
不安定にならなかったのは、OneDrive とか Google Drive とかクラウドストレージくらいだなぁ ( 近年、作られたもんだからな )