Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

31.3.2. VDO 等価性のテスト

2.VDO ボリュームへの読み取りおよび作成のテスト

  1. 32 GB のランダムデータを VDO ボリュームに書き込みます。
    $ dd if=/dev/urandom of=/mnt/VDOVolume/testfile bs=4096 count=8388608
    
  2. VDO ボリュームからデータを読み込み、VDO ボリュームにない別の場所に書き込みます。
    $ dd if=/mnt/VDOVolume/testfile of=/home/user/testfile bs=4096
    
  3. diff を使用して 2 つのファイルを比較します。このファイルは、同じであることを報告します。
    $ diff -s /mnt/VDOVolume/testfile /home/user/testfile
    
  4. VDO ボリュームの 2 番目の場所にファイルをコピーします。
    $ dd if=/home/user/testfile of=/mnt/VDOVolume/testfile2 bs=4096
    
  5. 3 番目のファイルと 2 番目のファイルを比較します。これにより、ファイルが同じであることを報告するはずです。
    $ diff -s /mnt/VDOVolume/testfile2 /home/user/testfile
    

3.VDO ボリュームの削除

  1. VDO ボリュームに作成されたファイルシステムをアンマウントします。
    # umount /mnt/VDOVolume
  2. 以下のコマンドを実行して、システムから VDO ボリューム vdo0 を削除します。
    # vdo remove --name=vdo0
  3. ボリュームが削除されたことを確認します。VDO パーティションの vdo リストにリスト しないでください。
    # vdo list --all | grep vdo

4.計測値の重複排除

  1. 「VDO テストボリュームの設定」 に従って VDO ボリュームを作成してマウントします。
  2. vdo10 までの VDO ボリュームにディレクトリー 10 個を作成し、テストデータセットのコピーを 10 個保持します。
    $ mkdir /mnt/VDOVolume/vdo{01..10}
  3. ファイルシステムに応じてディスク領域の使用量を確認します。
    $ df -h /mnt/VDOVolume
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vdo0      1.5T  198M  1.4T   1% /mnt/VDOVolume
    
    結果を表にすると、次の点を考慮してください。
    統計ベアメタルファイルシステム表示後10 個の句の後
    使用中のファイルシステムのサイズ198 MB  
    使用されている VDO データ   
    VDO 論理の使用   
  4. 以下のコマンドを実行して値を記録します。"data blocks used" は、VDO で実行している物理デバイスのユーザーデータが使用するブロック数です。「論理ブロックの使用」は、最適化前に使用したブロックの数です。これは、測定の開始点として使用されます。
    # vdostats --verbose | grep "blocks used"
    
    data blocks used                : 1090
    overhead blocks used            : 538846
    logical blocks used             : 6059434
    
  5. VDO ボリュームのトップレベルにデータソースファイルを作成します。
    $ dd if=/dev/urandom of=/mnt/VDOVolume/sourcefile bs=4096 count=1048576
    
    4294967296 bytes (4.3 GB) copied, 540.538 s, 7.9 MB/s
    
  6. 使用中の物理ディスク容量を再確認します。これにより、書き込まれたファイルに対応するブロックの数が増えるはずです。
    $ df -h /mnt/VDOVolume
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vdo0      1.5T  4.2G  1.4T   1% /mnt/VDOVolume
    
    # vdostats --verbose | grep "blocks used"
    
    data blocks used                : 1050093 (increased by 4GB)
    overhead blocks used            : 538846 (Did not change)
    logical blocks used             : 7108036 (increased by 4GB)
    
  7. 10 個のサブディレクトリーのそれぞれにファイルをコピーします。
    $ for i in {01..10}; do
      cp /mnt/VDOVolume/sourcefile /mnt/VDOVolume/vdo$i
      done
    
  8. もう一度、使用する物理ディスク容量(使用されているデータブロック)を確認してください。この数は、上記のステップ 6 の結果と類似しており、ファイルシステムのジャーナリングとメタデータによりわずかに増加するはずです。
    $ df -h /mnt/VDOVolume
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vdo0      1.5T   45G  1.3T   4% /mnt/VDOVolume
    
    # vdostats --verbose | grep "blocks used"
    
    data blocks used                : 1050836 (increased by 3M)
    overhead blocks used            : 538846
    logical blocks used             : 17594127 (increased by 41G)
    
  9. テストデータを書き込む前に見つかった値から、ファイルシステムが使用する領域の値を減算します。これは、ファイルシステムの観点からこのテストで使用される領域の量です。
  10. 記録された統計で節約する容量を確認します。
    注記:以下の表で、値は MB/GB に変換されます。vdostats "blocks" は 4,096 B です。
    統計ベアメタルファイルシステム表示後10 個の句の後
    使用中のファイルシステムのサイズ198 MB4.2 GB45 GB
    使用されている VDO データ4 MB4.1 GB4.1 GB
    VDO 論理の使用23.6 GB*27.8 GB68.7 GB
    * 1.6 TB フォーマットドライブのファイルシステムのオーバーヘッド

