見出し画像

データがとぶ設定(ブロックデバイス)

こんにちは、辻村です。今回は、「ブロックデバイスでこの設定をやるとデータが壊れてしまうよ」というお話です。かなり前から知っていることではあるのですが、専門的すぎることと、興味がある方が限られるので書かずにいました。データを飛ばしてしまう方がいらっしゃるよりは良いかと思いなおし、書いておきます。オンプレミスの方、そしていまだに私が発音が分からない IaaSの皆様のお役に立てるかと思います。

ブロックデバイスのデータの流れ

ブロックデバイスというのは、ストレージの中で、OSからハードディスクのイメージが見えるものを言います。接続には SASやファイバーチャネル、iSCSIなどを使います。
(ストレージの種類について興味がある方は、記事「ストレージにはどんな種類があるの?」をご覧ください。)

I/Oは、大まかには、SCSIではイニシエーターと呼ばれるホスト側のSCSIドライバ、転送経路、ターゲット側のドライバあるいはコントローラ、そして実際のストレージへと流れていきます。

高速化する手法

吉野屋さんの「うまい、やすい、はやい」ではありませんが、きちんとデータが保管できるのであれば、できるだけ安く、そしてできる速く処理して欲しいと思うのが普通です。

当然のことながら、SCSIと呼ばれる規格にも、SCSIを基礎とした規格にも、高速化の手法は組み込まれています。主に以下の二つがあります。

・コマンドキューイング
・キャッシュ(リードキャッシュ・ライトキャッシュ)

コマンドキューイングはSCSIのリクエストを受け付けて待ち行列に積んでおく方法です。queue depth が 255とか書いてあると思います。ちょっと乱暴なたとえですが、ドライブスルーで並ぶことのできる車の台数みたいなものです。送信するイニシエーター側のキューに持たせることもありますが、結局受け付ける側のキューにどれくらい保持でき、どれくらいさばけるかに影響されます。

キャッシュは読み出したり、書き込もうとしている内容をメモリにおいておくことで速く次の処理に進めることを狙うものです。

コマンドキューイングでならんだコマンドの列にせよ、キャッシュにせよ、メモリに保持されています。そして当然のことながら、メモリの内容は電源を切れば消えてしまいます。

電源が突然切れるとどうなるか?

ストレージの電源が突然切れると、読みだしだったか書き出しだったかでその運命は分かれます。いずれもアプリケーションなどが異常終了しますが、以下の点が違います。(IaaSなどの環境では、該当の仮想マシンのインスタンスが突然止まると読み替えてください。)

・読みだし: 読めなかったが、おそらく元のデータに影響はない。
・書き出し: 書き出そうとしていたデータは消えてしまう。

イニシエーターのあるサーバーと同じ筐体(きょうたい)にブロックデバイスのストレージがあれば同時に電源が切れるので、まだいいのですが、不幸なのは、外部ストレージが予告なく止まったり再起動された場合です。

エンタープライズ向けのストレージは高速化のために多くのメモリを積んでいます。そして、万が一の停電の時のためにバックアップ用のバッテリーを積んでいたりします。これは、メモリに残されたものを可能な限り一貫性のある形で書き出してデータを守るためです。

逆に言うと、ストレージやターゲットの振る舞いをするサーバーにバックアップ電源がないのであれば、キャッシュは有効にしてはいけないのです。

ライトキャッシュオフと落とし穴

ストレージ製品やターゲットとして働くソフトウェアにはライトキャッシュをオフにするモードがあります。性能としては悪くなりますが、書き込みの一貫性が保たれ、突然の電源オフにも強くなります。

ところが、一つ落とし穴があります。

SCSIには MODE SELECT と言うコマンドがあり、イニシエーター側から、「今の設定は何かしらないけど、ライトキャッシュをオンにしてね」と依頼ができます。この時、きちんと拒否するストレージならいいのですが、十手しまう場合もあります。そのような場合、自分が意図せずにライトキャッシュがオンになってしまうのです。

実例

Solarisがターゲットの場合には、stmfadm コマンドで、ターゲットとして作成した定義を確認すると現在のライトキャッシュの状態が確認できます。Write Cache Mode Select の項目が Enabled になっていると、イニシエーターから MODE SELECTコマンドを使って、write cacheを有効にすることができます。

ar1# stmfadm list-lu
LU Name: 600144F0EDC1B00B00005D1588830001
LU Name: 600144F0EDC1B00B00005D3901790001

ar1# stmfadm list-lu -v 600144F0EDC1B00B00005D1588830001
LU Name: 600144F0EDC1B00B00005D1588830001
Operational Status : Online
Provider Name : sbd
Alias :
View Entry Count : 1
Data File : /dev/zvol/rdsk/pool-0/local/quota_prj/lu01
Meta File : not set
Size : 104857600
Block Size : 512
Management URL : https://192.168.150.21:215/ak
Software ID : not set
Vendor ID : SUN
Product ID : Sun Storage 7000
Serial Num : not set
Write Protect : Disabled
Write Cache Mode Select: Enabled
Writeback Cache : Disabled
Thin Provisioned : Disabled
Access State : Active

Liuxがターゲットの場合、sdparm と言うパッケージを導入して以下のコマンドを実行すると、確認ができるようです。WCEは Writeback Cache Enabled の省略だそうです。

// 対象デバイスにモデルなどの情報を INQUIRYを流して確認。
// LIOを使い、iSCSI であることが分かる
[root@localhost ~]# sdparm --i /dev/sdd
/dev/sdd: LIO-ORG LUN_0 4.0
Device identification VPD page:
Addressed logical unit:
designator type: NAA, code set: Binary
0x6001405000626de2f864682a73250552
designator type: T10 vendor identification, code set: ASCII
vendor id: LIO-ORG
vendor specific: LUN_
designator type: Logical unit group, code set: Binary
Logical unit group: 0x0
Target port:
designator type: Relative target port, code set: Binary
transport: Internet SCSI (iSCSI)
Relative target port: 0x1
designator type: Target port group, code set: Binary
transport: Internet SCSI (iSCSI)
Target port group: 0x0
designator type: SCSI name string, code set: UTF-8
transport: Internet SCSI (iSCSI)
SCSI name string:
iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.f65cfeddb582,t,0x0001
Target device that contains addressed lu:
designator type: SCSI name string, code set: UTF-8
transport: Internet SCSI (iSCSI)
SCSI name string:
iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.f65cfeddb582

// WCEを確認。現在、1(有効)であることが分かる。
[root@localhost ~]# sdparm --get=WCE /dev/sdd
/dev/sdd: LIO-ORG LUN_0 4.0
WCE 1 [cha: n, def: 1, sav: 1]

最後まで読んでいただいてありがとうございます。
何かのお役に立てば幸いです。

参考文献


sdparm(8) マニュアル
Oracle Enerprise Linux管理者ガイドリリース7 、iSCSIターゲットの構成

この記事はここまでです。 最後まで読んでいただいてありがとうございます。 気に入っていただいたなら、スキを押していただいたり、 共有していただけるとうれしいです。 コメントや感想大歓迎です!