Share via


暗号化されたデバイスで LVM と RAID を構成する

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

この記事では、暗号化されたデバイスで論理ボリューム管理 (LVM) と RAID を実行する方法について、手順を追って説明します。 このプロセスは、次の環境に適用されます。

  • Linux ディストリビューション
    • RHEL 7.6 以降
    • Ubuntu 18.04 以降
    • SUSE 12 以降
  • Azure Disk Encryption のシングルパス拡張機能
  • Azure Disk Encryption のデュアルパス拡張機能

シナリオ

この記事の手順では、次のシナリオをサポートしています。

  • 暗号化されたデバイスの上位に LVM を構成する (LVM-on-crypt)
  • 暗号化されたデバイスの上位に RAID を構成する (RAID-on-crypt)

基になる 1 台または複数台のデバイスが暗号化されたら、その暗号化されたレイヤーの上位に LVM または RAID 構造を作成できます。

物理ボリューム (PV) は、暗号化されたレイヤーの上位に作成されます。 物理ボリュームは、ボリューム グループの作成に使用されます。 ボリュームを作成し、必要なエントリを /etc/fstab に追加します。

LVM 構造のレイヤーの図

同様の方法で、RAID デバイスはディスク上の暗号化されたレイヤーの上位に作成されます。 ファイル システムは RAID デバイスの上位に作成され、通常のデバイスとして /etc/fstab に追加されます。

考慮事項

LVM-on-crypt を使用することをお勧めします。 RAID は、特定のアプリケーションまたは環境の制限のために LVM を使用できない場合のオプションです。

EncryptFormatAll オプションを使用します。 このオプションの詳細については、「Linux VM 上のデータ ディスクに対して EncryptFormatAll 機能を使用する」を参照してください。

OS も暗号化しているときにこの方法を使用できますが、ここではデータ ドライブを暗号化するだけです。

この手順では、「Linux VM での Azure Disk Encryption シナリオ」と「クイックスタート: Azure CLI を使用して Linux VM を作成、暗号化する」で前提条件を既に確認していることを前提としています。

Azure Disk Encryption のデュアルパス バージョンは非推奨のパスにあり、新しい暗号化では使用できません。

一般的な手順

"on-crypt" 構成を使用している場合は、次の手順に記載されているプロセスを使用します。

Note

この記事では、変数を使用しています。 値は適宜置き換えてください。

VM をデプロイする

次のコマンドは省略可能ですが、新しくデプロイされた仮想マシン (VM) に適用することをお勧めします。

PowerShell:

New-AzVm -ResourceGroupName ${RGNAME} `
-Name ${VMNAME} `
-Location ${LOCATION} `
-Size ${VMSIZE} `
-Image ${OSIMAGE} `
-Credential ${creds} `
-Verbose

Azure CLI:

az vm create \
-n ${VMNAME} \
-g ${RGNAME} \
--image ${OSIMAGE} \
--admin-username ${username} \
--admin-password ${password} \
-l ${LOCATION} \
--size ${VMSIZE} \
-o table

ディスクを VM に接続する

VM に接続する新しいディスク数 $N に応じて次のコマンドを繰り返します。

PowerShell:

$storageType = 'Standard_LRS'
$dataDiskName = ${VMNAME} + '_datadisk0'
$diskConfig = New-AzDiskConfig -SkuName $storageType -Location $LOCATION -CreateOption Empty -DiskSizeGB 5
$dataDisk1 = New-AzDisk -DiskName $dataDiskName -Disk $diskConfig -ResourceGroupName ${RGNAME}
$vm = Get-AzVM -Name ${VMNAME} -ResourceGroupName ${RGNAME}
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 0
Update-AzVM -VM ${VM} -ResourceGroupName ${RGNAME}

Azure CLI:

az vm disk attach \
-g ${RGNAME} \
--vm-name ${VMNAME} \
--name ${VMNAME}datadisk1 \
--size-gb 5 \
--new \
-o table

