58.8. 論理ボリュームのスナップショット


LVM スナップショット機能を使用すると、サービスを中断することなく、ある時点でのボリュームの仮想イメージ (/dev/sda など) を作成できます。

58.8.1. スナップショットボリュームの概要

スナップショットを作成した後で元のボリューム (スナップショットの元になるボリューム) を変更すると、スナップショット機能は、ボリュームの状態を再構築できるように、変更前の変更されたデータ領域のコピーを作成します。スナップショットを作成しても、作成元への完全な読み取り/書き込みのアクセスは引き続き可能です。

スナップショットは、スナップショットの作成後に変更したデータ部分のみをコピーするため、スナップショット機能に必要なストレージは最小限になります。たとえば、コピー元がほとんど更新されない場合は、作成元の 3 ~ 5 % の容量があれば十分にスナップショットを維持できます。バックアップ手順に代わるものではありません。スナップショットコピーは仮想コピーであり、実際のメディアバックアップではありません。

作成元のボリュームへの変更を保管するために確保する領域は、スナップショットのサイズによって異なります。たとえば、スナップショットを作成してから作成元を完全に上書きする場合に、その変更の保管に必要なスナップショットのサイズは、作成元のボリュームと同等か、それ以上になります。スナップショットのサイズは定期的に監視する必要があります。たとえば、/usr など、その大部分が読み取り用に使用されるボリュームの短期的なスナップショットに必要な領域は、/home のように大量の書き込みが行われるボリュームの長期的なスナップショットに必要な領域よりも小さくなります。

スナップショットが満杯になると、作成元のボリュームの変更を追跡できなくなるため、そのスナップショットは無効になります。ただし、スナップショットが無効になるのを防ぐために、使用量が snapshot_autoextend_threshold 値を超えるたびにスナップショットを自動的に拡張するように LVM を設定できます。スナップショットは完全にサイズ変更可能で、次の操作を実行できます。

  • ストレージ容量に余裕がある場合は、スナップショットボリュームのサイズを大きくして、削除されないようにすることができます。
  • スナップショットのボリュームサイズが必要以上に大きければ、そのボリュームのサイズを縮小して、他の論理ボリュームで必要となる領域を確保できます。

スナップショットボリュームには、次の利点があります。

  • 最も一般的な用途は、継続的にデータを更新している稼動中のシステムを停止せずに、論理ボリューム上でバックアップを実行する必要がある場合にスナップショットを撮ることです。
  • スナップショットファイルシステムで fsck コマンドを実行し、ファイルシステムの整合性をチェックすれば、複製元のファイルシステムを修復する必要があるかどうかを判断できます。
  • スナップショットは読み取りおよび書き込み用であるため、スナップショットを撮ってそのスナップショットにテストを実行することにより、実際のデータに触れることなく、実稼働データにアプリケーションのテストを実行できます。
  • LVM ボリュームを作成して、Red Hat の仮想化と併用することが可能です。LVM スナップショットを使用して、仮想ゲストイメージのスナップショットを作成できます。このスナップショットは、最小限のストレージを使用して、既存のゲストの変更や新規ゲストの作成を行う上で利便性の高い方法を提供します。

58.8.2. コピーオンライトスナップショットの作成

作成時には、Copy-on-Write (COW) スナップショットにはデータが含まれません。代わりに、スナップショット作成時における元の LV のデータブロックを参照します。元のボリュームのデータが変更されると、COW システムは変更が行われる前に、元の変更されていないデータをスナップショットにコピーします。この方法では、変更が発生した場合にのみスナップショットのサイズが増加し、スナップショット作成時における元のボリュームの状態が保存されます。COW スナップショットは、短期間のバックアップやデータの変更が最小限の状況に効果的で、特定の時点をキャプチャーして復元するためのスペースを節約する方法を提供します。COW スナップショットを作成するときは、元のボリュームに予想される変更に基づいて、十分なストレージを割り当てます。

スナップショットを作成する前に、ストレージ要件とスナップショットの想定される有効期間を考慮することが重要です。スナップショットのサイズは、意図された有効期間中の変更をキャプチャーするのに十分な大きさである必要がありますが、元の LV のサイズを超えることはできません。変更頻度が低いと予想される場合は、10% - 15% の小さいスナップショットサイズで十分な場合があります。変更頻度が高い LV の場合は、30% 以上を割り当てる必要がある場合があります。

スナップショットのストレージ使用率を定期的に監視することが重要です。スナップショットに割り当てられている領域の 100% に達すると、スナップショットが無効になります。lvs コマンドを使用してスナップショットに関する情報を表示できます。

