LSMCLI(1)

πŸ“¦
version 1.10.3 Β· 3 versions
, in fedora 43, fedora 44

πŸ’– NAME πŸ’–

okay so bestie, meet lsmcli β€” the libStorageMgmt command line interface πŸ’… like, this is LSMCLI(1) from the libStorageMgmt fam and she is that girl. ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

lsmcli command [GLOBAL OPTIONS]...[COMMAND OPTIONS]...

✨ DESCRIPTION ✨

lsmcli is the command line tool for the libStorageMgmt library. Basically it lets you do one-off storage management operations OR script the management of your storage β€” whichever vibe you're on that day. πŸŽ€


πŸ‘‘ PREREQUISITES πŸ‘‘

lowkey important, don't skip this part πŸ™ˆ

  • libStorageMgmt daemon. The daemon lsmd is required by lsmcli. she needs her friend, periodt.
  • URI (Uniform Resource Identifier) URI is used to identify which plugin to use and how the plugin should communicate with the storage array. The valid URI format is:
plugin://<username>@host:<port>?<query_string_parameters>
plugin+ssl://<username>@host:<port>?<query_string_parameters>

Examples β€” please refer to "LibStorageMgmt User Guide" for more details:

  • Simulator:
sim://
simc://
  • SMI-S supported arrays (eg. EMC CX/VNX, HDS AMS, IBM SVC/DS, LSI MegaRAID and others):
smis://username@host:<port>?namespace=<namespace>
smis+ssl://username@host:<port>?namespace=<namespace>

You can pass URI to lsmcli via one of these methods:

  • Using -u, --uri argument.
  • Using LSMCLI_URI environment variable.
  • Add this line into $HOME/.lsmcli:
uri=<URI>
  • Password For storage array password authentication you can pass it to lsmcli via one of the following methods:
    • -P, --prompt argument to prompt for password.
    • LSMCLI_PASSWORD environment variable.

🌈 GLOBAL OPTIONS 🌈

these are the big ones, the main character options πŸ’«

  • --version β€” Show program's version number and exit
  • -h, --help β€” Show this help message and exit. Will show help message of specific command if specified.
  • -u <URI>, --uri <URI> β€” Uniform Resource Identifier (env LSMCLI_URI)
  • -P, --prompt β€” Prompt for password (env LSMCLI_PASSWORD)
  • -H, --human β€” Print sizes in human readable format (e.g., KiB, MiB, GiB, TiB, PiB, EiB)
  • -t <SEP>, --terse <SEP> β€” Print output in terse form with "SEP" as a record separator without header unless --header defined.
  • --header β€” Include the header with terse
  • -e, --enum β€” Display enumerated types as numbers instead of text
  • -f, --force β€” Bypass confirmation prompt for data loss operations
  • -w <WAIT>, --wait=<WAIT> β€” Command timeout value in ms (default = 30s)
  • -b β€” Run the command asynchronously instead of waiting for completion. The lsmcli command will exit with exit code(7) and job id will be written to STDOUT when a command is still executing on the storage array. Use job-status --id <job id> to inquire on the progress of the command. Some arrays or plugins might not support asynchronous operations, in those circumstances, -b will be ineffective. Command will wait until finished.
  • -s, --script β€” Displaying data in script friendly way. Without this option, data is displayed in this manner (default):
ID     | Name    | Element Type             ...
------------------------------------------  ...
aggr0  | aggr0   | FS,SYSTEM_RESERVED,POOL  ...
iscsi  | iscsi   | FS,POOL                  ...

With this option, data is displayed in this manner.

-----------------------------------------------
ID               | aggr0
Name             | aggr0
Element Type     | FS,SYSTEM_RESERVED,POOL
...
-----------------------------------------------
ID               | iscsi
Name             | iscsi
Element Type     | FS,POOL
...

Please note: To reduce the width of output, NOT all properties will be displayed in default column display.


🌸 COMMANDS 🌸

πŸ“ list

