One of the lesser publicized but highly versatile tools in OneFS is the ‘isi get’ command line utility. It can often prove invaluable for generating a vast array of useful information about OneFS filesystem objects. In its most basic form, the command outputs this following information:
- Protection policy
- Protection level
- Layout strategy
- Write caching strategy
- File name
For example:
# isi get /ifs/data/file2.txt POLICY LEVEL PERFORMANCE COAL FILE default 4+2/2 concurrency on file2.txt
Here’s what each of these categories represents:
POLICY: Indicates the requested protection for the object, in this case a text file. This policy field is displayed in one of three colors:
Requested Protection Policy | Description |
Green | Fully protected |
Yellow | Degraded protection under a mirroring policy |
Red | Under-protection using FEC parity protection |
LEVEL: Displays the current actual on-disk protection of the object. This can be either FEC parity protection or mirroring. For example:
Protection Level | Description |
+1n | Tolerate failure of 1 drive OR 1 node (Not Recommended) |
+2d:1n | Tolerate failure of 2 drives OR 1 node |
+2n | Tolerate failure of 2 drives OR 2 nodes |
+3d:1n | Tolerate failure of 3 drives OR 1 node |
+3d:1n1d | Tolerate failure of 3 drives OR 1 node AND 1 drive |
+3n | Tolerate failure of 3 drives or 3 nodes |
+4d:1n | Tolerate failure of 4 drives or 1 node |
+4d:2n | Tolerate failure of 4 drives or 2 nodes |
+4n | Tolerate failure of 4 nodes |
2x to 8x | Mirrored over 2 to 8 nodes, depending on configuration |
PERFORMANCE: Indicates the on-disk layout strategy, for example:
Data Access Setting | Description | On Disk Layout | Caching |
Concurrency | Optimizes for current load on cluster, featuring many simultaneous clients. Recommended for mixed workloads. | Stripes data across the minimum number of drives required to achieve the configured data protection level. | Moderate prefetching |
Streaming | Optimizes for streaming of a single file. For example, fast reading by a single client. | Stripes data across a larger number of drives. | Aggressive prefetching |
Random | Optimizes for unpredictable access to a file. Performs almost no cache prefetching. | Stripes data across the minimum number of drives required to achieve the configured data protection level. | Little to no prefetching |
COAL: Indicates whether the Coalescer, OneFS’s NVRAM based write cache, is enabled. The coalescer provides failure-safe buffering to ensure that writes are efficient and read-modify-write operations avoided.
The isi get command also provides a number of additional options to generate more detailed information output. As such, the basic command syntax for isi get is as follows:
isi get {{[-a] [-d] [-g] [-s] [{-D | -DD | -DDC}] [-R] <path>} | {[-g] [-s] [{-D | -DD | -DDC}] [-R] -L <lin>}}
Here’s the description for the various flags and options available for the command:
Command Option | Description |
-a | Displays the hidden “.” and “..” entries of each directory. |
-d | Displays the attributes of a directory instead of the contents. |
-g | Displays detailed information, including snapshot governance lists. |
-s | Displays the protection status using words instead of colors. |
-D | Displays more detailed information. |
-DD | Includes information about protection groups and security descriptor owners and groups.
|
-DDC | Includes cyclic redundancy check (CRC) information. |
-L <LIN> | Displays information about the specified file or directory. Specify as a file or directory LIN. |
-O | Displays the logical overlay information and compressed block count when viewing a compressed file’s details. |
-R | Displays information about the subdirectories and files of the specified directories. |
The following command shows the detailed properties of a directory, /ifs/data. Note that the output has been truncated slightly to aid readability:
# isi get -D data POLICY W LEVEL PERFORMANCE COAL ENCODING FILE IADDRS default 4x/2 concurrency on N/A ./ <1,36,268734976:512>, <1,37,67406848:512>, <2,37,269256704:512>, <3,37,336369152:512> ct: 1459203780 rt: 0 ************************************************* * IFS inode: [ 1,36,268734976:512, 1,37,67406848:512, 2,37,269256704:512, 3,37,336369152:512 ] ************************************************* * Inode Version: 6 * Dir Version: 2 * Inode Revision: 6 * Inode Mirror Count: 4 * Recovered Flag: 0 * Restripe State: 0 * Link Count: 3 * Size: 54 * Mode: 040777 * Flags: 0xe0 * Stubbed: False * Physical Blocks: 0 * LIN: 1:0000:0004 * Logical Size: None * Shadow refs: 0 * Do not dedupe: 0 * Last Modified: 1461091982.785802190 * Last Inode Change: 1461091982.785802190 * Create Time: 1459203780.720209076 * Rename Time: 0 * Write Caching: Enabled * Parent Lin 2 * Parent Hash: 763857 * Snapshot IDs: None * Last Paint ID: 47 * Domain IDs: None * LIN needs repair: False * Manually Manage: * Access False * Protection True * Protection Policy: default * Target Protection: 4x * Disk pools: policy any pool group ID -> data target z x410_136tb_1.6tb-ssd_256gb:32(32), metadata target x410_136tb_1.6tb-ssd_256gb:32(32) * SSD Strategy: metadata-write { * SSD Status: complete * Layout drive count: 0 * Access pattern: 0 * Data Width Device List: * Meta Width Device List: * * File Data (78 bytes): * Metatree Depth: 1 * Dynamic Attributes (40 bytes): ATTRIBUTE OFFSET SIZE New file attribute 0 23 Isilon flags v2 23 3 Disk pool policy ID 26 5 Last snapshot paint time 31 9 ************************************************* * NEW FILE ATTRIBUTES | * Access attributes: active * Write Cache: on * Access Pattern: concurrency * At_r: 0 * Protection attributes: active * Protection Policy: default * Disk pools: policy any pool group ID * SSD Strategy: metadata-write * *************************************************
Here is what some of these lines indicate:
- OneFS command to display the file system properties of a directory or file.
- The directory’s data access pattern is set to concurrency
- Write caching (Coalescer) is turned on.
- Inode on-disk locations.
- Primary LIN.
- Indicates the disk pools that the data and metadata are targeted to.
- The SSD strategy is set to metadata-write.
- Files that are added to the directory are governed by these settings, most of which can be changed by applying a file pool policy to the directory.
From the WebUI, a subset of the ‘isi get –D’ output is also available from the OneFS File Explorer. This can be accessed by browsing to File System > File System Explorer and clicking on ‘View Property Details’ for the file system object of interest.
One question that is frequently asked is how to find where a file’s inodes live on the cluster. The ‘isi get -D’ command output makes this fairly straightforward to answer. Take the file /ifs/data/file1, for example:
# isi get -D /ifs/data/file1 | grep -i "IFS inode" * IFS inode: [ 1,9,8388971520:512, 2,9,2934243840:512, 3,8,9568206336:512 ]
This shows the three inode locations for the file in the *,*,*:512 notation. Let’s take the first of these:
1,9,8388971520:512
From this, we can deduce the following:
- The inode is on node 1, drive 9 (logical drive number).
- The logical inode number is 8388971520.
- It’s an inode block that’s 512 bytes in size (Note: OneFS data blocks are 8kB in size).
Another example of where isi get can be useful is in mapping between a file system object’s pathname and its LIN (logical inode number). This might be for translating a LIN returned by an audit logfile or job engine report into a valid filename, or finding an open file from vnodes output, etc.
For example, say you wish to know which configuration file is being used by the cluster’s DNS service:
First, inspect the busy_vnodes output and filter for DNS:
# sysctl efs.bam.busy_vnodes | grep -i dns vnode 0xfffff8031f28baa0 (lin 1:0066:0007) is fd 19 of pid 4812: isi_dnsiq_d
This, amongst other things, provides the LIN for the isi_dnsiq_d process. The output can be further refined to just the LIN address as such:
# sysctl efs.bam.busy_vnodes | grep -i dns | awk '{print $4}' | sed -E 's/\)//' 1:0066:0007
This LIN address can then be fed into ‘isi get’ using the ‘-L’ flag, and a valid name and path for the file will be output:
# isi get -L `sysctl efs.bam.busy_vnodes | grep -i dns | grep -v "(lin 0)" | awk '{print $4}' | sed -E 's/\)//'` A valid path for LIN 0x100660007 is /ifs/.ifsvar/modules/flexnet/flx_config.xml
This confirms that the XML configuration file in use by isi_dnsiq_d is flx_config.xml.
OneFS 8.2.1 and later also sees the addition of a ‘-O’ logical overlay flag to ‘isi get’ CLI utility for viewing a file’s compression details. For example:
# isi get –DDO file1 * Size: 167772160 * PhysicalBlocks: 10314 * LogicalSize: 167772160 PROTECTION GROUPS lbn0: 6+2/2 2,11,589365248:8192[COMPRESSED]#6 0,0,0:8192[COMPRESSED]#10 2,4,691601408:8192[COMPRESSED]#6 0,0,0:8192[COMPRESSED]#10 Metatree logical blocks: zero=32 shadow=0 ditto=0 prealloc=0 block=0 compressed=64000
The logical overlay information is described under the ‘protection groups’ output. This example shows a compressed file where the sixteen-block chunk is compressed down to six physical blocks (#6) and ten sparse blocks (#10). Under the ‘Metatree logical blocks’ section, a breakdown of the block types and their respective quantities in the file is displayed – including a count of compressed blocks.
When compression has occurred, the ‘df’ CLI command will report a reduction in used disk space and an increase in available space. The ‘du’ CLI command will also report less disk space used.
A file that for whatever reason cannot be compressed will be reported as such:
4,6,900382720:8192[INCOMPRESSIBLE]#1
So, to recap, the ‘isi get’ command provides a whole heap of useful information about an individual, or set of, file system objects.