スナップショットが完全にいっぱいになる前に拡張することが重要です。これは、lvextend コマンドを使用して手動で実行できます。または、/etc/lvm/lvm.conf ファイルで snapshot_autoextend_threshold および snapshot_autoextend_percent パラメーターを設定して自動拡張を設定することもできます。この設定により、dmeventd は 使用量が定義されたしきい値に達したときにスナップショットを自動的に拡張できるようになります。

COW スナップショットを使用すると、スナップショットが作成された時点のファイルシステムの読み取り専用バージョンにアクセスできます。これにより、元のファイルシステムで進行中の操作を中断することなく、バックアップやデータ分析が可能になります。スナップショットがマウントされ使用されている間も、元の論理ボリュームとそのファイルシステムは引き続き更新され、正常に使用できます。

次の手順では、ボリュームグループ vg001 から origin という名前の論理ボリュームを作成し、その snap という名前のスナップショットを作成する方法を説明します。

前提条件

手順

  1. ボリュームグループ vg001 から、論理ボリューム origin を作成します。

    # lvcreate -L 1G -n origin vg001
  2. サイズが 100 MB/dev/vg001/origin LV の snap という名前のスナップショットを作成します。

    # lvcreate --size 100M --name snap --snapshot /dev/vg001/origin
  3. 元のボリュームと、使用されているスナップショットボリュームの現在の割合を表示します。

    # lvs -a -o +devices
      LV      VG    Attr       LSize  Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
     origin vg001  owi-a-s---  1.00g                                                  /dev/sde1(0)
      snap vg001  swi-a-s--- 100.00m     origin 0.00                                 /dev/sde1(256)

関連情報

  • システム上の lvcreate (8)lvextend (8)、および lvs (8) の man ページ
  • /etc/lvm/lvm.conf ファイル

58.8.3. スナップショットと元のボリュームのマージ

--merge オプションを指定して lvconvert コマンドを使用し、スナップショットを元のボリューム (作成元) にマージします。データやファイルを失った場合や、システムを以前の状態に復元する必要がある場合に、システムのロールバックを実行できます。スナップショットボリュームをマージすると、作成された論理ボリュームには、元のボリュームの名前、マイナー番号、および UUID が含まれます。マージの進行中、作成元に対する読み取りまたは書き込みは、マージ中のスナップショットに対して実行されているかのように見えます。マージが完了すると、マージされたスナップショットは削除されます。

作成元のボリュームとスナップショットボリュームの両方が起動されておらず、アクティブでない場合、マージはすぐに開始されます。それ以外の場合は、作成元またはスナップショットのいずれかがアクティブ化され、両方が閉じられた後にマージが開始されます。スナップショットを閉じることができない作成元 (root ファイルシステムなど) にマージできるのは、作成元のボリュームがアクティブ化された後です。

手順

  1. スナップショットボリュームをマージします。以下のコマンドは、スナップショットボリューム vg001/snap をその 作成元 にマージします。

    # lvconvert --merge vg001/snap
    Merging of volume vg001/snap started.
      vg001/origin: Merged: 100.00%
  2. 元のボリュームを表示します。

    # lvs -a -o +devices
      LV      VG    Attr       LSize  Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
      origin vg001  owi-a-s---  1.00g                                                  /dev/sde1(0)

関連情報

  • システム上の lvconvert(8) man ページ

58.8.4. snapshot RHEL システムロールを使用して LVM スナップショットを作成する

新しい snapshot RHEL システムロールを使用すると、LVM スナップショットを作成できます。また、snapshot_lvm_action パラメーターを check に設定すると、このシステムロールにより、作成したスナップショットに十分な領域があるかどうか、名前が競合していないかどうかがチェックされます。作成したスナップショットをマウントするには、snapshot_lvm_actionmount に設定します。