ディスクが VM に接続されていることを確認します。

PowerShell:

$VM = Get-AzVM -ResourceGroupName ${RGNAME} -Name ${VMNAME}
$VM.StorageProfile.DataDisks | Select-Object Lun,Name,DiskSizeGB

PowerShell での接続されているディスクの一覧

Azure CLI:

az vm show -g ${RGNAME} -n ${VMNAME} --query storageProfile.dataDisks -o table

Azure CLI での接続されているディスクの一覧

ポータル:

ポータルでの接続されているディスクの一覧

OS:

lsblk

OS での接続されているディスクの一覧

暗号化するディスクを構成する

この構成は、オペレーティング システム レベルで実行されます。 対応するディスクは、Azure Disk Encryption による従来の暗号化用に構成されています。

  • ファイル システムはディスクの上位に作成されます。
  • ファイル システムをマウントするために、一時マウント ポイントが作成されます。
  • ファイル システムは、起動時にマウントされるように /etc/fstab 上に構成されます。

新しいディスクに割り当てられているデバイス文字を確認します。 この例では、4 つのデータ ディスクを使用しています。

lsblk

OS に接続されているデータ ディスク

各ディスクの上位にファイル システムを作成する

このコマンドを使用すると、各ディスク上で、"for" サイクルの "in" 部分で定義された ext4 ファイル システムの作成が反復されます。

for disk in c d e f; do echo mkfs.ext4 -F /dev/sd${disk}; done |bash

ext4 ファイル システムの作成

最近作成したファイル システムの汎用一意識別子 (UUID) を見つけ、一時フォルダーを作成し、対応するエントリを /etc/fstab に追加して、すべてのファイル システムをマウントします。

このコマンドは、"for" サイクルの "in" 部分に定義されている各ディスクに対しても反復します。

for disk in c d e f; do diskuuid="$(blkid -s UUID -o value /dev/sd${disk})"; \
mkdir /tempdata${disk}; \
echo "UUID=${diskuuid} /tempdata${disk} ext4 defaults,nofail 0 0" >> /etc/fstab; \
mount -a; \
done

ディスクが正しくマウントされていることを確認する

lsblk

マウントされた一時ファイル システムの一覧

ディスクが構成されていることも確認します。

cat /etc/fstab

fstab を使用した構成情報

データ ディスクを暗号化する

キー暗号化キー (KEK) を使用する PowerShell:

