Amazon EBSをファイル単位でリストアする方法

記事タイトルとURLをコピーする

こんにちは、マネージドサービス課の小倉です。
2019年3月からこちらの課に所属が変わりました。

今回は、EC2にマウントしているEBSのバックアップ(スナップショット)を取得していることが前提ですが、EBSをファイル単位でリストアする方法をご紹介します。
ファイルをOS内でバックアップを取得せずに致命的な編集をしてしまった場合などに使うことができます。

リストア手順

リストアする内容

Amazon Linuxの/etc/hostsファイルを例にファイル単位でリストアする方法を説明します。
まず、現在の/etc/hostsの中身を確認します。

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
iranaisettei
::1         localhost6 localhost6.localdomain6

/etc/hostsに "iranaisettei" という変な文字列が入ってますので、これを編集前の状態に戻します。

EBSボリュームの作成

マネジメントコンソールからEC2一覧を表示し、対象のEC2のインスタンスIDをコピーします。

左メニューの「スナップショット」をクリックし、検索画面に先ほど確認した対象EC2のインスタンスIDを入力して検索します。
検索結果に表示された中から、/etc/hostsが編集される前の時間のスナップショットを選択します。

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

ボリューム作成画面が表示されます。
後ほど、ここで作成したボリュームは削除しますので、タグに文字列を入れておくと削除対象がわかりやすくなります。
タグを入力して、「ボリュームの作成」をクリックします。

ボリュームが作成されました。
「閉じる」をクリックして、ボリューム一覧に戻ります。

EBSボリュームのアタッチ

対象のEBSボリュームを選択します。

「アクション」 - 「ボリュームのアタッチ」をクリックします。

アタッチする対象のインスタンスIDを選択して、「アタッチ」をクリックします。

左メニューのインスタンスをクリックし、対象のEC2インスタンスを確認するとブロックデバイスにアタッチしたEBSボリュームが表示されます。

EBSボリュームのマウント

EBSボリュームをマネジメントコンソール上でアタッチするだけでは、OS上で使用することはできませんので、EBSボリュームのマウントが必要です。
以下の例は、マウント先の /data ディレクトリを作成して、/dev/xvdf1をマウントしています。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        231M   68K  231M   1% /dev
tmpfs           241M     0  241M   0% /dev/shm
/dev/xvda1      7.9G  1.1G  6.7G  14% /

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
┗xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk
┗xvdf1 202:81   0   8G  0 part

$ sudo mkdir /data

$ sudo mount /dev/xvdf1 /data

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
┗xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk
┗xvdf1 202:81   0   8G  0 part /data

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        231M   68K  231M   1% /dev
tmpfs           241M     0  241M   0% /dev/shm
/dev/xvda1      7.9G  1.1G  6.7G  14% /
/dev/xvdf1      7.9G  1.1G  6.7G  14% /data

対象ファイルのコピー

マウントしたEBSボリュームから対象ファイルを上書きコピーして、編集前の状態に戻します。

$ diff /data/etc/hosts /etc/hosts
1a2
> iranaisettei

$ sudo cp -p /data/etc/hosts /etc/hosts

$ diff /data/etc/hosts /etc/hosts

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost6 localhost6.localdomain6

編集前の状態に戻りました。

EBSボリュームのアンマウント

OS上でEBSボリュームをアンマウントします。

$ sudo umount /data

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        231M   68K  231M   1% /dev
tmpfs           241M     0  241M   0% /dev/shm
/dev/xvda1      7.9G  1.1G  6.7G  14% /

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
┗xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk
┗xvdf1 202:81   0   8G  0 part

/dataにマウントされていた /dev/xvdf1がアンマウントされました。

EBSボリュームのデタッチ

マネジメントコンソールでEC2を表示します。
左メニューのボリュームをクリックし、対象のEBSボリュームを選択します。
「アクション」 - 「Detach Volume」をクリックします。

「デタッチする」をクリックします。

EBSボリュームの削除

左メニューのボリュームをクリックし、対象のEBSボリュームを選択します。
「アクション」 - 「Delete Volume」をクリックします。

「はい、削除する」をクリックします。

EBSボリューム一覧から表示が消え、EBSボリュームが削除されました。

まとめ

ファイルを編集するときはOS内でコピーを取得してから実施したほうがよいですが、想定外の事象などでどうしてもバックアップ(スナップショット)からファイル単位でリストアしなければならないときは、こちらの復旧方法を検討してみてはいかがでしょうか。

また、Windowsの場合は、EBSボリュームをマウントする手順が異なりますが、その他は同様の手順で実施可能です。以下、WindowsでEBSボリュームをマウントする手順になります。
Windows で Amazon EBS ボリュームを使用できるようにする

小倉 大(記事一覧)

アプリケーションサービス部エデュケーションサービス課 札幌在住

AWSトレーニングの講師をしています。

最近は4歳の息子と遊ぶのが楽しいです!

Twitter: @MasaruOgura