次の例では、nouuid オプションが設定されています。これは XFS ファイルシステムを扱う場合にのみ必要です。XFS では、同じ UUID を持つ複数のファイルシステムを同時にマウントすることはサポートされていません。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Run the snapshot system role
      hosts: managed-node-01.example.com
      vars:
        snapshot_lvm_set:
          name: snapset1
          volumes:
            - name: data1 snapshot
              vg: data_vg
              lv: data1
              percent_space_required: 25
              mountpoint: /data1_snapshot
              options: nouuid
              mountpoint_create: true
            - name: data2 snapshot
              vg: data_vg
              lv: data2
              percent_space_required: 25
              mountpoint: /data2_snapshot
              options: nouuid
              mountpoint_create: true
      tasks:
        - name: Create a snapshot set
          ansible.builtin.include_role:
            name: rhel-system-roles.snapshot
          vars:
            snapshot_lvm_action: snapshot
        - name: Verify the set of snapshots for the LVs
          ansible.builtin.include_role:
            name: rhel-system-roles.snapshot
          vars:
            snapshot_lvm_action: check
            snapshot_lvm_verify_only: true
        - name: Mount the snapshot set
          ansible.builtin.include_role:
            name: rhel-system-roles.snapshot
          vars:
            snapshot_lvm_action: mount

    この場合、snapshot_lvm_set パラメーターは、同じボリュームグループ (VG) からの特定の論理ボリューム (LV) を示しています。このパラメーターを設定する際に、異なる VG からの LV を指定することもできます。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードで、作成されたスナップショットを表示します。

    # lvs
      LV             VG       Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      data1          data_vg owi-a-s---   1.00g
      data1_snapset1 data_vg swi-a-s--- 208.00m      data1  0.00
      data2          data_vg owi-a-s---   1.00g
      data2_snapset1 data_vg swi-a-s--- 208.00m      data2  0.00
  • 管理対象ノードで、/data1_snapshot/data2_snapshot の存在を確認して、マウント操作が成功したかどうかを確認します。

    # ls -al /data1_snapshot
    # ls -al /data2_snapshot

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.snapshot/README.md ファイル
  • /usr/share/doc/rhel-system-roles/snapshot/ ディレクトリー

58.8.5. snapshot RHEL システムロールを使用して LVM スナップショットをアンマウントする

snapshot_lvm_action パラメーターを umount に設定することで、特定のスナップショットまたはすべてのスナップショットをアンマウントできます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している。
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • スナップショットセットに <_snapset1_> という名前を使用してスナップショットを作成した。
  • snapshot_lvm_actionmount に設定してスナップショットをマウントしたか、手動でスナップショットをマウントした。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    • 特定の LVM スナップショットをアンマウントします。

      ---
      - name: Unmount the snapshot specified by the snapset
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_snapset_name: snapset1
          snapshot_lvm_action: umount
          snapshot_lvm_vg: data_vg
          snapshot_lvm_lv: data2
          snapshot_lvm_mountpoint: /data2_snapshot
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_lv パラメーターは特定の論理ボリューム (LV) を表し、snapshot_lvm_vg パラメーターは特定のボリュームグループ (VG) を示しています。

    • LVM スナップショットのセットをアンマウントします。

      ---
      - name: Unmount a set of snapshots
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_action: umount
          snapshot_lvm_set:
            name: snapset1
            volumes:
              - name: data1 snapshot
                vg: data_vg
                lv: data1
                mountpoint: /data1_snapshot
              - name: data2 snapshot
                vg: data_vg
                lv: data2
                mountpoint: /data2_snapshot
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_set パラメーターは、同じ VG からの特定の LV を示しています。このパラメーターを設定する際に、異なる VG からの LV を指定することもできます。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.snapshot/README.md ファイル
  • /usr/share/doc/rhel-system-roles/snapshot/ ディレクトリー

58.8.6. snapshot RHEL システムロールを使用して LVM スナップショットを拡張する

新しい snapshot RHEL システムロールを使用して、snapshot_lvm_action パラメーターを extend に設定することで、LVM スナップショットを拡張できるようになりました。snapshot_lvm_percent_space_required パラメーターを、スナップショットを拡張した後に割り当てる必要な領域に設定できます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している。
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 特定のボリュームグループおよび論理ボリュームのスナップショットを作成した。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    • percent_space_required パラメーターの値を指定して、すべての LVM スナップショットを拡張します。

      ---
      - name: Extend all snapshots
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_action: extend
          snapshot_lvm_set:
            name: snapset1
            volumes:
              - name: data1 snapshot
                vg: data_vg
                lv: data1
                percent_space_required: 40
              - name: data2 snapshot
                vg: data_vg
                lv: data2
                percent_space_required: 40
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_set パラメーターは、同じ VG からの特定の LV を示しています。このパラメーターを設定する際に、異なる VG からの LV を指定することもできます。

    • セット内の VG と LV のペアごとに percent_space_required を異なる値に設定して、LVM スナップショットセットを拡張します。

      ---
      - name: Extend the snapshot
        hosts: managed-node-01.example.com
        vars:
          snapshot_extend_set:
            name: snapset1
            volumes:
              - name: data1 snapshot
                vg: data_vg
                lv: data1
                percent_space_required: 30
              - name: data2 snapshot
                vg: data_vg
                lv: data2
                percent_space_required: 40
        tasks:
          - name: Extend data1 to 30% and data2 to 40%
            vars:
              snapshot_lvm_set: "{{ snapshot_extend_set }}"
              snapshot_lvm_action: extend
            ansible.builtin.include_role:
              name: rhel-system-roles.snapshot
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードで、30% 拡張されたスナップショットを表示します。

    # lvs
      LV             VG       Attr        LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      data1          data_vg  owi-a-s---   1.00g
      data1_snapset1 data_vg  swi-a-s--- 308.00m       data1  0.00
      data2          data_vg  owi-a-s---   1.00g
      data2_snapset1 data_vg1 swi-a-s--- 408.00m       data2  0.00

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.snapshot/README.md ファイル
  • /usr/share/doc/rhel-system-roles/snapshot/ ディレクトリー

