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].temperature | X | S.M.A.R.T temperature (if available) | |||||
| [0].smartData | X | 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: null,
totalCylinders: null,
totalHeads: null,
totalSectors: null,
totalTracks: null,
tracksPerCylinder: null,
sectorsPerTrack: null,
firmwareRevision: '',
serialNum: '...serial....',
interfaceType: 'PCIe',
smartStatus: 'unknown',
smartData: {
json_format_version: [Array],
smartctl: [Object],
device: [Object],
model_name: 'SAMSUNG xxxxxxxxxxxx-xxxx',
serial_number: '...serial....', // full structure
... // see index.d.ts
}
},
{
...
}
]
|
|||||||
| 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].guid | X | volume GUID path (windows only, see notes) | |||||
| [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, ...) | ||||
| [0].group | X | Raid group member (e.g. md1) | |||||
| [1].device | X | X | X | Physical device mapped to (e.g. /dev/sda) | |||
Example
[
{
name: 'nvme0n1',
type: 'disk',
fsType: '',
mount: '',
size: 1024209543168,
physical: 'SSD',
uuid: '',
guid: '',
label: '',
model: 'SAMSUNG xxxxxxxxxxxx-xxxx',
serial: '... serial ...',
removable: false,
protocol: 'nvme',
group: '',
device: 'nvme0n1'
},
{
...
}
]
|
|||||||
| si.disksIO(cb) | { ...} | X | X | X | X | current transfer stats | |
| rIO | X | X | X | X | read IOs on all mounted drives | ||
| wIO | X | X | X | X | write IOs on all mounted drives | ||
| tIO | X | X | X | X | write IOs on all mounted drives | ||
| rIO_sec | X | X | X | X | read IO operations per sec, not bytes (* see notes) | ||
| wIO_sec | X | X | X | X | write IO operations per sec, not bytes (* see notes) | ||
| tIO_sec | X | X | X | X | total IO operations per sec, not bytes (* see notes) | ||
| rWaitTime | X | X | X | read IO request time in ms during the interval, null on the first call | |||
| wWaitTime | X | X | X | write IO request time in ms during the interval, null on the first call | |||
| tWaitTime | X | X | X | total IO request time in ms during the interval, null on the first call | |||
| rWaitPercent | X | X | X | read IO request time percent | |||
| wWaitPercent | X | X | X | write IO request time percent | |||
| tWaitPercent | X | X | X | total IO request time percent | |||
| ms | X | X | X | X | interval length (for per second values) | ||
Example
{ // first call
rIO: 899825,
wIO: 932331,
tIO: 1832156,
rIO_sec: null,
wIO_sec: null,
tIO_sec: null,
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(drive, cb) | [ { ...}] | X | X | X | X | returns array of mounted file systems drive parameter is optional |
|
| [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].available | X | X | X | X | available in bytes | ||
| [0].use | X | X | X | X | used in % | ||
| [0].mount | X | X | X | X | mount point | ||
| [0].rw | X | X | X | X | Read/Write (false if read only) | ||
Example
[
{
fs: '/dev/md2',
type: 'ext4',
size: 972577361920,
used: 59142635520,
available: 913434726400,
use: 6.08,
mount: '/',
rw: true
},
{
...
}
]
|
|||||||
| si.fsOpenFiles(cb) | { ...} | X | X | X | X | count max/allocated file descriptors | |
| max | X | X | X | count max | |||
| allocated | X | X | X | X | count allocated | ||
| available | X | X | X | count available | |||
Example
{
max: 6566555,
allocated: 1856,
available: 0
}
|
|||||||
| si.fsStats(cb) | { ...} | X | X | X | current transfer stats | ||
| rx | X | X | X | bytes read since startup | |||
| wx | X | X | X | bytes written since startup | |||
| tx | X | X | X | total bytes read + written since startup | |||
| rx_sec | X | X | X | bytes read / second (* see notes) | |||
| wx_sec | X | X | X | bytes written / second (* see notes) | |||
| tx_sec | X | X | X | total bytes reads + written / second | |||
| ms | X | X | X | interval length (for per second values) | |||
Example
{ // first call
rx: 14015849472,
wx: 15316003328,
tx: 29331852800,
rx_sec: null,
wx_sec: null,
tx_sec: null,
ms: 0
}
{ // second call
rx: 14015849472,
wx: 15316007424,
tx: 29331856896,
rx_sec: 0,
wx_sec: 4083.748753738784,
tx_sec: 4083.748753738784,
ms: 1003
}...
|
|||||||
Volume GUID (Windows)
On Windows, blockDevices() also returns the volume GUID path of a drive in guid, e.g. \\?\Volume{a6b89b02-753b-4f4b-91e6-5b3b6e290017}\. This is the stable name of a volume - independent of its drive letter - and it is what tools like mountvol expect when a volume is mounted or unmounted. It is read from Win32_Volume and matched to the drive by its letter.
The field stays empty when no volume entry belongs to the drive (e.g. network drives) and on all other platforms. Note that uuid is a different value: it keeps the file system serial number (VolumeSerialNumber) and is unchanged. Volumes without a drive letter (EFI, recovery partitions) are not part of the result, as they are not reported as logical disks.
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.