Vagrant

windows10のVagrantでSnapshotとpackageをするやり方について

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>

事後作業

検証で作成したデータは不要なので全部削除する

  • テスト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\
    >

人気記事

1

Kubernetes kubectl rollout コマンドでdeploymentをロールバックしてみる 概要 kubectl rollout コマンドでデプロイ履歴を確認してロールバックするやり方 ...

2

  terraformのバージョン管理どうすればいいのか? terraformの複数バージョンを簡単に動かしたい terraformのインストール方法が分からない と、疑問を抱えている人の疑 ...

3

本記事では どんな環境にterraformをインストールできるの? terraformのインストールどうしたらいいの? terraformのどのバージョンをインストールすればいいの? と、困っている人 ...

4

Kubernetes kubectl version コマンドでバージョンを調べてみる 概要 kubectl version は、Kubernetes の Client、Serverのバージョンを確認 ...

-Vagrant