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) | |||
[0].smartData | X | full S.M.A.R.T data from smartctl requires at least smartmontools 7.0 (see Known Issues) |
|||||
Example
[ { device: '/dev/nvme0n1', type: 'NVMe', name: 'SAMSUNG xxxxxxxxxxxx-xxxx', vendor: 'Samsung', size: 1024209543168, bytesPerSector: -1, totalCylinders: -1, totalHeads: -1, totalSectors: -1, totalTracks: -1, tracksPerCylinder: -1, sectorsPerTrack: -1, firmwareRevision: '', serialNum: '...serial....', interfaceType: 'PCIe', smartStatus: 'unknown', smartData: { json_format_version: [Array], smartctl: [Object], device: [Object], model_name: 'SAMSUNG xxxxxxxxxxxx-xxxx', serial_number: '...serial....', ... } }, { ... } ] | |||||||
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, ...) | ||||
Example
[ { name: 'nvme0n1', type: 'disk', fstype: '', mount: '', size: 1024209543168, physical: 'SSD', uuid: '', label: '', model: 'SAMSUNG xxxxxxxxxxxx-xxxx', serial: '... serial ...', removable: false, protocol: 'nvme', group: undefined }, { ... } ] | |||||||
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) | ||||
Example
{ // first call rIO: 899825, wIO: 932331, tIO: 1832156, rIO_sec: -1, wIO_sec: -1, tIO_sec: -1, ms: 0 } { // second call rIO: 899863, wIO: 932331, tIO: 1832194, rIO_sec: 38.5395537525355, wIO_sec: 0, tIO_sec: 38.5395537525355, ms: 986 }... |
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 | ||
Example
[ { fs: '/dev/md2', type: 'ext4', size: 972577361920, used: 59142635520, use: 6.08, mount: '/' }, { ... } ] | |||||||
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 | |||
Example
{ max: 6566555, allocated: 1856, available: 0 } | |||||||
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) | ||||
Example
{ // first call rx: 14015849472, wx: 15316003328, tx: 29331852800, rx_sec: -1, wx_sec: -1, tx_sec: -1, ms: 0 } { // second call rx: 14015849472, wx: 15316007424, tx: 29331856896, rx_sec: 0, wx_sec: 4083.748753738784, tx_sec: 4083.748753738784, ms: 1003 }... |
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.