Proxmox VEを用いたバックアップ手順と復元(Ubuntu)

いつか、こうなると分かっていました。。。
面倒だからとUbuntuのバックアップとってなかったのです。
1. 試しにミニPCにUbuntuインストール
1. 思ったより使いやすかったから、いろんなことしてみよう
1. 手順とかパスとかも保存しておこう
1. このツール便利だからインストールしておこう
1. おっ、アプデ来てる→ポチッとな→あれ再起動しないな
1. データ全部消えちゃった。。。

なにかしらで復元できたのかもしれませんが、バックアップの取得は以前から考えていたので実行してみます！
Proxmoxにも慣れたかったので、仮想マシンを作成してUbuntu Serverをインストールしてバックアップを保存してみました。


## 登場人物と環境
- PC-A：Ubuntuをインストール済(Ubuntu 22.04.4 LTS)
データが消えてしまった端末くん
そして、データが消えても復元できるようにするマン
- PC-B：ProxmoxVE(8.3.1)→仮想マシンにUbuntu Serverをインストール済(Ubuntu 24.04.1 LTS)
バックアップを保存しておく端末くん

- 端末A、端末B、UbuntuSVは同じネットワーク内に存在します。

## バックアップファイルの作成
今回は
- ``/etc``ディレクトリ(システム全体の設定や構成ファイル)
- ``home``ディレクトリ(各ユーザーのデータ、設定、プロファイル情報)

のバックアップを作成します。

それではPC-Aでターミナルを開いてコマンドを入力します。
- ``sudo tar -czvf 【保存先のフルパス/保存したいファイル名.tar.gz】 /etc``
例：``sudo tar -czvf ~/etc-backup-Ubuntu-yymmdd.tar.gz /etc``
- ``sudo tar -czvf 【保存先のフルパス/保存したいファイル名.tar.gz】 /home``
例：``sudo tar -czvf ~/home-backup-Ubuntu-yymmdd.tar.gz /home``

実行後はlsコマンドでバックアップが作成されていることを確認します。

## バックアップファイルの転送
端末Aのターミナルより、作成したUbuntuSVにバックアップファイルを転送します。
事前にUbuntuSV側でディレクトリを作成しておきます。
- ``scp ~/etc-backup-Ubuntu-【yyyyddmm】.tar.gz 【UbuntuSVのユーザー名】@【UbuntuSVのIPアドレス】:/【保存先のディレクトリパス】``
例：scp ~/etc-backup-Ubuntu-【yyyyddmm】.tar.gz 【UbuntuSVのユーザー名】@【UbuntuSVのIPアドレス】:/backup/Ubuntu-Dtop-backups/

- ``scp ~/home-backup-Ubuntu-【yyyyddmm】.tar.gz 【UbuntuSVのユーザー名】@【UbuntuSVのIPアドレス】:/【保存先のディレクトリパス】``
例：scp ~/home-backup-Ubuntu-【yyyyddmm】.tar.gz 【UbuntuSVのユーザー名】@【UbuntuSVのIPアドレス】:/backup/Ubuntu-Dtop-backups/

## (Ubuntuのクリーンインストール実行)
今回はクリーンインストールを行いますが、何らかの理由でUbuntuのデータが消えたと想定しています。
ここからは「データ消えちゃった！けどバックアップあるから大丈夫〜♪」のシナリオです。

## 新環境へのバックアップファイル転送
端末Aよりターミナルを開いてコマンドを入力します。
データが消える前にUbuntuSV(Proxmox VEの仮想マシン)に保存しておいたバックアップを持ってくるイメージですね。


``scp 【UbuntuSVのユーザー名】@【UbuntuSVのIPアドレス】:/backup/Ubuntu-Dtop-backups/etc-backup-Ubuntu-【yyyyddmm】.tar.gz ~/``
``scp 【UbuntuSVのユーザー名】@【UbuntuSVのIPアドレス】:/backup/Ubuntu-Dtop-backups/home-backup-Ubuntu-【yyyyddmm】.tar.gz ~/``

実行後は``ls``コマンドで確認してあげると確実ですね。

## バックアップファイルの復元
転送してきた/etc ディレクトリと /home ディレクトリのバックアップをそれぞれシステムに復元します。
``sudo tar -xzvf ~/etc-backup-Ubuntu-【yyyyddmm】.tar.gz -C /``
``sudo tar -xzvf ~/home-backup-Ubuntu-【yyyyddmm】.tar.gz -C /``

反映させるためにシステムを再起動します。
``reboot``

## 再起動時のトラブルシューティング

再起動がうまくいかないみたいです。。。
クリーンインストールが原因なのかも？
![再起動できない.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3803710/889e39f3-9ce2-c19a-e54d-9d02332f0369.jpeg)
1. 何もできないので電源を落として、再起動します。
1. F7キーを押して設定画面に移動するか、勝手に移動するので``Advansed options for Ubuntu``を選択します。(今回は勝手に移動してくれました。)
1. (recovery mode)を選択します。
![07061D71-DBDD-4727-9F54-C72F7F1AB7A3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3803710/c496c538-417e-25c6-d331-b06c912f353b.jpeg)
1. ``root``を選択します。
![root.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3803710/77b563d6-0449-ce0a-8e9a-c20e925c346e.jpeg)
ここからシェルを利用してシステムにアクセスできるようになります。
1. ``fsck -f``を実行します。
``fsck.ext4: Unable to resolve 'UUID=○○○○○○'``と出力されます。
このUUIDに問題があるようです。
1. ``blkid``を実行しブロックデバイスのUUIDを取得します。
1. ``/etc/fstab``を編集するために``mount -o remount,rw /dev/nvme0n1p2 /``を実行します。
1. ``nano /etc/fstab``を実行し、``fsck -f``で出力されたUUIDを``blkid``で出力されたUUIDに変更します。(どこを編集すればいいか分からないときは、``ext4``を探します。)
例：UUID=123456ab-12ab-1234-1234-123456abcdef /   ext4  defaults 0  1
1. 変更が保存できたら、``reboot``を実行します。

以上です。

## 最後に
当たり前のことですが、バックアップは大事ですね〜。
自宅の環境だからと甘く見ていました。
結果的には良い経験でした！
Proxmoxも触れたし満足です。
今後はバックアップデータのセキュリティ的な部分にも触れていきたいなと思います！