List information on LSM objects

  • --type <TYPE> β€” Required. Valid values are (case insensitive): VOLUMES, POOLS, FS, SNAPSHOTS, EXPORTS, NFS_CLIENT_AUTH, ACCESS_GROUPS, SYSTEMS, DISKS, PLUGINS, TARGET_PORTS, BATTERIES.
  • --fs <FS_ID> β€” Required for --type=SNAPSHOTS, list the snapshots of specific filesystem. Optional for type EXPORTS, list the NFS export for specific filesystem. Optional for type FS, list specific filesystem.
  • --sys <SYS_ID> β€” Optional. Search resources from system with SYS_ID. Only supported when querying these types of resources: , VOLUMES, POOLS, FS, DISKS, ACCESS_GROUPS, TARGET_PORTS BATTERIES.
  • --pool <POOL_ID> β€” Optional. Search resources from pool with POOL_ID. Only supported by these types of resources: VOLUMES, POOLS, FS.
  • --vol <VOL_ID> β€” Search resources from volume with VOL_ID. Only supported by these types of resources: VOLUMES, ACCESS_GROUPS. To query volume masking status, please use this command:
lsmcli list --type ACCESS_GROUPS --vol <VOL_ID>
  • --disk <DISK_ID> β€” Search resources from disk with DISK_ID. Only supported by these types of resources: DISK.
  • --ag <AG_ID> β€” Search resources from access group with AG_ID. Only supported by these types of resources: ACCESS_GROUPS, VOLUMES. To query volume masking status, please use this command:
lsmcli list --type VOLUMES --ag <AG_ID>
  • --nfs-export <NFS_EXPORT_ID> β€” Search resources from NFS export with NFS_EXPORT_ID. Only supported by these types of resources: EXPORTS.
  • --tgt <TGT_ID> β€” Search resources from target port with target port ID. Only supported by these types of resources: TARGET_PORTS.

πŸ“ job-status

Retrieve information about a job. Please see user guide on how to use.

  • --job <JOB_ID>

πŸ“ capabilities

Retrieves array capabilities.

  • --sys <SYS_ID> β€” Required. ID of the system to query for capabilities.

πŸ“ plugin-info

Retrieves plugin description and version for current URI.

πŸ“ volume-create

Creates a volume (AKA., logical volume, virtual disk, LUN).

  • --name <NAME> β€” Required. Volume name.
  • --size <SIZE> β€” Required. Volume size (See SIZE OPTION for allowed formats).
  • --pool <POOL_ID> β€” Required. ID of pool.
  • --provisioning <THINP_TYPE> β€” Optional. Provisioning type. Valid values are: DEFAULT, THIN, FULL. DEFAULT means let plugin choose. THIN means requiring a Thin Provisioning enabled volume. FULL means requiring a fully allocated volume.

πŸ“ volume-raid-create

Creates a volume on hardware RAID on given disks.

  • --name <NAME> β€” Required. Volume name. Might be altered or ignored due to hardware RAID card vendor limitation.
  • --raid-type <RAID_TYPE> β€” Required. Could be one of these values: RAID0, RAID1, RAID5, RAID6, RAID10, RAID50, RAID60. The supported RAID types of current RAID card could be queried via command "volume-raid-create-cap".
  • --disk <DISK_ID> β€” Required. Repeatable. The disk ID for new RAID group.
  • --strip-size <STRIP_SIZE> β€” Optional. The size in bytes of strip on each disks. If not defined, will let hardware card to use the vendor default value. The supported stripe size of current RAID card could be queried via command "volume-raid-create-cap".

πŸ“ volume-raid-create-cap

Query support status of volume-raid-create command for current hardware RAID card.

  • --sys <SYS_ID> β€” Required. ID of the system to query for capabilities.

πŸ“ volume-ident-led-on

Enable the IDENT LEDs for all physical disks that compose a logical volume.

  • --vol <VOL_ID> β€” Required. ID of the volume being targeted.

πŸ“ volume-ident-led-off

Disable the IDENT LEDs for all physical disks that compose a logical volume.

  • --vol <VOL_ID> β€” Required. ID of the volume being targeted.

πŸ“ volume-delete

Delete a volume given its ID

  • --vol <VOL_ID> β€” Required. The ID of volume to delete.

πŸ“ volume-resize

Re-sizes a volume, requires:

  • --vol <VOL_ID> β€” Required. The ID of volume to resize.
  • --size <NEW_SIZE> β€” Required. The new size of volume.(See SIZE OPTION for allowed formats). Due to boundary alignment concern, array might return a volume with slightly bigger size than requested.

