Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

EBSスナップショットからファイル単位で復元する

EBS スナップショットからファイルを復元する際の備忘録。よくある作業だが忘れがちなので、手順をまとめておく。

https://blog.serverworks.co.jp/tech/2019/06/10/restore-file/

こちらを参考にした。

今回は削除済みインスタンスのスナップショットであるため、作業用の EC2 インスタンスを作成する。その後、スナップショットから作成した EBS ボリュームをアタッチし、必要なファイルをコピーする。

なお、作業用インスタンスは、Amazon Linux 2023 にした。

作業用EBSボリュームの作成

スナップショットを選択して、「アクション」-「ボリュームの作成」

  • EBS ボリュームは AZ 内のリソースなので、作業用インスタンスと同じ AZ にボリュームを作成する必要がある
  • Name タグに判別しやすい文字列を入れておくとよい

作業用EC2インスタンスの作成

  • SSM や SSH 等でターミナルログインできるように構成する

EBSボリュームのアタッチ

ボリュームをアタッチする。

デバイス名はデータボリューム推奨の/dev/sdfにした。

EBSボリュームのマウント

Claude の回答。

デバイス名は/dev/xvdf でも、実際にマウントするのはパーティション /dev/xvdf1 になるケースが多いです。lsblk で確認してから作業するのが安全です。

lsblk
# xvdf
# └─xvdf1  ← これをマウント

今回の作業用インスタンスは、以下のとおり。

lsblk
# NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# ...
# nvme1n1       259:4    0  50G  0 disk
# ├─nvme1n1p1   259:5    0  50G  0 part
# └─nvme1n1p128 259:6    0   1M  0 part

したがって、デバイス名/dev/nvme1n1p1をマウントする。

復元元ボリュームは読み取りのみで十分なので、誤操作防止のため read-only マウントを推奨します。

Claude のアドバイスに従い ro オプションを使用してマウントしたが、このあとボリュームは削除するのでいらなかったかも。

sudo mkdir /mnt/restore
sudo mount -o ro /dev/nvme1n1p1 /mnt/restore

対象ファイルのコピー

今回は SSM のターミナルから作業しているため、バケット経由でファイルを取得した。

# ディレクトリの場合は、recursive オプションをつける
aws s3 cp /mnt/restore/{your path} s3://{your bucket}/ --recursive

アンマウント

cd でマウント先のディレクトリから移動してから、アンマウントする。

sudo umount /mnt/restore

EBSボリュームのデタッチ

作業用インスタンスから EBS ボリュームをデタッチする。

ボリュームとインスタンスの削除

ボリュームとインスタンスを削除する。

なおデタッチした EBS ボリュームを削除しても、元になったスナップショットは消えない。