designetwork

ネットワークを軸としたIT技術メモ

Sonatype Nexusデータ誤削除の復元方法

Sonatype Nexus Repositoryで誤ってデータを削除してしまった際の復元方法。なお、本手順で復元できるのはWebUI等からの削除(論理削除, Soft-Delete)の場合のみ。

※バージョンにより復旧手順が異なる場合があります。本作業によるデータロストの責任は負いかねますのでご了承ください。別環境での事前検証など十分な確認をお願いします。

バージョン情報

Sonatype Nexus Repository: OSS 3.41.0-01

サマリー

後述の補足も参考に操作・変更内容を把握した上で実行ください。 default は設定次第で異なることがあります。

  1. 論理削除フラグ解除
    sed -i -E "/^deleted.*$/d" <DATA_DIR>/blobs/default/content/*/*/*.properties
  2. データベース復元
    Task: Repair: Reconcile component database from blobstore
  3. 削除対象indexリスト削除
    rm <DATA_DIR>/blobs/default/<id>-deletions.index
  4. 削除対象indexリビルド設定
    echo "rebuildDeletedBlobIndex=true" >> <DATA_DIR>/blobs/default/metadata.properties
  5. 再起動

参考

community.sonatype.com

https://support.sonatype.com/hc/en-us/articles/360025325653-How-to-rebuild-the-Admin-Compact-blobstore-deletions-index-file-if-soft-deleted-blobs-are-orphanedsupport.sonatype.com

補足

はじめに

復元に失敗した場合を考慮して、<DATA_DIR>一式をコピー・退避しておくと安全。

論理削除フラグ解除

各リソースは <id>.properties , <id>.bytes で構成されている。 論理削除状態のリソースはpropertiesファイルに deleted=true, deletedDateTime=..., deletedReason=... がセットされる。 これらを削除する。

データベース復元

削除操作時点でデータベースが更新され対象リソースは表示されずアクセスできなくなる。 Repair: Reconcile component database from blobstore タスクにより、リソース(blob)の現状を元にデータベースの内容が更新される。

削除対象indexリスト削除

論理削除されているリソースは Admin - Compact Blobstore タスクにより物理削除される。 論理削除時 <id>-deletions.index に対象リソースが追加され、これは上記の操作では取り消されない。 そのため、ファイルを削除することで削除対象を空にする。

削除対象indexリビルド設定

rebuildDeletedBlobIndex=true を設定することにより、各リソースのdeletedフラグから <id>-deletions.index が再生成される。deletedフラグは解除済みのため、基本的に空のファイルが生成される。

再リストア

リストアをやり直す場合は blobs, db, keystore ディレクトリを置き換えて再起動することにより作業前の状態に戻る。