πŸ“ volume-replicate

Creates a new volume and replicates provided volume to it.

  • --vol <VOL_ID> β€” Required. The ID of volume to replicate.
  • --name <NAME> β€” Required. The name for new volume to hold replicated data.
  • --rep-type <REPL_TYPE> (see VOLUME REPLICATION TYPES) β€” Required. Valid types of replication are: CLONE, COPY, MIRROR_ASYNC, MIRROR_SYNC.
  • --pool <POOL_ID> β€” Optional. The ID of pool where the new volume should be created from. If not specified, plugin or array will choose appropriate pool.

πŸ“ volume-replicate-range

Replicates a portion of a volume to the same volume or to a different volume.

  • --src-vol <SRC_VOL_ID> β€” Required. The ID of replication source volume.
  • --dst-vol <DST_VOL_ID> β€” Required. The ID of replication destination volume.
  • --rep-type <REPL_TYPE> (see VOLUME REPLICATION TYPES) β€” Required. Appropriate types of replication are: CLONE, COPY.
  • --src-start <SRC_START_BLK> β€” Required. Replication source volume start block number. Must in pair with --count and --dst-start. If you have several non-continuous block ranges, you can define repeatly define this arugument, like --src-start 0 --dst-start 0 --count 1024 --src-start 2048 --dst-start 2048 --count 2048
  • --dst-start <DST_START_BLK> β€” Required. Replication destination volume start block number. Must in pair with --count and --src-start.

🌸 volume-replicate-range-block-size 🌸

The size of each replicated block on a system, in bytes. It's giving "how big is one lil brick of your replication" energy 🧱

  • --count <BLK_COUNT> β€” Required. TReblock. Must pair with --src-start and --dst-start. No solo missions allowed, bestie πŸ’…

  • --sys <SYS_ID> β€” Required. The ID of the system to query for replicated block size.

πŸ¦‹ volume-dependants πŸ¦‹

Returns True if the volume has a dependant child, like replication. It literally just wants to know if anyone's clingy πŸ‘€

  • --vol <VOL_ID> β€” Required. The ID of volume to query dependency.

πŸ’€ volume-dependants-rm πŸ’€

Removes volume dependencies (like replication). Breaking up with the dependant, respectfully βœ‚οΈ

  • --vol <VOL_ID> β€” Required. The ID of volume to remove dependency.

✨ volume-access-group ✨

Lists the access group(s) that have access to the provided volume. Who's on the guest list, bestie? πŸŽ€

  • --vol <VOL_ID> β€” Required. The ID of volume to query access.

πŸ’– volume-mask πŸ’–

Grants an access group RW access to a specific volume. Like LUN masking or NFS export, iykyk.

  • --vol <VOL_ID> β€” Required. The ID of volume to access.
  • --ag <AG_ID> β€” Required. The ID of access group to grant.

πŸ™ˆ volume-unmask πŸ™ˆ

Revokes an access group's RW access to a specified volume. Not me taking the invite back 😭

  • --vol <VOL_ID> β€” Required. The ID of volume to revoke.
  • --ag <AG_ID> β€” Required. The ID of access group to revoke.

πŸ”₯ volume-enable πŸ”₯

Enables block access of the specified volume. Go off, volume πŸ‘‘

  • --vol <VOL_ID> β€” Required. The ID of volume to enable access.

🌈 volume-disable 🌈

Disables block access of the specified volume. Nap time πŸ›Œ

  • --vol <VOL_ID> β€” Required. The ID of volume to disable access.

⭐ volume-raid-info ⭐

Queries RAID information for a given volume. Receipts, please 🧾

  • --vol <VOL_ID> β€” Required. The ID of volume to query.

πŸ“ pool-member-info πŸ“

Queries RAID information for a given pool. Same vibe, different container 🫢

  • --pool <POOL_ID> β€” Required. The ID of pool to query.

πŸ’œ access-group-create πŸ’œ

Creates an access group. New friend group just dropped πŸŽ‰

  • --name <AG_NAME> β€” Required. The human friendly name for new access group.
  • --init <INIT_ID> β€” Required. The first initiator ID of new access group. WWPN or iSCSI IQN.
  • --sys <SYS_ID> β€” Required. The ID of system where this access group should reside on.

