Disks and File System

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 network transfer values per second.