共有フォルダへの同期が成功したように見えたのに、できていたのはディレクトリだけでした。移設中に見つかった1.3MB・16ファイルの未保全データを正本置き場へ統合しようとして起きたことです。
これは、自宅ラボを移設中で「共有フォルダへコピーしたから大丈夫」と判断したい運用者にとって、見過ごしにくい種類の失敗です。エラーが出ないことと、必要な内容が届いたことは同じではありません。
同じ共有フォルダでは、別の単純なコピー手段が権限設定の段階で「操作が許可されていません」とエラーを返しました。しかし、書き込まれた内容は残っていました。静かな失敗と、騒がしい成功が同居したため、コマンドの終了表示だけで移設完了を決めない運用へ切り替えました。
共有フォルダで成否の向きが逆になった
旧環境が接続喪失に気づかないまま書き続けていたデータを、共有フォルダ側の正本置き場へ統合しました。最初に使った同期コマンドは、一時ファイルの作成に失敗し、ディレクトリだけを作ってファイル内容を落としました。
そこで単純なコピーコマンドに切り替えると、chmodによる権限設定で「操作が許可されていません」と報告されました。ただし、この失敗表示は内容の書き込み失敗を意味していませんでした。
| 手段 | コマンドが示した状態 | 実際に見た結果 |
|---|---|---|
| 同期コマンド | 明確な失敗として扱えない状態 | ディレクトリのみ作成され、ファイル内容が落ちた |
| 単純なコピーコマンド | 権限設定でエラー | 内容そのものは書き込まれていた |
この差は、どちらのコマンドが常に正しいという話ではありません。この共有フォルダへの書き込みでは、書き込み後の実体を別途見る必要がある、という観測結果です。
16ファイルはバイト単位で突き合わせた
以後、この種類の共有フォルダへの統合では同期コマンドを使わず、書いた後に内容を突き合わせる手順へ変更しました。対象は1.3MB、16ファイルです。
確認の結果、16件すべてでバイト単位の一致を確認できました。ここで初めて、統合作業が終わったと判断できます。コピー処理の表示ではなく、移されたはずの内容を比較した結果を完了条件に置いたためです。
小規模データでの確認結果
対象:1.3MB・16ファイル
判定:16件すべてバイト単位で一致
完了条件:コマンドの表示ではなく、書き込み後の内容一致
移設では、旧側と新側が同時に動くことでデータが二重化する問題も起こり得ます。前段の経緯は旧側が動き続けて二重になる移設記録に残しています。二重化を止めることと、書き込まれた内容を確かめることは、別々に必要な作業でした。
9.2GiBの退避でも、見る場所は同じだった

同じ移設では、旧環境側のデータを退避するため、9.2GiB・46万9930エントリのアーカイブも作成しました。16ファイルと比べれば規模は大きく違いますが、「書けた」という報告を額面どおり受け取らない点は同じです。
アーカイブ作成後には、実行結果コード、圧縮ファイルの整合性、アーカイブ内エントリ数の3点を確認しました。さらに、退避対象の中核であるデータ蓄積、ノウハウ資料、ログの3系統について、個別に実在を確認しています。
| 規模 | 書き込み後に見たもの | 結果 |
|---|---|---|
| 1.3MB・16ファイル | 各ファイルのバイト単位の一致 | 16件すべて一致 |
| 9.2GiB・46万9930エントリ | 結果コード、圧縮整合性、エントリ数、主要3系統の実在 | 複数の観点で退避物を確認 |
元から退避スクリプトには安全弁がありました。一時ファイルへ書き、成功したときだけ本番名へ差し替えること。サイズが1GB未満なら異常として破棄することです。また、読み取り中にファイルが変化したことを示す終了コード1は警告として許容し、終了コード2以上だけを致命的に扱っていました。
それでも安全弁だけでは、退避対象の中身まで自動的に保証しません。圧縮ファイルが存在すること、アーカイブ内の数が合うこと、必要な系統が実在することを別々に見る工程を残しました。移設元の保全が静かに崩れる経路については、移した元が静かに壊れる記録もあわせて読むと、確認対象を分ける理由が見えやすくなります。
定期退避にすると、数字は再び動いた
のちに同じ退避を定期実行へ切り替えると、常駐する別プロセスが自分のログと状態ファイルを更新し続けていたため、読み取り中の変化を示す終了コード1が出ました。
この常駐プロセス由来の対象を退避範囲から除外すると、終了コードは0へ戻りました。同時に、アーカイブは9.2GiBから3.2GiBへ、所要時間は約12分から約4分21秒へ変化しました。終了コードだけでなく、対象範囲と出力サイズ、時間を並べて見ると、何が退避物に入っていたかを見直す契機になります。
| 状態 | アーカイブサイズ | 所要時間・終了コード |
|---|---|---|
| 常駐プロセス由来の対象を含む | 9.2GiB | 約12分・終了コード1 |
| 該当対象を除外 | 3.2GiB | 約4分21秒・終了コード0 |
移設は、書いた先を見て終える
同期コマンドはディレクトリだけを作って沈黙し、コピーコマンドはエラーを返しながら内容を書いていました。小さい統合でも大きい退避でも、信頼できたのは実行時の表示ではなく、書かれたはずの中身を数え、比較し、実在を確かめた結果です。
ただし、この用心が移設全体へ行き渡っているかは分かりません。ある時点で断面凍結されたまま作り直していない二重の複製が残っており、暗号化された秘密情報のスナップショットにも、ここで行った突き合わせ確認はまだ当てていません。
共有フォルダや退避先へ次にデータを書くときは、まず小さな代表ファイルで、書いた後の内容・件数・必要なパスを照合してください。その照合を完了条件に置くところから始めるのが安全です。
この検証を回している環境
この検証は、自宅の常設ラボ(使い捨てVM/LXCを回す母艦+GPU+VLAN分離ネットワーク)で動かしています。使っている機材と選定理由、全体構成は1本にまとめています。
ラボ構成のまとめを見る →