Red Hat Training

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

27.4. 使用 libStorageMgmt

要以交互方式使用 libStorageMgmt,请使用 lsmcli 工具。
lsmcli 工具需要两个项才能运行:
  • Uniform Resource Identifier (URI),用于识别插件以连接到该数组以及该阵列所需的任何可配置的选项。
  • 数组的有效用户名和密码。
URI 的格式如下:
plugin+optional-transport://user-name@host:port/?query-string-parameters
每个插件对需要的内容有不同的要求。

例 27.1. 不同插件要求示例

simulator 插件需要没有用户名或密码

sim://

NetApp 插件使用用户名 root 进行 SSL

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

用于 EMC Array 的 SSL 的 SMI-S 插件

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

使用 URI 有三个选项:
  1. 将 URI 作为命令的一部分传递。
    $ lsmcli -u sim://
  2. 将 URI 存储在环境变量中。
    $ export LSMCLI_URI=sim://
  3. 将 URI 放在文件 ~/.lsmcli 中,其中包含用 "=" 分隔的名称值对。当前唯一支持的配置是 'uri'。
确定需要按照以下顺序使用哪个 URI。如果提供了所有三个命令,则只会在命令行中使用第一个。
在命令行中指定 -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)在 进程间通信(IPC)之间的进程分离提供进程 分离。这可防止插件中的错误使客户端应用程序崩溃。它还提供了一种使用自己选择的许可证编写插件的方法。当客户端打开传递 URI 的库时,客户端库将查看 URI 来确定应使用哪个插件。
该插件由技术上独立使用,但它们设计为在命令行上传递了文件描述符。然后,客户端库会打开适当的 Unix 域套接字,这会导致守护进程分叉并执行插件。这可让客户端库指向与插件的通信频道。守护进程可以在不影响现有客户端的情况下重启。当客户端为该插件打开了库时,插件进程正在运行。发送一个或多个命令且插件关闭后,插件过程会清理,然后退出。
lsmcli 的默认行为是等待操作完成。根据请求的操作,这可能需要几小时时间。要允许返回正常使用,可以在命令行中使用 -b 选项。如果退出代码为 0,则代表命令已完成。如果退出代码为 7,命令正在进行,作业标识符将写入标准输出。然后,用户或脚本可以根据需要使用 lsmcli --jobstatus JobID 来查询命令的状态。如果作业现已完成,则退出值为 0,结果将输出到标准输出。如果命令仍在进行中,返回值为 7,且完成百分比将打印到标准输出中。

例 27.3. Asynchronous 示例

通过 -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 手册页或 lsmcli --help