πŸŽ€ access-group-add πŸŽ€

Adds an initiator to an access group. Pull up, you're in the group chat now πŸ“±

  • --ag <AG_ID> β€” Required. ID of access group.
  • --init <INIT_ID> β€” Required. ID of initiator to add. WWPN or iSCSI IQN.

πŸ’… access-group-remove πŸ’…

Removes an initiator from an access group. Left on read, respectfully.

  • --ag <AG_ID> β€” Required. ID of access group.
  • --init <INIT_ID> β€” Required. ID of initiator to remove.

🧚 access-group-delete 🧚

Deletes an access group. Gone, poof, no trace ✨

  • --ag <AG_ID> β€” Required. ID of access group to delete.

🌸 access-group-volumes 🌸

Lists the volumes that the access group has been granted access to. Their whole roster πŸ“‹

  • --ag <AG_ID> β€” Required. The ID of access group to query.

πŸ¦‹ iscsi-chap πŸ¦‹

Configures ISCSI inbound/outbound CHAP authentication. Passwords but make it enterprise πŸ”

  • --init <INIT_ID> β€” Required. The ID of iSCSI initiator to configure.
  • --in-user <IN_USER> β€” Optional. Inbound CHAP user name.
  • --in-pass <IN_PASS> β€” Optional. Inbound CHAP password.
  • --out-user <OUT_USER> β€” Optional. Outbound CHAP user name.
  • --out-pass <OUT_PASS> β€” Optional. Outbound CHAP password.

πŸ’– fs-create πŸ’–

Creates a filesystem. Baby's first FS 🍼

  • --name <NAME> β€” Required. Human friendly name for new filesystem.
  • --size <SIZE> β€” Required. Volume size (See SIZE OPTION for allowed formats).
  • --pool <POOL_ID> β€” Required. ID of pool to hold the new filesystem.

πŸ’€ fs-delete πŸ’€

Deletes a filesystem. It's over πŸ’”

  • --fs <FS_ID> β€” Required. ID of the filesystem to delete.

⭐ fs-resize ⭐

Resizes a filesystem. Glow up, but for storage πŸ’…

  • --fs <FS_ID> β€” Required. ID of the filesystem to resize.
  • --size <NEW_SIZE> β€” Required. New size of filesystem. See SIZE OPTION for allowed formats.

🌈 fs-export 🌈

Exports a filesystem via NFS. Sharing is caring, fr fr 🀝

  • --fs <FS_ID> β€” Required. ID of the filesystem to export.
  • --exportpath <EXPORT_PATH> β€” Optional. NFS server export path. e.g. '/foo/bar'.
  • --anonuid <ANONY_UID> β€” Optional. The UID (User ID) to map to anonymous user.
  • --anongid <ANONY_GID> β€” Optional. The GID (Group ID) to map to anonymous user.
  • --auth-type <AUTH_TYPE> β€” Optional. NFS client authentication type. This is just a place holder, not supported yet. Not me showing up with no outfit on πŸ™ˆ
  • --root-host <ROOT_HOST> β€” Optional. Repeatable. The host/IP has root access. For two or more hosts/IPs: --root-host hostA --root-host hostB.
  • --ro-host <RO_HOST> β€” Optional. Repeatable. The host/IP has read only access. For two or more hosts/IPs: '--ro-host hostA --ro-host hostB'.
  • --rw-host <RW_HOST> β€” Optional. Repeatable. The host/IP has read/write access. For two or more hosts/IPs: --rw-host hostA --rw-host hostB.

πŸŽ€ fs-unexport πŸŽ€

Removes an NFS export. Uninvited πŸ’Œ

  • --export <EXPORT_ID> β€” Required. ID of the export to unexport.

🫢 fs-clone 🫢

Creates a file system clone. The 'clone' means a point in time read writeable space efficient copy of data, AKA. read-writable snapshot. Main character duplication arc πŸ‘―

  • --src-fs <SRC_FS_ID> β€” Required. The ID of the filesystem to clone.
  • --dst-name <DST_FS_NAME> β€” Required. The name for newly created destination file system.
  • --backing-snapshot <BE_SS_ID> β€” Optional. Make a FS clone using a previously created snapshot.

