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.