58.8.7. snapshot RHEL システムロールを使用して LVM スナップショットを元に戻す

新しい snapshot RHEL システムロールを使用して、snapshot_lvm_action パラメーターを revert に設定することで、LVM スナップショットを元のボリュームに戻すことができます。

注記

論理ボリュームとスナップショットボリュームの両方が開いておらずアクティブでない場合は、元に戻す操作がすぐに開始されます。そうでない場合は、元のボリュームまたはスナップショットがアクティブ化され、両方が閉じられた後に元に戻す操作が開始されます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している。
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • スナップセット名として <_snapset1_> を使用して、特定のボリュームグループおよび論理ボリュームのスナップショットを作成した。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    • 特定の LVM スナップショットを元のボリュームに戻します。

      ---
      - name: Revert a snapshot to its original volume
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_snapset_name: snapset1
          snapshot_lvm_action: revert
          snapshot_lvm_vg: data_vg
          snapshot_lvm_lv: data2
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_lv パラメーターは特定の論理ボリューム (LV) を表し、snapshot_lvm_vg パラメーターは特定のボリュームグループ (VG) を示しています。

    • LVM スナップショットのセットを元のボリュームに戻します。

      ---
      - name: Revert a set of snapshot
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_action: revert
          snapshot_lvm_set:
            name: snapset1
            volumes:
              - name: data1 snapshot
                vg: data_vg
                lv: data1
              - name: data2 snapshot
                vg: data_vg
                lv: data2
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_set パラメーターは、同じ VG からの特定の LV を示しています。このパラメーターを設定する際に、異なる VG からの LV を指定することもできます。

      注記

      revert 操作は、完了するまでに時間がかかる場合があります。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml
  4. ホストを再起動するか、次の手順に従って論理ボリュームを非アクティブ化してから再アクティブ化します。

    $ umount /data1; umount /data2
    
    $ lvchange -an data_vg/data1 data_vg/data2
    
    $ lvchange -ay data_vg/data1 data_vg/data2
    
    $ mount /data1; mount /data2

検証

  • 管理対象ノードで、元に戻したスナップショットを表示します。

    # lvs
      LV    VG       Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      data1 data_vg -wi-a----- 1.00g
      data2 data_vg -wi-a----- 1.00g

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.snapshot/README.md ファイル
  • /usr/share/doc/rhel-system-roles/snapshot/ ディレクトリー

58.8.8. snapshot RHEL システムロールを使用して LVM スナップショットを削除する

新しい snapshot RHEL システムロールを使用して、スナップショットの接頭辞またはパターンを指定し、snapshot_lvm_action パラメーターを remove に設定することで、すべての LVM スナップショットを削除できます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している。
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • スナップセット名として <_snapset1_> を使用して、特定のスナップショットを作成した。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    • 特定の LVM スナップショットを削除します。

      ---
      - name: Remove a snapshot
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_snapset_name: snapset1
          snapshot_lvm_action: remove
          snapshot_lvm_vg: data_vg
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_vg パラメーターは、ボリュームグループ (VG) からの特定の論理ボリューム (LV) を示しています。

    • LVM スナップショットのセットを削除します。

      ---
      - name: Remove a set of snapshots
        hosts: managed-node-01.example.com
        vars:
          snapshot_lvm_action: remove
          snapshot_lvm_set:
            name: snapset1
            volumes:
              - name: data1 snapshot
                vg: data_vg
                lv: data1
              - name: data2 snapshot
                vg: data_vg
                lv: data2
        roles:
          - rhel-system-roles.snapshot

      この場合、snapshot_lvm_set パラメーターは、同じ VG からの特定の LV を示しています。このパラメーターを設定する際に、異なる VG からの LV を指定することもできます。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.snapshot/README.md ファイル
  • /usr/share/doc/rhel-system-roles/snapshot/ ディレクトリー
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.