$sequenceVersion = [Guid]::NewGuid()
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGNAME `
-VMName ${VMNAME} `
-DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl `
-DiskEncryptionKeyVaultId $KeyVaultResourceId `
-KeyEncryptionKeyUrl $keyEncryptionKeyUrl `
-KeyEncryptionKeyVaultId $KeyVaultResourceId `
-VolumeType 'DATA' `
-EncryptFormatAll `
-SequenceVersion $sequenceVersion `
-skipVmBackup;

KEK を使用する Azure CLI:

az vm encryption enable \
--resource-group ${RGNAME} \
--name ${VMNAME} \
--disk-encryption-keyvault ${KEYVAULTNAME} \
--key-encryption-key ${KEYNAME} \
--key-encryption-keyvault ${KEYVAULTNAME} \
--volume-type "DATA" \
--encrypt-format-all \
-o table

暗号化の状態を確認する

すべてのディスクが暗号化されている場合にのみ、次の手順に進みます。

PowerShell:

Get-AzVmDiskEncryptionStatus -ResourceGroupName ${RGNAME} -VMName ${VMNAME}

PowerShell の暗号化の状態

Azure CLI:

az vm encryption show -n ${VMNAME} -g ${RGNAME} -o table

Azure CLI の暗号化の状態

ポータル:

ポータルの暗号化の状態

OS レベル:

lsblk

OS の暗号化の状態

拡張機能によりファイル システムが /var/lib/azure_disk_encryption_config/azure_crypt_mount (以前の暗号化) または /etc/crypttab (新しい暗号化) に追加されます。

Note

これらのファイルは変更しないでください。

このファイルは、起動プロセス中にこれらのディスクをアクティブ化する処理を行い、後で LVM または RAID からそれらを使用できるようにします。

このファイルのマウント ポイントについて心配する必要はありません。 それらの暗号化されたデバイスの上位に物理ボリュームまたは RAID デバイスを作成した後、Azure Disk Encryption ではディスクを通常のファイル システムとしてマウントできなくなります (これにより、準備プロセス中に使用したファイル システム形式が削除されます)。

一時フォルダーと一時的な fstab エントリを削除する

LVM の一部として使用されるディスク上のファイル システムをマウント解除します。

for disk in c d e f; do umount /tempdata${disk}; done

また、/etc/fstab のエントリを削除します。

vi /etc/fstab

ディスクがマウントされていないこと、/etc/fstab のエントリが削除されたことを確認する

lsblk

一時ファイル システムがマウント解除されていることの確認

ディスクが構成されていることを確認します。

cat /etc/fstab

一時的な fstab エントリが削除されたことの確認

LVM-on-crypt の手順

基になるディスクが暗号化されたので、LVM 構造を作成できます。

デバイス名を使用するのではなく各ディスクの /dev/mapper パスを使用して (ディスク自体の上ではなく、ディスクの上位にある crypt レイヤー上に) 物理ボリュームを作成します。

暗号化されたレイヤーの上位に LVM を構成する

物理ボリュームを作成する

ファイル システムの署名を消去するかどうかを確認する警告が表示されます。 「y」を入力して続行するか、次のように「echo "y" 」を使用します。

echo "y" | pvcreate /dev/mapper/c49ff535-1df9-45ad-9dad-f0846509f052
echo "y" | pvcreate /dev/mapper/6712ad6f-65ce-487b-aa52-462f381611a1
echo "y" | pvcreate /dev/mapper/ea607dfd-c396-48d6-bc54-603cf741bc2a
echo "y" | pvcreate /dev/mapper/4159c60a-a546-455b-985f-92865d51158c

物理ボリュームが作成されたことの確認

注意

ここでは /dev/mapper/デバイス名を lsblk の出力に基づいて実際の値に置き換える必要があります。

物理ボリュームの情報を確認する

pvs

物理ボリュームに関する情報

ボリューム グループを作成する

既に初期化されている同じデバイスを使用してボリューム グループを作成します。

vgcreate vgdata /dev/mapper/

ボリューム グループの情報を確認する

vgdisplay -v vgdata
pvs

ボリューム グループの情報

論理ボリュームを作成する

lvcreate -L 10G -n lvdata1 vgdata
lvcreate -L 7G -n lvdata2 vgdata

作成した論理ボリュームを確認する

lvdisplay
lvdisplay vgdata/lvdata1
lvdisplay vgdata/lvdata2

論理ボリュームに関する情報

論理ボリュームの構造の上位にファイル システムを作成する

echo "yes" | mkfs.ext4 /dev/vgdata/lvdata1
echo "yes" | mkfs.ext4 /dev/vgdata/lvdata2

新しいファイル システムのマウント ポイントを作成する

mkdir /data0
mkdir /data1

新しいファイルシステムを /etc/fstab に追加してマウントする

echo "/dev/mapper/vgdata-lvdata1 /data0 ext4 defaults,nofail 0 0" >>/etc/fstab
echo "/dev/mapper/vgdata-lvdata2 /data1 ext4 defaults,nofail 0 0" >>/etc/fstab
mount -a

新しいファイル システムがマウントされていることを確認する

lsblk -fs
df -h

スクリーンショットには、data0 および data1 としてマウントされたファイル システムが表示されているコンソール ウィンドウが示されています。

この lsblk のバリエーションでは、依存関係を逆順にしてデバイスを一覧表示しています。 このオプションを使用すると、元の /dev/sd[disk] デバイス名ではなく、論理ボリューム別にグループ化されたデバイスを識別できます。

Azure Disk Encryption で暗号化されたデバイスの上位に作成された LVM ボリュームのマウント ポイント オプションに、nofail オプションが追加されていることを確認することが重要です。 起動プロセス中 (またはメンテナンス モード中) の OS の停止を防ぐことができます。

nofail オプションを使用しない場合:

  • Azure Disk Encryption が開始され、データ ディスクのロックが解除されてマウントされる段階に OS がなることはありません。
  • 暗号化されたディスクは、起動プロセスの最後にロック解除されます。 LVM ボリュームとファイル システムは、Azure Disk Encryption によってロックが解除されるまでに自動的にマウントされます。

VM の再起動をテストし、ファイル システムが起動後に自動的にマウントされるかどうかを検証できます。 ファイル システムの数とサイズによっては、このプロセスに数分かかることがあります。

VM を再起動し、再起動後に検証する

shutdown -r now
lsblk
df -h

RAID-on-crypt の手順

基になるディスクが暗号化されたので、引き続き RAID 構造を作成することができます。 このプロセスは LVM の場合と同じですが、デバイス名を使用するのではなく、各ディスクの /dev/mapper パスを使用します。

ディスクの暗号化されたレイヤーの上位に RAID を構成する

mdadm --create /dev/md10 \
--level 0 \
--raid-devices=4 \
/dev/mapper/c49ff535-1df9-45ad-9dad-f0846509f052 \
/dev/mapper/6712ad6f-65ce-487b-aa52-462f381611a1 \
/dev/mapper/ea607dfd-c396-48d6-bc54-603cf741bc2a \
/dev/mapper/4159c60a-a546-455b-985f-92865d51158c

mdadm コマンドを使用して構成された RAID の情報

注意

ここでは /dev/mapper/デバイス名を lsblk の出力に基づいて実際の値に置き換える必要があります。

RAID の作成を確認および監視する

watch -n1 cat /proc/mdstat
mdadm --examine /dev/mapper/[]
mdadm --detail /dev/md10

RAID の状態

新しい RAID デバイスの上位にファイル システムを作成する

mkfs.ext4 /dev/md10

ファイル システム用の新しいマウント ポイントを作成し、新しいファイル システムを /etc/fstab に追加してマウントします。

注意

このサイクルは、この特定の例の 1 つのデバイスでのみ繰り返されます。これは、必要に応じて複数の md デバイスで使用されるように、このように構築されています。

for device in md10; do diskuuid="$(blkid -s UUID -o value /dev/${device})"; \
mkdir /raiddata; \
echo "UUID=${diskuuid} /raiddata ext4 defaults,nofail 0 0" >> /etc/fstab; \
mount -a; \
done

新しいファイル システムがマウントされていることを確認します。

lsblk -fs
df -h

スクリーンショットには、raiddata としてマウントされているファイル システムが表示されたコンソール ウィンドウが示されています。

Azure Disk Encryption で暗号化されたデバイスの上位に作成された RAID ボリュームのマウント ポイント オプションに、nofail オプションが追加されていることを確認することが重要です。 起動プロセス中 (またはメンテナンス モード中) の OS の停止を防ぐことができます。

nofail オプションを使用しない場合:

  • Azure Disk Encryption が開始され、データ ディスクのロックが解除されてマウントされる段階に OS がなることはありません。
  • 暗号化されたディスクは、起動プロセスの最後にロック解除されます。 RAID ボリュームとファイル システムは、Azure Disk Encryption によってロックが解除されるまでに自動的にマウントされます。

VM の再起動をテストし、ファイル システムが起動後に自動的にマウントされるかどうかを検証できます。 ファイル システムの数とサイズによっては、このプロセスに数分かかることがあります。

shutdown -r now

ログインできるとき:

lsblk
df -h

次のステップ