🧚 fs-snap-create 🧚

Creates a snapshot of a specified filesystem. A snapshot is defined as a read only space efficient point in time copy (PIT) of a filesystem. The source filesystem remains modifiable. Frozen in time but the original keeps living its life ✨

  • --name <SNAP_NAME> β€” Required. The human friendly name of new snapshot.
  • --fs <FS_ID> β€” Required. The ID of filesystem to create snapshot against.

πŸ’œ fs-snap-delete πŸ’œ

Deletes a snapshot. Bye bestie πŸ‘‹

  • --snap <SNAP_ID> β€” Required. The ID of snapshot to delete.
  • --fs <FS_ID> β€” Required. The ID of filesystem.

πŸ”₯ fs-snap-restore πŸ”₯

Restores a FS or specified files to a previous snapshot state. This will discard all the changes to the filesystem since the snapshot if specific files are not specified in restore.

Bestie. Listen. If you don't name specific files, everything since that snapshot is gone. That's the deal. Be sure before you hit it 😭
  • --fs <FS_ID> β€” Required. The ID of filesystem to restore.
  • --snap <SNAP_ID> β€” Required. The ID of snapshot to restore.
  • --file <FILE_PATH> β€” Optional. Repeatable. With this option defined, will only restore the defined file(s). --file fileA --file pathB.
  • --fileas <NEW_FILE_PATH> β€” Optional. Repeatable. With this option defined, the restored file will be saved to the specified path and filename, eg. '--file fileA --fileas old_fileA '.

🌸 fs-dependants 🌸

Returns True if a child dependency (snapshot or clone) exists. Are there children? Check the group chat πŸ‘€

  • --fs <FS_ID> β€” Required. The ID of filesystem to query.
  • --file <FILE_PATH> β€” Optional. Repeatable. Only check for dependencies on specific file(s), eg. '--file fileA --file pathB'.

πŸ’€ fs-dependants-rm πŸ’€

Removes filesystem dependencies (snapshot or clone). Cutting the cord βœ‚οΈ

  • --fs <FS_ID> β€” Required. The ID of filesystem to remove dependency.
  • --file <FILE_PATH> β€” Optional. Repeatable. Only remove dependencies on specific file(s), eg. '--file fileA --file pathB'.

πŸ“ file-clone πŸ“

Creates a clone of a file (thin provisioned).

Note: --src and --dst need to be paired eg. '--src fileA --src fileB --dst fileA_clone --dst fileB_clone'.

  • --fs <FS_ID> β€” Required. The ID of filesystem to clone.
  • --src <SRC_FILE_PATH> β€” Required. Repeatable. Source file to clone (relative path).
  • --dst <DST_FILE_PATH> β€” Required. Repeatable. Destination file for clone (relative path).
  • --backing-snapshot <SNAP_ID> β€” Optional. Use the source file from previously created snapshot.

⭐ system-read-cache-pct-update ⭐

Changes the read cache percentage for a system. Turning the dials, bestie πŸŽ›οΈ

  • --sys <SYS_ID> β€” Required. ID of the system being targeted.
  • --read-pct <READ_PCT> β€” The desired percentage of read cache for the targeted system. Write cache will be automatically changed to the remaining percentage available after updating the read cache (if supported by the system).

πŸ¦‹ local-disk-list πŸ¦‹

Lists all disks found on the current local operating system.

Requires permission to open /dev/sdX as read-only β€” normally root user or disk group would have sufficient permission. So like, if it says no, that's a permissions thing, not a you thing 🫢


πŸ’… volume-cache-info πŸ’…

Queries RAM cache information for the desired volume. Spilling the tea on your cache β˜•

  • --vol <VOL_ID> β€” Required. ID of the volume to query cache information.

🧚 volume-phy-disk-cache-update 🧚

Disables or enables RAM physical disk cache of a specific volume. Flip the switch 🎚️

  • --vol <VOL_ID> β€” Required. ID of the volume to change.
  • --policy <POLICY> β€” Required. Enable or Disable.

🌈 volume-read-cache-policy-update 🌈

Disables or enables RAM read cache of a specific volume. Same energy, read edition πŸ“–

  • --vol <VOL_ID> β€” Required. ID of the volume to change.
  • --policy <POLICY> β€” Required. Enable or Disable.

