githubixx.lvm
ansible-role-lvm
このAnsibleロールは、Linuxの論理ボリュームマネージャー (LVM) のリソースをインストールします。これには ボリュームグループ
(VG) や 論理ボリューム
(LV) の作成、ファイルシステム
の作成と マウントポイント
の管理が含まれます。
更新履歴
CHANGELOG を参照してください。
ロール変数
デフォルトでは、LVMリソースは作成されません。以下の例を参照してください。lvm_vgs
キーは作成するすべてのLVMリソースのエントリポイントです。
lvm_vgs: []
まず、LVMリソースの作成に関するいくつかの例を示します(削除の方法については下記参照)。
物理ボリューム /dev/vdb
を使用して test-vg-01
というボリュームグループ (VG) を作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
3つのパラメータは必須です! vgname はボリュームグループの名前です。 pvs はこのボリュームグループに使用する物理デバイスのリストです。 state はボリュームグループが存在するかどうかを制御します。
VGを削除するには、state: absent
と force: true
を指定する必要があります。これに対し、community.general.lvg モジュールの force
パラメータは、論理ボリュームを含むVGを削除することはありません!これは、データを誤って削除するのを防ぐためです。
物理ボリューム /dev/vdb
と /dev/vdc
を使用して test-vg-01
というボリュームグループ (VG) を作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb,/dev/vdc
state: present
現在、次の追加のcommunity.general.lvgパラメータがサポートされています:
前の例と同様ですが、論理ボリューム test-lv-01
を作成し、使用可能なVGスペースの 10%
を割り当てます:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
ボリュームグループに含まれるすべての論理ボリュームは、lvm_lvs
キーの下にリストされます。lvname
、size
、および state
パラメータは必須です! lvname は論理ボリュームの名前です。 sizeは論理ボリュームのサイズを指定します。デフォルトではメガバイト単位で、オプションで [bBsSkKmMgGtTpPeE] の単位が使用できます。 state は、論理ボリュームが存在するかどうかを制御します。LVを削除するには、state: absent
と force: true
を指定する必要があります。
現在、以下の追加のcommunity.general.lvolパラメータもサポートされています:
前の例と同様ですが、論理ボリューム test-lv-01
をデバイスとして使用して ext4
ファイルシステムを作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
fs
キーは、論理ボリュームにファイルシステムを含めるべきことを指定します。 type は使用するファイルシステムを指定します。 state: present
は、ファイルシステムがすでに存在しない場合は作成されることを示します。 state: absent
の場合、デバイスにファイルシステムが含まれている場合、その署名は消去されます(blkid
で知られているように)。 state: absent
の場合、デバイス以外のすべてのオプションは無視され、デバイスが実際に存在しなくてもモジュールは失敗しません。また、state: absent
の場合、force: true
が必要です。そうしないと、ファイルシステムは影響を受けません。 community.general.filesystem モジュールの force パラメータとは異なり、force: true
によって既存のファイルシステムが上書きされることはありません。新しいファイルシステムを作成するには、古いものを最初に消去する必要があります!これも誤って削除するのを避けるためです。
前の例と同様ですが、 /mnt1
ディレクトリを作成し、そこで ext4
ファイルシステムをマウントします。これにより /etc/fstab
にもエントリが作成されます(デフォルトで)。
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
mountpoint:
state: mounted
path:
name: /mnt1
mountpoint
キーは、マウントポイントに関連するアクションを管理します。 state は、ansible.posix.mount モジュールが提供するものと同じオプション (mounted
, absent
, present
, unmounted
, remounted
) を持っています。 state
と path.name
は必須です。 path.name
はマウントポイントとしてマウントされるディレクトリの名前を指定します。ディレクトリが存在しない場合は、自動的に作成されます。今後のオプションについては次の例を参照してください。
前の例と同様ですが、ファイルシステムにラベル mnt1
が追加されます。また、ファイルシステムは noatime
ファイルシステムオプションで /mnt1
にマウントされます。このファイルシステムは、ラベルを使用してマウントされます(src: LABEL=mnt1
)。 /mnt1
ディレクトリの owner
と group
は vagrant
に設定され、ディレクトリのパーミッションは 0750
になります:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
opts: -L mnt1
state: present
mountpoint:
opts: noatime
state: mounted
src: LABEL=mnt1
path:
name: /mnt1
mode: '0750'
owner: vagrant
group: vagrant
デフォルトでは、 mountpoint.src
は /dev/ + vgname + / + lvname
になります。上記の例では LABEL=mnt1
が使用されました。opts: -L mnt
では、そのラベルを持つファイルシステムを作成するオプションが提供されました。これにより、後で mountpoint.src
に使用できます。
mountpoint
は次の追加パラメータをサポートしています:
物理ボリューム /dev/vdb
と /dev/vdc
を使用して、test-vg-01
と test-vg-02
という2つのボリュームグループ (VG) を作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
- vgname: test-vg-02
pvs: /dev/vdc
state: present
マウントポイントをアンマウントし、/etc/fstab
からそのエントリを削除する例を示します:
mountpoint:
state: absent
path:
name: /vg01lv01
これはもちろん、マウントポイントがプログラムやサービスによって使用されていない場合のみ機能します。
ファイルシステム、論理ボリューム (LV) やボリュームグループ (VG) の削除はデータを破壊する可能性があるため、特に注意が必要です。この場合、リソースを削除するために state: absent
を指定するだけでは不十分です。 force: true
も必要です。当然のことながら、まだ論理ボリュームを含むボリュームグループを削除することは失敗します。また、ファイルシステムがある論理ボリュームを state: present
で削除することも失敗します。
以下の例では、指定されたマウントポイント(/vg02lv01
)をアンマウントし、/etc/fstab
からそのエントリを削除し、ext4
ファイルシステムを消去し、論理ボリューム (vg02lv01
) を削除し、最後にボリュームグループ (vg02
) を削除します(この順序で):
lvm_vgs:
- vgname: vg02
pvs: /dev/vdc
state: absent
force: true
lvm_lvs:
- lvname: vg02lv01
size: 10%VG
state: absent
force: true
fs:
type: ext4
state: absent
force: true
mountpoint:
state: absent
path:
name: /vg02lv01
ファイルシステムを作成するには、追加のパッケージが必要です。 ext(2|3|4)
の場合、e2fsprogs
パッケージをインストールする必要があります。したがって、設定したいファイルシステムに応じて、追加のパッケージをインストールしたり、必要ないパッケージをリストから削除したりする必要があります。もちろん、インストールするパッケージをリストに追加することもできます。
デフォルトでは、 ext(2|3|4)
または xfs
に必要なツールのみがインストールされます。他のファイルシステムの場合は、btrfsprogs/btrfs-progs
、dosfstools
、f2fs-tools
または reiserfsprogs
が必要になる場合があります:
# SuSE 互換のOS用の追加パッケージ
additional_packages_suse:
- e2fsprogs
- xfsprogs
# Debian 互換のOS用の追加パッケージ
additional_packages_debian:
- e2fsprogs
- xfsprogs
# Redhat 互換のOS用の追加パッケージ
additional_packages_redhat:
- e2fsprogs
- xfsprogs
# Archlinux 互換のOS用の追加パッケージ
additional_packages_arch:
- e2fsprogs
- xfsprogs
一般的に、次のモジュールのほとんどのオプションがサポートされています:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
依存関係
このロールは、いくつかのAnsibleモジュールに依存しています:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
TODO
現在、次の機能は実装されていません:
- ボリュームグループのサイズ変更
- 論理ボリュームの縮小
- 論理ボリュームのスナップショット
- 論理ボリューム/ファイルシステムのサイズ変更
例プレイブック
例1(ロールタグなし)
- hosts: your-host
roles:
- githubixx.lvm
例2(ロールにタグを割り当てる)
-
hosts: your-host
roles:
-
role: githubixx.lvm
tags: role-lvm
さらなる例
このロールのテストに使用されるいくつかの例があります。 molecule ディレクトリを参照してください。
テスト
このロールには、Molecule、libvirt(vagrant-libvirt)およびQEMU/KVMを使用して作成された小さなテストセットアップがあります。設定方法については、私のブログ投稿 Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM を参照してください。テスト構成は こちら です。
その後、moleculeを実行できます:
molecule converge -s kvm
これにより、サポートされているさまざまなLinuxオペレーティングシステムとさまざまなLVMリソースを持つ仮想マシン(VM)がいくつかセットアップされます。
クリーンアップを行うには、次のコマンドを実行します:
molecule destroy -s kvm