📖

「基礎からの新しいストレージ入門」に関する補足(非公式)

2023/09/11に公開

はじめに

「基礎からの新しいストレージ入門 基本技術から設計・運用管理の実践まで」という書籍を読んだので非公式の補足[1]です。

ストレージを主役として扱う書籍があまり多くない中で久しぶりに登場した一冊です。
従来の専用装置 (アプライアンス) のストレージからコンテナまで幅広い範囲を扱っています。

https://www.amazon.co.jp/dp/4802614136/

Thin Provisioning容量解放

P.35ではThin Provisioning容量解放 (TRIM命令、discardオプション) に触れています。
書籍では区別していませんが、Thin Provisioning容量解放はThin Reclamation[2]と呼ばれることがあります。

Thin Provisioningではデータの書き込み容量の増加に応じて実際のストレージ容量の割り当てを増やしますが、本来データを削除しても割り当てたストレージ容量は減りません。
なぜなら「削除」という操作はストレージにはわからないからです。

「削除」はストレージにはわからない

通常ストレージにデータを格納する際にファイルシステムやデータベースなどの機構を通してデータを読み書きしますが、「削除」はこれら機構が削除済みと扱うよう「データを書き換えること」であり、ストレージからは単なる書き込みに見えるため削除を認識できません。

しかしながら、Thin Reclamationという技術の登場により一度増加したストレージ割り当て容量を減らすことができるようになってきました。
Thin Provisioningが使えるストレージで必ずThin Reclamationが使えるとは限りません。
また、ストレージの対応に加えて、サーバの対応状況も関係します。

Thin Reclamationには大きく以下の2つがあります。

  1. Zero Page Reclaim[3]
    • サーバからゼロが書かれた領域をストレージで解放
  2. Unmap / Trim / Discard[4]
    • サーバからストレージに領域の未使用を通知・解放

具体的なイメージは以下ページがわかりやすいです。

https://community.ibm.com/community/user/storage/blogs/keitaro-imai1/2020/05/21/scsi-unmap1

ファイルシステムだけでなくOracle Database (ASM) でもThin Reclamationが使える模様。

https://infohub.delltechnologies.com/l/deployment-best-practices-for-oracle-databases-with-dell-emc-powermax-5/appendix-ii-oracle-asm-online-storage-reclamation-4

https://support.purestorage.com/Solutions/Oracle/Oracle_on_FlashArray/Reclaiming_Unused_Space_with_Oracle_ASM

ファイルシステム

P.51~52にファイルシステムに関する説明があります。inodeを中心に説明されており、UNIX / Linux系OSが前提となっています。
以下記事を参照頂くともう少しイメージが膨らむかもしれません (偶然にもP.51~52と以下記事が伝えようとする内容はかなり近いです)。

https://zenn.dev/lightgreenface/articles/4d40b3698659b6

仮想環境の仮想ディスクは書き込み保証がない?

P.76~77に仮想ディスク (vmdk, VHD) はゲストOSからの書き込みはホストOSで非同期にストレージへ送られるのでゲストOSでの書き込みがストレージに到達することは保証されない旨の記載が見られます。

これはゲストOS[5]でO_SYNCでopenしたファイルの書き込みやfsyncしたファイルがストレージに書き込まれていない可能性を示唆しており、これは困りそうだと思って調べました。

KVMもHyper-Vも問題ない (ゲストOS書き込みはストレージに到達する[6]) ように見えます。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-blockio-caching

Cache=none (デフォルト) の説明:

ゲストからの I/O はホストにキャッシュされませんが、... (省略)

Cache=writethroughの説明:

ゲストからの I/O はホストにキャッシュされますが、物理メディアに書き込まれます。

https://support.microsoft.com/en-us/topic/eee4fe31-ddd3-9045-a458-9c83e1241d1c

Host filesystem cache. The Hyper-V storage stack also uses unbufferred writes to make sure that the writes from the guest bypass the underlying host filesystem stack.
(Hyper-V ストレージ スタックは、ゲストからの書き込みが基盤となるホスト ファイル システム スタックをバイパスするように、バッファなしの書き込みも使用します。[Google翻訳])

ストレージ筐体間ミラーの同期/非同期におけるネットワーク速度

P.139にはストレージ筐体間ミラー (筐体間レプリケーション) の同期/非同期の選択において「ネットワーク速度を考慮して選択する」という記載があります。

この「ネットワーク速度」には以下2つの観点があり、2点目は経験がないと見落としがちです。

  1. 帯域幅 (MB/s)
    • 同期では「最大瞬間風速」の帯域幅が必要だが非同期では平均程度で足りる可能性あり[7]
    • IT技術者なら知っておきたいストレージの原則と技術 (ISBN:9784844333517) に詳しい
  1. 装置間の距離・レイテンシ
    • 同期の場合には100km、200km以内、レイテンシはRTT 5ms以内などの制限が見られる
      • 制限値内であっても遅延によって書き込み性能は低下することに注意

確実なデータ保護を実現するコピー機能を使いこなす:徹底解説!一歩先のストレージ管理:Hitachi IoT Platform Magazine:日立 リンクカードが文字化けしたのでテキストリンクです

https://www.dell.com/support/manuals/ja-jp/powermax-os-10/esd_p_srdf_intro_10.0/同期モード?guid=guid-c4260bfe-543b-4624-8f84-220c0f1e428e&lang=ja-jp

https://blog.purestorage.com/ja/products-ja/introducing_activecluster/

脚注
  1. 書籍の著者と本記事の著者は一切関係ありません ↩︎

  2. Storage Reclamation, Space Reclamationなどとも呼ばれます ↩︎

  3. 明示的にゼロ埋めファイルを作るなどの操作が必要 (多くの領域解放には多くのゼロ埋めが必要) ↩︎

  4. 性能観点でネガティブな記事 (https://tagomoris.hatenablog.com/entry/2019/06/24/110537https://tagomoris.hatenablog.com/entry/2019/06/24/110537) も見られるため注意が必要 ↩︎

  5. ゲストOSがLinuxの場合として記載 ↩︎

  6. もちろん、ゲストOS側でO_SYNCによるopenやfsyncなどで書き込みを同期することが必要です ↩︎

  7. 製品の仕組みや同期間隔によります ↩︎

Discussion