πŸ‘‘ volume-write-cache-policy-update πŸ‘‘

Changes the volume write cache policy. The most ✨choices✨ option, honestly.

  • --vol <VOL_ID> β€” Required. ID of the volume to change.
  • --policy <POLICY> β€” Required. WB for write back mode, WT for write through mode, AUTO for auto mode which uses WB mode when any battery is OK and uses WT mode else.

πŸ’– local-disk-ident-led-on πŸ’–

Turns on the identification LED for the specified disk path.

Requires permission to open the disk path as read-write β€” normally root user or disk group would have sufficient permission. Light it up so you can find it in the rack πŸ’‘

  • --path <DISK_PATH> β€” Required. Disk path, like /dev/sdb.

πŸ’€ local-disk-ident-led-off πŸ’€

Turns off the identification LED for the specified disk path.

Requires permission to open the disk path as read-write β€” normally root user or disk group would have sufficient permission. Lights out πŸ›Œ

  • --path <DISK_PATH> β€” Required. Disk path, like /dev/sdb.

πŸ”₯ local-disk-fault-led-on πŸ”₯

Turns on the fault LED for the specified disk path.

Requires permission to open the disk path as read-write β€” normally root user or disk group would have sufficient permission. Red flag, but on purpose 🚨

  • --path <DISK_PATH> β€” Required. Disk path, like /dev/sdb.

🌸 local-disk-fault-led-off 🌸

Turns off the fault LED for the specified disk path.

Requires permission to open the disk path as read-write β€” normally root user or disk group would have sufficient permission. Crisis averted, LED cleared βœ…

  • --path <DISK_PATH> β€” Required. Disk path, like /dev/sdb.

✨ ALIAS ✨

okay bestie, here's the shortcut menu β€” every single one of these is just a glow-up nickname for a longer command, no cap πŸŽ€

  • ls β€” alias of list --type systems
  • lp β€” alias of list --type pools
  • lv β€” alias of list --type volumes
  • ld β€” alias of list --type disks
  • la β€” alias of list --type access_groups
  • lf β€” alias of list --type fs
  • lt β€” alias of list --type target_ports
  • lb β€” alias of list --type batteries
  • c β€” alias of capabilities
  • p β€” alias of plugin-info
  • vc β€” alias of volume-create
  • vrc β€” alias of volume-raid-create
  • vrcc β€” alias of volume-raid-create-cap
  • vilon β€” alias of volume-ident-led-on
  • viloff β€” alias of volume-ident-led-off
  • vd β€” alias of volume-delete
  • vr β€” alias of volume-resize
  • vm β€” alias of volume-mask
  • vu β€” alias of volume-unmask
  • ve β€” alias of volume-enable
  • vi β€” alias of volume-disable
  • vri β€” alias of volume-raid-info
  • pmi β€” alias of pool-member-info
  • ac β€” alias of access-group-create
  • aa β€” alias of access-group-add
  • ar β€” alias of access-group-remove
  • ad β€” alias of access-group-delete
  • srcps β€” alias of system-read-cache-pct-update
  • ldl β€” alias of local-disk-list
  • vci β€” alias of volume-cache-info
  • vpdcu β€” alias of volume-phy-disk-cache-update
  • vrcpu β€” alias of volume-read-cache-policy-update
  • vwcpu β€” alias of volume-write-cache-policy-update
  • ldilon β€” alias of local-disk-ident-led-on
  • ldiloff β€” alias of local-disk-ident-led-off
  • ldflon β€” alias of local-disk-fault-led-on
  • ldfloff β€” alias of local-disk-fault-led-off

πŸ’Ύ SIZE OPTION πŸ’Ύ

  • --size <SIZE> β€” how much storage space you want, bestie. the format is <number> + <prefix>. for example: "10GiB", "20.5MB". if you don't put a postfix it means bytes, periodt. valid prefixes are:
KiB,                    # 2^10 Bytes
MiB,                    # 2^20 Bytes
GiB,                    # 2^30 Bytes
TiB,                    # 2^40 Bytes
PiB,                    # 2^50 Bytes
EiB,                    # 2^60 Bytes
KB,                     # 10^3 Bytes
MB,                     # 10^6 Bytes
GB,                     # 10^9 Bytes
TB,                     # 10^12 Bytes
PB,                     # 10^15 Bytes
EB,                     # 10^17 Bytes