5.圧縮の測定

  1. 10 GB 以上の物理サイズおよび論理サイズの VDO ボリュームを作成します。重複排除を無効にして圧縮を有効にするオプションを追加します。
    # vdo create --name=vdo0 --device=/dev/sdb \
                 --vdoLogicalSize=10G --verbose \
                 --deduplication=disabled --compression=enabled
    
  2. 転送前に VDO 統計を調べます。データブロックの使用と論理ブロックをメモしてください(両方ともゼロでなければなりません)。
    # vdostats --verbose | grep "blocks used"
  3. XFS ファイルシステムまたは ext4 ファイルシステムで新しいデバイスをフォーマットします。
    • XFS の場合:
      # mkfs.xfs -K /dev/mapper/vdo0
      
    • ext4 の場合:
      # mkfs.ext4 -E nodiscard /dev/mapper/vdo0
      
  4. フォーマット済みのデバイスをマウントします。
    # mkdir /mnt/VDOVolume
    # mount /dev/mapper/vdo0 /mnt/VDOVolume && \
      chmod a+rwx /mnt/VDOVolume
    
  5. VDO ボリュームを同期して、未完了の圧縮を完了します。
    # sync && dmsetup message vdo0 0 sync-dedupe
  6. VDO 統計を再度検査します。使用されている論理ブロック - 使用されるデータブロックは、ファイルシステムの圧縮により保存されている 4 KB ブロックの数です。VDO は、ファイルシステムのオーバーヘッドと、実際のユーザーデータを最適化します。
    # vdostats --verbose | grep "blocks used"
  7. /lib の内容を VDO ボリュームにコピーします。合計サイズを記録します。
    # cp -vR /lib /mnt/VDOVolume
    
    ...
    sent 152508960 bytes  received 60448 bytes  61027763.20 bytes/sec
    total size is 152293104  speedup is 1.00
    
  8. Linux キャッシュと VDO ボリュームを同期します。
    # sync && dmsetup message vdo0 0 sync-dedupe
  9. VDO 統計を再度検査します。使用されている論理データブロックとデータブロックを確認します。
    # vdostats --verbose | grep "blocks used"
    • logical blocks used - data blocks used は、/lib ファイルのコピーに使用する領域のサイズ(4 KB ブロック単位)を表します。
    • 「4.計測値の重複排除」の表からの)合計サイズ(論理ブロックは使用データブロック使用 * 4096)= バイトは圧縮により保存されます。
  10. VDO ボリュームを削除します。
    # umount /mnt/VDOVolume && vdo remove --name=vdo0

6.VDO 圧縮規則のテスト

  1. 「VDO テストボリュームの設定」 に従って VDO ボリュームを作成してマウントします。
  2. ボリュームを削除せずに、「4.計測値の重複排除」 および 「5.圧縮の測定」 で実験を繰り返します。vdostats で削減する領域への変更を確認します。
  3. 用意したデータセットを試します。

7.TRIM および DISCARD について

