Vagrantを使っていろいろした後に、すぐに最初の状態に戻したいと思ったのでバックアップ周りを調べて試してみた
Vagrant packageとsnapshotの違い
vagrant のバックアップは2パターンあり、vagrant package は仮想VMをbox化し、
vagrant snapshot は仮想VMの状態を一時的に保存するみたいです。
- vagrant snapshot
- 同一ホストで仮想VMの状態を簡単に戻せる
- 仮想VMを削除するとスナップショットは削除される
- vagrant package
- 仮想VMを実行している環境をBoxファイル化するので、別のホストで再利用可能
- 仮想VMを削除しても復元可能
Vagrant packageとsnapshotのやり方
前提(共通)
vagrant snapshotも"vagrant snapshot"も以下は必須です。
- Vagrantfileがあるフォルダへ移動 ※XXX=適宜フォルダパスを指定
cd XXX
Vagrant スナップショット確認・作成・リストア手順
vagrant snapshotでスナップショットを作成・リストアする手順は以下です
スナップショット 確認
- Vagrantのスナップショット一覧を確認
vagrant snapshot list
スナップショット の作成
-
VMの状態確認
vagrant status
-
VMの停止が必要なので起動中なら停止
vagrant halt
-
Vagrantのスナップショット作成
vagrant snapshot save スナップショット名
-
Vagrantのスナップショット一覧を確認
vagrant snapshot list
スナップショット のリストア
- Vagrant スナップショットからリストア
vagrant snapshot restore スナップショット名
その他
- Vagrantでスナップショットの削除
※vagrant destroyしてしまうとスナップショットも削除されるので注意
vagrant snapshot delete スナップショット名
仮想VMのバックアップ(box化)を作成して復元する方法
vagrant packageでvagrant環境のboxをバックアップして復元する手順は以下です
バックアップファイルがないことを確認
- 拡張子.boxのファイルがないことを確認
ls
バックアップ作成
-
VMの状態確認
vagrant status
-
起動してたら停止
vagrant halt
-
boxのバックアップ作成 ※VMのdefaultが対象となる
vagrant package
-
VM名、バックアップファイル名を指定するパターンは以下
vagrant package VM名 --output バックアップファイル名.box
-
バックアップファイルの確認
ls
バックアップから復元
-
復元コマンド
vagrant box add 新規作成ボックス名 バックアップファイル名.box
-
boxを確認 ※復元したboxが追加されていること
vagrant box list
-
boxの設定ファイルを作る
vagrant init 新規作成ボックス名
-
boxを起動する
vagrant up
Vagrant packageとsnapshotを試してみる
Vagrant packageとsnapshotを実際に試して復元できるか確認してみます
事前準備
※以下手順は、Windows PowerShell で作業してますが、コマンドプロンプトでも同様
事前準備として、テスト環境を準備します。
-
TESTフォルダ作成
mkdir test cd .\test\
-
Boxファイル確認
test> vagrant box list
-
boxを追加
※テスト用で新規にcentos/8を追加test> vagrant box add centos/8 ==> box: Loading metadata for box 'centos/8' box: URL: https://vagrantcloud.com/centos/8 This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) libvirt 2) virtualbox Enter your choice: 2 ★「2」を選択 ==> box: Adding box 'centos/8' (v2011.0) for provider: virtualbox box: Downloading: https://vagrantcloud.com/centos/boxes/8/versions/2011.0/providers/virtualbox.box Download redirected to host: cloud.centos.org box: box: Calculating and comparing box checksum... ==> box: Successfully added box 'centos/8' (v2011.0) for 'virtualbox'! test>
-
Boxファイル確認
test> vagrant box list centos/8 (virtualbox, 2011.0) test>
-
VM確認
test> vagrant status Current machine states: default not created (virtualbox) The environment has not yet been created. Run `vagrant up` to create the environment. If a machine is not created, only the default provider will be shown. So if a provider is not listed, then the machine is not created for that environment. test>
-
Vagrantファイルを作成
test> vagrant init centos/8 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. test>
-
仮想VM起動
test> vagrant up Bringing machine 'default' up with 'virtualbox' provider... ~~略~~ test>
-
仮想VM確認
test> vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. test>
-
仮想VM接続してテストファイル作成
test> vagrant ssh [vagrant@localhost ~]$ ll total 0 [vagrant@localhost ~]$ touch ~/test [vagrant@localhost ~]$ ll total 0 -rw-rw-r--. 1 vagrant vagrant 0 Apr 1 08:13 test [vagrant@localhost ~]$ [vagrant@localhost ~]$ exit logout Connection to 127.0.0.1 closed. test>
-
仮想VM停止
test> vagrant halt ==> default: Attempting graceful shutdown of VM... test>
-
仮想VM確認
test> vagrant status Current machine states: default poweroff (virtualbox) The VM is powered off. To restart the VM, simply run `vagrant up` test>
Vagrant スナップショット確認・作成・リストア手順を試してみる
ここからスナップショットの作成からリストアを実際に試してみます。
※事前準備でテスト用環境を作成してください。
-
Vagrantのスナップショット一覧
test> vagrant snapshot list ==> default: No snapshots have been taken yet! default: You can take a snapshot using `vagrant snapshot save`. Note that default: not all providers support this yet. Once a snapshot is taken, you default: can list them using this command, and use commands such as default: `vagrant snapshot restore` to go back to a certain snapshot. test>
-
スナップショット の作成
test> vagrant snapshot save test_snapshot ==> default: Snapshotting the machine as 'test_snapshot'... ==> default: Snapshot saved! You can restore the snapshot at any time by ==> default: using `vagrant snapshot restore`. You can delete it using ==> default: `vagrant snapshot delete`. test>
-
Vagrantのスナップショット一覧確認
test> vagrant snapshot list ==> default: test_snapshot test>
-
VM内のテストファイルを削除
test> vagrant up Bringing machine 'default' up with 'virtualbox' provider... ~~略~~ test> vagrant ssh Last login: Sat Apr 1 08:22:34 2023 from 10.0.2.2 [vagrant@localhost ~]$ ll total 0 -rw-rw-r--. 1 vagrant vagrant 0 Apr 1 08:22 test [vagrant@localhost ~]$ rm test [vagrant@localhost ~]$ ll total 0 [vagrant@localhost ~]$ exit logout Connection to 127.0.0.1 closed. test>
-
VM停止
test> vagrant halt ==> default: Attempting graceful shutdown of VM... test> vagrant status Current machine states: default poweroff (virtualbox) The VM is powered off. To restart the VM, simply run `vagrant up` test>
-
スナップショット のリストア
test> vagrant snapshot restore test_snapshot ==> default: Restoring the snapshot 'test_snapshot'... ~~略~~ test>
-
リストアすると仮想VMが起動する
test> vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. test>
-
削除したファイルがリストで戻っているか確認
test> vagrant ssh Last login: Sat Apr 1 08:22:34 2023 from 10.0.2.2 [vagrant@localhost ~]$ ll total 0 -rw-rw-r--. 1 vagrant vagrant 0 Apr 1 08:22 test [vagrant@localhost ~]$ exit logout Connection to 127.0.0.1 closed. test>
スナップショットの削除
vagrant destroyするとスナップショットは、削除されるみたい
以下は、VMを削除してますが、特定スナップショットだけ削除したい場合は、
で削除できます。vagrant snapshot delete snapshot名
-
スナップショットがあることを確認
test> vagrant snapshot list ==> default: test_snapshot
-
仮想VM削除前
test> vagrant status Current machine states: default poweroff (virtualbox) The VM is powered off. To restart the VM, simply run `vagrant up`
-
仮想VMを削除
test> vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Destroying VM and associated drives... test> vagrant status Current machine states: default not created (virtualbox) The environment has not yet been created. Run `vagrant up` to create the environment. If a machine is not created, only the default provider will be shown. So if a provider is not listed, then the machine is not created for that environment.
-
スナップショットがなくなる
test> vagrant snapshot list ==> default: VM not created. Moving on... test>
vagrant環境のboxをバックアップを作成して復元する手順を試してみる
boxをバックアップを作成して復元する手順を試してみます。
※事前準備でテスト用環境を作成してください。
boxバックアップを作成して復元する
-
バックアップファイルの確認
test> ls Length Name ------ ---- .vagrant 3084 Vagrantfile test>
-
VMの状態確認
test> vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. test>
-
起動してたら停止
test> vagrant halt ==> default: Attempting graceful shutdown of VM... test>
-
boxのバックアップ作成
test> vagrant package default --output test_vm_backup.box ==> default: Clearing any previously set forwarded ports... ==> default: Exporting VM... ==> default: Compressing package to: E:/01_document/800_share/test/test/test_vm_backup.box test> ls Length Name ------ ---- .vagrant 910992820 test_vm_backup.box ★作成できている 3084 Vagrantfile test>
-
VM削除
test> vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Destroying VM and associated drives... test> vagrant status Current machine states: default not created (virtualbox) The environment has not yet been created. Run `vagrant up` to create the environment. If a machine is not created, only the default provider will be shown. So if a provider is not listed, then the machine is not created for that environment. test>
-
復元手順
test> vagrant box add test_box test_vm_backup.box ==> box: Box file was not detected as metadata. Adding it directly... ~~略~~ test> test> vagrant box list centos/8 (virtualbox, 2011.0) test_box (virtualbox, 0) ★追加されたBOX test>
-
vagrant 初期化(Vagrantfileの作成)
test> vagrant init test_box A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. test>
-
仮想VM起動
- boxの元にした仮想VMに作成したtestファイルがあることを確認
test> vagrant up Bringing machine 'default' up with 'virtualbox' provider... ~~略~~ test> vagrant ssh Last login: Sat Apr 1 08:30:50 2023 from 10.0.2.2 [vagrant@localhost ~]$ ll total 0 -rw-rw-r--. 1 vagrant vagrant 0 Apr 1 08:22 test [vagrant@localhost ~]$ logout Connection to 127.0.0.1 closed. test>
- boxの元にした仮想VMに作成したtestファイルがあることを確認
事後作業
検証で作成したデータは不要なので全部削除する
-
テストVMの削除
test> vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Forcing shutdown of VM... ==> default: Destroying VM and associated drives... test> test> vagrant status Current machine states: default not created (virtualbox) The environment has not yet been created. Run `vagrant up` to create the environment. If a machine is not created, only the default provider will be shown. So if a provider is not listed, then the machine is not created for that environment. test>
-
テストBOXの削除
test> vagrant box list centos/8 (virtualbox, 2011.0) test_box (virtualbox, 0) test> vagrant box remove test_box Removing box 'test_box' (v0) with provider 'virtualbox'... test> test> vagrant box list centos/8 (virtualbox, 2011.0) test>
-
テストディレクトリ削除
test> cd .. > > rm .\test\ >