these prefixes are also supported, but lowkey not recommended:

K, M, G, T, P, E,       # equal to KiB, MiB, and etc
k, m, g, t, p, e,       # equal to KiB, MiB, and etc

πŸ“ FILES πŸ“

  • ~/.lsmcli β€” the lsmcli config file, holding name-value pairs separated by =. the only config option supported rn is uri, like 'uri=targetd://user@storage.example.com'.
config options in .lsmcli only get used if they're not overridden by a command-line option or an environment variable. priority order exists, and she respects it πŸ’…

🌈 EXAMPLES 🌈 (command output omitted for brevity)

Simulator, list pools (no password required)

$ lsmcli -u sim:// -l POOLS

Targetd, list volumes (prompting for password)

$ lsmcli -u targetd://root@host/ -l VOLUMES -P

SMI-S, list systems (prompting for password)

$ lsmcli -u smispy://username@host:5988/?namespace=root/interop \
        -l SYSTEMS -P

Targetd, list pools (using env variables for URI and password)

$ export LSMCLI_URI=targetd://username@host:18700
$ export LSMCLI_PASSWORD=<password>
$ lsmcli -l POOLS

SMI-S, create volume (using environment variables for URI and password)

$ export LSMCLI_URI='smispy+ssl://user@host:5989?namespace=root/emc'
$ export LSMCLI_PASSWORD=<password>
$ lsmcli volume-create --name volume_name --size 1TiB --pool default

🌱 ENVIRONMENT 🌱

  • LSMCLI_URI β€” the URI for the storage array in question. yes, the one πŸ‘€
  • LSMCLI_PASSWORD β€” the password to use for the array.

πŸ‘― VOLUME REPLICATION TYPES πŸ‘―

  • CLONE β€” a point in time, read writeable, space efficent copy of data.
  • COPY β€” a full bitwise copy of the data. it occupies the full space. no shortcuts, no sharing, just vibes and bytes.
  • MIRROR_SYNC β€” continously updated, realtime with both copies having identical data.
  • MIRROR_ASYNC β€” continously updated, with a varying amount of delay and data delta between the source and target.

πŸ“ NOTES πŸ“

Optional search argument

when you specify an optional search argument, it's not considered an error if no search results are found β€” like, say, you typed a system id that doesn't exist. the exit code will be 0. so don't panic, she's not mad at you 🫢

Plugin installation

plugins are installed individually, except for the simulators which are always included. the simulators are the ones who always show up to the party πŸ’–

Secure sockets layer (SSL)

all of the plugins (except the simulator) support SSL when communicating from the plugin to the array. how do you get it? add +ssl to the plugin, and usually also pick a different port number from the non-SSL communications. like:

$ lsmcli -u smispy+ssl://username@host:5989/?namespace=interop \
        list --type SYSTEMS -P

SSL error: certificate verify failed

when you use the SMI-S plugin with SSL against a self-signed SMI-S provider, lsmcli normally quits with 'SSL error: certificate verify failed'. please contact SMI-S provider support to setup the self-signed certificate in your system. if you'd rather bypass the certificate check, add 'no_ssl_verify=yes' at the end of the URI, for example:

smispy+ssl://admin@emc-smi:5989?namespace=root/emc&no_ssl_verify=yes
bestie, that bypass is exactly what it sounds like β€” you're telling her to skip the certificate check. only do it if you know what you're doing, iykyk πŸ’€

πŸ› BUGS πŸ›

please report bugs to <libstoragemgmt-devel@lists.fedorahosted.org> β€” she wants to know, fr fr πŸ¦‹


πŸ‘‘ AUTHOR πŸ‘‘

  • Tony Asleson <tasleson@redhat.com>
  • Gris Ge <fge@redhat.com>

and that's the whole page, bestie!! this gorgeous thing is lsmcli version 1.10.3, dated December 2018, and you can find it filed under LSMCLI(1). go forth and manage your storage, you absolute icon πŸŒΈπŸ’…βœ¨

πŸ“¦ where this page comes from