Red Hat Training

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

27.4. libStorageMgmt の使用

libStorageMgmt を対話的に使用するには、lsmcli ツールを使用します。
lsmcli ツールを実行するには、以下の 2 つが必要です。
  • アレイに接続するプラグインと、アレイに必要な設定可能なオプションを識別するために使用される URI (Uniform Resource Identifier) です。
  • アレイの有効なユーザー名およびパスワード。
URI の形式は、以下のとおりです。
plugin+optional-transport://user-name@host:port/?query-string-parameters
プラグインごとに、必要なものについて異なる要件があります。

例27.1 さまざまなプラグイン要件の例

ユーザー名やパスワードを必要としないシミュレータープラグイン

sim://

ユーザー名に root を使用した SSL 経由の NetApp プラグイン

ONTAP+ssl://root@filer.company.com/

EMC アレイ用 SSL 経由の SMI-S プラグイン

smis+ssl://admin@provider.com:5989/?namespace=root/emc

URI を使用するには、以下の 3 つのオプションがあります。
  1. コマンドの一部として URI を渡します。
    $ lsmcli -u sim://
  2. URI を環境変数に保存します。
    $ export LSMCLI_URI=sim://
  3. URI をファイル ~/.lsmcli に配置します。このファイルには、"=" で区切られた名前と値のペアが含まれます。現在対応している設定は 'uri' のみです。
使用する URI をこの順序で決定する必要があります。この 3 つすべてが指定されている場合は、コマンドラインの最初の 1 つだけが使用されます。
コマンドラインで -P オプションを指定するか、環境変数 LSMCLI_PASSWORD に配置してパスワードを指定します。

例27.2 lsmcli の例

コマンドラインを使用して新しいボリュームを作成し、イニシエーターに表示する例。
この接続で対応しているアレイのリストを表示します。
$ lsmcli list --type SYSTEMS
ID     | Name                          | Status
-------+-------------------------------+--------
sim-01 | LSM simulated storage plug-in | OK
ストレージプールのリストを表示します。
$ lsmcli list --type POOLS -H
ID   | Name          | Total space          | Free space           | System ID
-----+---------------+----------------------+----------------------+-----------
POO2 | Pool 2        | 18446744073709551616 | 18446744073709551616 | sim-01
POO3 | Pool 3        | 18446744073709551616 | 18446744073709551616 | sim-01
POO1 | Pool 1        | 18446744073709551616 | 18446744073709551616 | sim-01
POO4 | lsm_test_aggr | 18446744073709551616 | 18446744073709551616 | sim-01
ボリュームを作成します。
$ lsmcli volume-create --name volume_name --size 20G --pool POO1 -H
ID   | Name        | vpd83                            | bs  | #blocks  | status | ...
-----+-------------+----------------------------------+-----+----------+--------+----
Vol1 | volume_name | F7DDF7CA945C66238F593BC38137BD2F | 512 | 41943040 | OK     | ...
iSCSI イニシエーターを含むアクセスグループを作成します。
$ lsmcli --create-access-group example_ag --id iqn.1994-05.com.domain:01.89bd01 --type ISCSI --system sim-01
ID                               | Name       | Initiator ID                     |SystemID
---------------------------------+------------+----------------------------------+--------
782d00c8ac63819d6cca7069282e03a0 | example_ag | iqn.1994-05.com.domain:01.89bd01 |sim-01
iSCSI イニシエーターが含まれるアクセスグループを作成します。
$ lsmcli access-group-create --name example_ag --init iqn.1994-05.com.domain:01.89bd01 --init-type ISCSI --sys sim-01
ID                               | Name       | Initiator IDs                    | System ID
---------------------------------+------------+----------------------------------+-----------
782d00c8ac63819d6cca7069282e03a0 | example_ag | iqn.1994-05.com.domain:01.89bd01 | sim-01
新しく作成したボリュームでアクセスグループを表示できるようにします。
$ lsmcli access-group-grant --ag 782d00c8ac63819d6cca7069282e03a0 --vol Vol1 --access RW
ライブラリーのデザインでは、プロセス間通信 (IPC) を使用して、クライアントとプラグインをプロセスごとに分けています。これにより、プラグインのバグによりクライアントアプリケーションがクラッシュすることを防ぎます。また、プラグインの作成者が独自のライセンスでプラグインを作成する手段も提供します。クライアントが、URI を渡してライブラリーを開くと、クライアントライブラリーが URI を調べて、使用するプラグインを判断します。
このプラグインは、技術的にはスタンドアロンのアプリケーションですが、コマンドラインでファイル記述子を渡すように設計されています。クライアントライブラリーは、適切な Unix ドメインソケットを開いてデーモンをフォークさせ、プラグインを実行します。これにより、クライアントライブラリーで、プラグインとの通信チャンネルを指定できます。デーモンは、既存のクライアントに影響を及ぼさずに再起動できます。クライアントが、そのプラグインでライブラリーを開いている間、プラグインプロセスが実行しています。1 つ以上のコマンドを送信してプラグインを閉じると、プラグインプロセスがクリーンアップしてから終了します。
lsmcli のデフォルトの動作は、操作が完了するまで待機することです。要求されている操作によっては、これに数時間かかることがあります。通常の使用法に戻すために、コマンドラインで-bオプションを使用することができます。終了コードが 0 の場合、コマンドは完了します。終了コードが 7 の場合、コマンドは進行中で、ジョブ識別子が標準出力に書き込まれます。次に、ユーザーまたはスクリプトはジョブ ID を取得し、lsmcli --jobstatus JobID を使用して必要に応じてコマンドのステータスをクエリーできます。ジョブが完了すると、終了値が 0 になり、結果が標準出力に出力されます。コマンドがまだ進行中の場合、戻り値は 7 になり、完了率が標準出力に出力されます。

