Virtual Data Optimizer(VDO)とは
VDOとは、記憶域上に保存するデータを、よりスペース効率よく保存するための機能を提供してくれるソフトウェアです。 エンタープライズのストレージにおいてメジャーな、次の機能が実装出来ると考えてください。- シンプロビジョニング
- 重複排除
- 圧縮
ブロックデバイス上に配置されたファイルシステムに対してVDOの機能を提供するのは勿論、
LVMによって制御されているブロックデバイスやiSCSIストレージ上のLUNに対してもこの機能を提供可能です。
なお、シンプロビジョニングだけに関して言えば、他の機能で”Stratis"と呼ばれる機能でも実装が可能です。
重複排除や圧縮を使いたい場合は、VDOなのかもしれません。
SANストレージ側で同様の機能持ってる場合は、流石に併用はしないだろうなとは思いますが。
1. VDOボリュームの作成
まず、現在の構成を確認します。# 現在の各ブロックデバイスの様子を確認 (sdbとsdcにvdoを適用します)
lsblk
# vdoが構成された領域の一覧表示 (現在は未構成のため何も表示されません)
vdo list
# vdoを対象デバイス上に構成する際のコマンド
vdo create --name "vdoボリューム名" --device "対象のデバイス" --vdoLogicalSize "vdoの最大サイズ" --vdoSlabSize "スラブサイズ" --force
実行例 vdo create --name vdo1 --device /dev/sdb --vdoLogicalSize 100G --vdoSlabSize 1G --force
実行例 vdo create --name vdo2 --device /dev/sdc --vdoLogicalSize 100G --vdoSlabSize 1G --force
スラブサイズにはVDO内でに存在する分割されたデータ域のサイズの事です。詳細についてはこちらをご確認ください。
VDO のスラブサイズ - Red Hat
構成が完了した場合のlsblkとvdo listの比較をしてみましょう。(本ページ内1つ目の画像と見比べて見てください)
lsblkでは、sdbやsdcはそれぞれ20GBのサイズのブロックデバイスですが、その配下に100GBのvdoがそれぞれ構成されている事が分かります。(つまりシンプロビジョニング構成)
またvdo listコマンドでは2つのvdo デバイスが認識されています。
2. VDOボリュームのマウント
/mnt配下にvdo1とvdo2というマウントポイントを作成済みです。(mkdirにて) マウントするためにはフォーマットが必要なので、ext4でフォーマットします。その後mountコマンドでマウントします。# ext4でvdo1をフォーマットする
mkfs.ext4 /dev/mapper/vdo1
# 作成したext4でフォーマット済みのvdoデバイスを、/mnt配下のディレクトリへマウントする
mount /dev/mapper/vdo1 /mnt/vdo1
以下の図は、上記のコマンドを実行した結果です。
同様の作業をvdo2に対しても行います。(上記コマンドで、vdo1の箇所をvdo2に読み替えましょう)
2つのvdoデバイスのマウントを終えましたので、lsblkとdfでマウント状況と容量を確認してみました。
lsblk側では、vdo1とvdo2の容量が100GBずつ且つそれぞれが/mnt配下のディレクトリにマウントされていることが確認出来ました。
df -hでは、100GBのうちvdoデバイスとしての構成情報を保存するために2GB程度のオーバーヘッドが消費されていることが確認出来ました。
最後は、/etc/fstabへの永続マウント設定を忘れないようにしましょう。以下設定後再起動を実施。
おや・・・正しく設定をしたはずですがEmergency Modeで上がってきました。
そこでオンラインマニュアル内を確認すると次の記述が確認出来ました。どうやらfstab内の記述が少々他と違うようです。
結構下の方までスクロールしました。
man vdo
なので、man上の記述例をコピーして、後々/etc/fstab内にペーストしました。これで間違いなく正しく入力出来るでしょう。
実際に記述をしたファイルがこちらです。
この後再起動しましたが、問題なくCentOSが起動してきました。
ちなみに以下のページでも上記のfstab記述については言及がありました。
VDO ボリュームのマウント - Red Hat
3. VDOの圧縮率を見てみる
実際手元で重複排除と圧縮の効果を確認しようかと思ったのですが、いい題材が思いつかなかったのでYoutubeより抜粋 画面の左側はVDO未使用、画面の右側はVDOを使用している環境です。どちらも25GBのボリュームに対して、Linuxカーネルの歴代のソースコードをWriteし続けている作業です。
右下にはvdostatsの行として、25GBの領域に対して、4.2GBだけを使ってこのソースコード全てを圧縮して保存している記述が見受けられます。VDOボリュームとしては250GBとして構成し、29GBのデータを入れているのですが、VDOによる容量節約機能で僅か4GBしか消費していないわけです。つまり29GB-4.2GBで、大凡25GB程度得をしているわけですね。
RHEL 8 Beta - Using the Virtual Data Optimizer (VDO)