こんにちは、マネージドサービス課の小倉です。
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トレーニングの講師をしています。
最近は5歳の息子と遊ぶのが楽しいです!
Twitter: @MasaruOgura