In this section you will learn how to get disks information, file system information, disk I/O stats and file system stats:
For function reference and examples we assume, that we imported systeminformation as follows:
const si = require('systeminformation');
Disk Layout, Block Devices and Disks IO
All functions in this section return a promise or can be called with a callback function (parameter cb in the function reference)
| Function | Result object | Linux | BSD | Mac | Win | Sun | Comments |
|---|---|---|---|---|---|---|---|
| si.diskLayout(cb) | [{...}] | X | X | X | physical disk layout (array) | ||
| [0].device | X | X | e.g. /dev/sda | ||||
| [0].type | X | X | X | HD, SSD, NVMe | |||
| [0].name | X | X | X | disk name | |||
| [0].vendor | X | X | vendor/producer | ||||
| [0].size | X | X | X | size in bytes | |||
| [0].totalCylinders | X | total cylinders | |||||
| [0].totalHeads | X | total heads | |||||
| [0].totalTracks | X | total tracks | |||||
| [0].totalSectors | X | total sectors | |||||
| [0].tracksPerCylinder | X | tracks per cylinder | |||||
| [0].sectorsPerTrack | X | sectors per track | |||||
| [0].bytesPerSector | X | bytes per sector | |||||
| [0].firmwareRevision | X | X | X | firmware revision | |||
| [0].serialNum | X | X | X | serial number | |||
| [0].interfaceType | X | X | SATA, PCIe, ... | ||||
| [0].smartStatus | X | X | X | S.M.A.R.T Status (see Known Issues) | |||
| si.blockDevices(cb) | [{...}] | X | X | X | returns array of disks, partitions, raids and roms |
||
| [0].name | X | X | X | name | |||
| [0].type | X | X | X | type | |||
| [0].fstype | X | X | X | file system type (e.g. ext4) | |||
| [0].mount | X | X | X | mount point | |||
| [0].size | X | X | X | size in bytes | |||
| [0].physical | X | X | X | physical type (HDD, SSD, CD/DVD) | |||
| [0].uuid | X | X | X | UUID | |||
| [0].label | X | X | X | label | |||
| [0].model | X | X | model | ||||
| [0].serial | X | X | serial | ||||
| [0].removable | X | X | X | serial | |||
| [0].protocol | X | X | protocol (SATA, PCI-Express, ...) | ||||
| si.disksIO(cb) | {...} | X | X | current transfer stats | |||
| rIO | X | X | read IOs on all mounted drives | ||||
| wIO | X | X | write IOs on all mounted drives | ||||
| tIO | X | X | write IOs on all mounted drives | ||||
| rIO_sec | X | X | read IO per sec (* see notes) | ||||
| wIO_sec | X | X | write IO per sec (* see notes) | ||||
| tIO_sec | X | X | total IO per sec (* see notes) | ||||
| ms | X | X | interval length (for per second values) |
File System and File System Stats
| Function | Result object | Linux | BSD | Mac | Win | Sun | Comments |
|---|---|---|---|---|---|---|---|
| si.fsSize(cb) | [{...}] | X | X | X | X | returns array of mounted file systems | |
| [0].fs | X | X | X | X | name of file system | ||
| [0].type | X | X | X | X | type of file system | ||
| [0].size | X | X | X | X | sizes in bytes | ||
| [0].used | X | X | X | X | used in bytes | ||
| [0].use | X | X | X | X | used in % | ||
| [0].mount | X | X | X | X | mount point | ||
| si.fsOpenFiles(cb) | {...} | X | X | X | count max/allocated file descriptors | ||
| max | X | X | X | count max | |||
| allocated | X | X | X | count allocated | |||
| available | X | X | X | count available | |||
| si.fsStats(cb) | {...} | X | X | current transfer stats | |||
| rx | X | X | bytes read since startup | ||||
| wx | X | X | bytes written since startup | ||||
| tx | X | X | total bytes read + written since startup | ||||
| rx_sec | X | X | bytes read / second (* see notes) | ||||
| wx_sec | X | X | bytes written / second (* see notes) | ||||
| tx_sec | X | X | total bytes reads + written / second | ||||
| ms | X | X | interval length (for per second values) |
Getting correct stats values
In disksIO() and fsStats() the results / sec. values (rx_sec, IOPS, ...) are calculated correctly beginning with the second call of the function. It is determined by calculating the difference of transferred bytes / IOs divided by the time between two calls of the function.
The first time you are calling one of this functions, you will get -1 for transfer rates. The second time, you should then get statistics based on the time between the two calls ...
So basically, if you e.g. need a values for filesystem stats stats every second, your code should look like this:
const si = require('systeminformation');
setInterval(function() {
si.fsStats().then(data => {
console.log(data);
})
}, 1000)
Beginning with the second call, you get file system transfer values per second.