シンプロビジョニングを使用すると、論理または仮想ストレージ領域を基盤物理ストレージよりも大きくすることができます。ファイルシステムなどのアプリケーションは、ストレージの大規模な仮想レイヤーで実行することや、データの重複排除などのデータ効率の高い手法により、すべてのデータを保存するために必要な物理データブロックの数を減らします。これらのストレージ節約の利点を得るには、アプリケーションデータが削除されるかを物理ストレージレイヤーで把握する必要があります。
従来のファイルシステムは、データの削除時に基礎となるストレージに通知する必要はありませんでした。シンプロビジョニングされたストレージと連携するファイルシステムは、TRIM または DISCARD コマンドを送信して、論理ブロックが不要になった場合にストレージシステムに通知します。これらのコマンドは、破棄マウントオプションを使用してブロックが削除されるたびに送信できます。または、fstrim などのユーティリティーを実行して、どの論理ブロックが使用されていないかを検出し、TRIM または DISCARD コマンドの形式でストレージシステムに情報を送信するようにファイルシステムに指示することで、制御された方法でこれらのコマンドを送信することができます。
重要
シンプロビジョニングの仕組みに関する詳細は、『『Red Hat Enterprise Linux 7 Logical Volume Manager Administration Guide』』の「Thinly-Provisioned Logical Volumes (Thin Volumes)」を参照してください。
これがどのように機能するかを確認するには、以下を実行します。
  1. 「VDO テストボリュームの設定」 に従って、新しい VDO 論理ボリュームを作成してマウントします。
  2. ファイルシステムをトリミングして、不要なブロックを削除します (これには長い時間がかかる場合があります)。
    # fstrim /mnt/VDOVolume
  3. 以下を入力して、以下の表に初期状態を記録します。
    $ df -m /mnt/VDOVolume
    ファイルシステムで使用されている容量と論理データブロックの数を確認するには、vdostats を実行して、使用されている物理データブロックと論理データブロックの数を確認します。
  4. VDO 上で実行中のファイルシステムに、重複しないデータを含む 1 GB ファイルを作成します。
    $ dd if=/dev/urandom of=/mnt/VDOVolume/file bs=1M count=1K
    
    次に、同じデータを収集します。ファイルシステムは 1 GB を追加で使用し、データブロックと論理ブロックは同様に増加しました。
  5. fstrim /mnt/VDOVolume を実行し、新しいファイルの作成後に、これが影響を与えないことを確認します。
  6. 1 GB ファイルを削除します。
    $ rm /mnt/VDOVolume/file
    パラメーターを確認し、記録します。ファイルシステムは、ファイルが削除されたことを認識していますが、ファイルの削除が基礎となるストレージに通知されていないため、物理ブロックまたは論理ブロックの数に変更はありません。
  7. fstrim /mnt/VDOVolume を実行し、同じパラメーターを記録します。fstrim は、ファイルシステムの空きブロックを検索し、未使用のアドレスに対して TRIM コマンドを VDO ボリュームに送信します。これは、関連する論理ブロックを解放し、VDO は TRIM を処理し、基礎となる物理ブロックを解放します。
    手順使用されているファイル領域 (MB)使用されているデータブロック使用されている論理ブロック
    初期   
    1 GB ファイルを追加   
    fstrim を実行   
    1 GB ファイルを削除   
    fstrim を実行   
この演習では、基礎となるストレージに容量使用率に関する正確な知識を持たせることができるように、TRIM プロセスが必要になります。fstrim 効率を向上させるために、多くのブロックを一度に分析するコマンドラインツールです。別の方法としては、マウント時にファイルシステム discard オプションを使用することです。discard オプションは、各ファイルシステムのブロックを削除した後に基礎となるストレージを更新します。これにより、スループットが低下しますが、使用率が優れた使用の対応をもたらします。また、TRIM または DISCARD の未使用ブロックが VDO に一意ではないことを理解することも重要です。シンプロビジョニングしたストレージシステムはいずれも同じ課題です。