例27.3 非同期の例

コマンドがすぐに戻るように、-bオプションを渡してボリュームを作成します。
$ lsmcli volume-create --name async_created --size 20G --pool POO1 -b JOB_3
終了値を確認します。
$ echo $?
7
7 は、ジョブが進行中であることを示します。
ジョブが完了したかどうかを確認します。
$ lsmcli job-status --job JOB_3
33
終了値を確認します。7 は、ジョブが進行中であることを示しており、標準出力には完了率が表示されます。ここでは 33% と表示されています。
$ echo $?
7
しばらく待って、終了値を再度確認します。
$ lsmcli job-status --job JOB_3
ID   | Name          | vpd83                            | Block Size  | ...
-----+---------------+----------------------------------+-------------+-----
Vol2 | async_created | 855C9BA51991B0CC122A3791996F6B15 | 512         | ...
0 は成功を意味し、標準出力には新しいボリュームが表示されます。
スクリプトを記述する場合は、-t SeparatorCharacters オプションを渡します。これにより、出力の解析が容易になります。

例27.4 スクリプトの例

$ lsmcli list --type volumes -t#
Vol1#volume_name#049167B5D09EC0A173E92A63F6C3EA2A#512#41943040#21474836480#OK#sim-01#POO1
Vol2#async_created#3E771A2E807F68A32FA5E15C235B60CC#512#41943040#21474836480#OK#sim-01#POO1
$ lsmcli list --type volumes -t " | "
Vol1 | volume_name | 049167B5D09EC0A173E92A63F6C3EA2A | 512 | 41943040 | 21474836480 | OK | 21474836480 | sim-01 | POO1
Vol2 | async_created | 3E771A2E807F68A32FA5E15C235B60CC | 512 | 41943040 | 21474836480 | OK | sim-01 | POO1
$ lsmcli list --type volumes -s
---------------------------------------------
ID         | Vol1
Name       | volume_name
VPD83      | 049167B5D09EC0A173E92A63F6C3EA2A
Block Size | 512
#blocks    | 41943040
Size       | 21474836480
Status     | OK
System ID  | sim-01
Pool ID    | POO1
---------------------------------------------
ID         | Vol2
Name       | async_created
VPD83      | 3E771A2E807F68A32FA5E15C235B60CC
Block Size | 512
#blocks    | 41943040
Size       | 21474836480
Status     | OK
System ID  | sim-01
Pool ID    | POO1
---------------------------------------------
簡単ではないスクリプトには Python ライブラリーを使用することが推奨されます。
lsmcli の詳細は、lsmcli の man ページまたは lsmcli --help を参照してください。