Documentation
¶
Index ¶
- Constants
- Variables
- type BlockDevice
- type CapacityInformation
- type DependentBlockDevices
- type DevLink
- type DeviceAttribute
- type DeviceMapperInformation
- type DeviceUsage
- type FileSystemInformation
- type Hierarchy
- type Identifier
- type NodeAttribute
- type PartitionInformation
- type SMARTStats
- type Status
- type StorageEngine
- type TemperatureInformation
Constants ¶
const ( // HostName is the hostname of the system on which this BD is present HostName string = "hostname" // NodeName is the nodename (may be FQDN) on which this BD is present NodeName string = "nodename" // ZoneName is the zone in which the system is present. // // NOTE: Valid only for cloud providers ZoneName string = "zone" // RegionName is the region in which the system is present. // // NOTE: Valid only for cloud providers RegionName string = "region" )
const ( // SparseBlockDeviceType is the sparse blockdevice type SparseBlockDeviceType = "sparse" // BlockDeviceType is the type for blockdevice. BlockDeviceType = "blockdevice" // BlockDevicePrefix is the prefix used in UUIDs BlockDevicePrefix = BlockDeviceType + "-" // The following blockdevice types correspond to the types as seen by the host system // BlockDeviceTypeDisk represents a disk type BlockDeviceTypeDisk = "disk" // BlockDeviceTypePartition represents a partition BlockDeviceTypePartition = "partition" // BlockDeviceTypeLoop represents a loop device BlockDeviceTypeLoop = "loop" // BlockDeviceTypeDMDevice is a dm device BlockDeviceTypeDMDevice = "dm" // BlockDeviceTypeLVM is an lvm device type BlockDeviceTypeLVM = "lvm" // BlockDeviceTypeCrypt is a LUKS volume BlockDeviceTypeCrypt = "crypt" // BlockDeviceTypeMultiPath is a multipath device BlockDeviceTypeMultiPath = "mpath" )
const ( // DriveTypeHDD represents a rotating hard disk drive DriveTypeHDD = "HDD" // DriveTypeSSD represents a solid state drive DriveTypeSSD = "SSD" // DriveTypeUnknown is used when the drive type of the disk could not be determined. DriveTypeUnknown = "Unknown" )
const ( // Active means blockdevice is available on the host machine Active string = "Active" // Inactive means blockdevice is currently not available on the host machine Inactive string = "Inactive" // Unknown means the state cannot be determined at this point of time Unknown string = "Unknown" // Claimed means the blockdevice is in use Claimed string = "Claimed" // Released means the blockdevice is not in use, but cannot be claimed, // because of some pending cleanup tasks Released string = "Released" // Unclaimed means the blockdevice is free and is available for // claiming Unclaimed string = "Unclaimed" )
Variables ¶
var DeviceMapperDeviceTypes = []string{ BlockDeviceTypeDMDevice, BlockDeviceTypeLVM, BlockDeviceTypeCrypt, BlockDeviceTypeMultiPath, }
DeviceMapperDeviceTypes is the slice of device types that uses a device mapper
Functions ¶
This section is empty.
Types ¶
type BlockDevice ¶
type BlockDevice struct {
// Identifier is the unique identifiers that can be used to identify this
// blockdevice
Identifier
// NodeAttributes contains the details of the node on which
// the BlockDevice is attached
NodeAttributes NodeAttribute
// Labels for this blockdevice. These labels will be used on the k8s resource that is created
// optional
Labels map[string]string
// FSInfo contains the file system related information of this
// BlockDevice if it exists
FSInfo FileSystemInformation
// Capacity contains the capacity related information for this blockdevice
Capacity CapacityInformation
// DevLinks contain the devlinks of this blockdevice
DevLinks []DevLink
// DeviceAttributes contains the attributes of this device, like hardcoded
// information on the disk
DeviceAttributes DeviceAttribute
// DMInfo is filled if the device is a DM device
DMInfo DeviceMapperInformation
DevUse DeviceUsage
// PartitionInfo contains details if this blockdevice is a partition
PartitionInfo PartitionInformation
// DependentDevices stores the dependent devices
DependentDevices DependentBlockDevices
SMARTInfo SMARTStats
// Status contains the state of the blockdevice
Status Status
}
BlockDevice is an internal representation of any block device present on the system. All data related to that device will be held by this struct
- Example blockdevice struct for a partition /dev/sda1 { Identifier:{ UUID:blockdevice-4c25d69f9adc868f61e3d891cf3a5613 SysPath:/sys/dev/block/8:1 DevPath:/dev/sda1 } NodeAttributes:map[hostname:my-machine] FSInfo:{ FileSystemUUID:7e7f160b-0e79-478b-b006-1ebc6d0050dd FileSystem:ext4 MountPoint:[/home] } Parent:/dev/sda Partitions:[] Holders:[] Slaves:[] Status:{ State:Active ClaimPhase:Unclaimed } }
- Example blockdevice struct for a partition that is part of an LVM { Identifier:{ UUID:blockdevice-4c25d69f9adc868f61e3d891cf3a5613 SysPath:/sys/dev/block/8:1 DevPath:/dev/sda1 } NodeAttributes:map[hostname:my-machine] FSInfo:{ FileSystemUUID:AQkPql-2MBI-O5cY-gn3O-EFvZ-66Oe-d4mnjD FileSystem:LVM2_member MountPoint:[] } Parent:/dev/sda Partitions:[] Holders:[/dev/dm-0] Slaves:[] Status:{ State:Active ClaimPhase:Unclaimed } }
- Example blockdevice struct for an LVM carved from nvme partition { Identifier:{ UUID:blockdevice-4c25d69f9adc868f61e3d891cf3a5613 SysPath:/sys/dev/block/253:0 DevPath:/dev/dm-0 } NodeAttributes:map[hostname:my-machine] FSInfo:{ FileSystemUUID:7e7f160b-0e79-478b-b006-1ebc6d0050dd FileSystem:ext4 MountPoint:[] } Parent: Partitions:[] Holders:[] Slaves:[/dev/nvme0n1p1 /dev/nvme0n1p2] Status:{ State:Active ClaimPhase:Unclaimed } }
type CapacityInformation ¶ added in v0.5.0
type CapacityInformation struct {
// Storage is the storage capacity of this blockdevice
// in bytes
Storage uint64
}
CapacityInformation holds the capacity related information for the device
type DependentBlockDevices ¶ added in v0.5.0
type DependentBlockDevices struct {
// Parent is the parent device of this blockdevice, if it exists.
// It will always be a single device.
Parent string
// Partitions is the list of partitions(again blockdevices) for
// this blockdevice, if it exists.
Partitions []string
// Holders is the list of blockdevices that are held by this blockdevice.
// eg: sda1 can hold dm-0. Then the list of sda1 will contain dm-0.
Holders []string
// Slaves is the list of blockdevices to which this blockdevice is a slave.
// Slaves are represented in SysFS under the block device layer,
// so they are dependent on the device
// eg: dm-0 is a slave to sda1. Then the list of dm-0 will contain sda1
Slaves []string
}
DependentBlockDevices contains path of all devices that are related to this BlockDevice
type DevLink ¶ added in v0.5.0
type DevLink struct {
// Kind is the type of devlink.
// Eg: by-id, by-path, by-uuid, by-partuuid
Kind string
// Links is the list of actual links that point to the device
Links []string
}
DevLink represents a type of dev link for a device. A device can have multiple kinds of devlink and each kind can have more than one link
type DeviceAttribute ¶ added in v0.5.0
type DeviceAttribute struct {
// DeviceType is the type of the blockdevice.
// Values can be sparse/disk/partition/loop/lvm/raid etc
DeviceType string
// DriveType is the type of backing drive for this blockdevice. HDD/SSD
DriveType string
// IDType is the udev ID_TYPE field. This is solely used for purpose of UUID generation
// using the old algorithm
IDType string
// PhysicalBlockSize is the physical block size in bytes
// reported by /sys/class/block/sda/queue/physical_block_size
//
// This is the unit in which the disk actually reads and writes
// the data atomically. Certain 4K sector devices may use a
// 4K 'physical_block_size' internally but expose a finer-grained
// 512 byte 'logical_block_size' to Linux. Also the current HDDs
// are advanced format (https://en.wikipedia.org/wiki/Advanced_Format)
// so they support 4k physical sector size.
PhysicalBlockSize uint32
// LogicalBlockSize is the logical block size in bytes
// reported by /sys/class/block/sda/queue/logical_block_size
//
// The smallest size the drive is able to write. This can be
// different than hw_sector_size as disks may lie about this
// to support lower/higher sector size. This is important for
// direct IOs, as IOs should be aligned on a 'logical_block_size'
// boundaries.
LogicalBlockSize uint32
// HardwareSectorSize is the hardware sector size in bytes
// reported by /sys/class/block/sda/queue/hw_sector_size
//
// This is the actual sector size of the disk
HardwareSectorSize uint32
// WWN
WWN string
// Vendor
Vendor string
// Model of the device
// Eg : PersistentDisk, Virtaul_disk, QEMU_HARDDISK, EphemeralDisk
Model string
// Serial number of the device
Serial string
// FirmwareRevision
FirmwareRevision string
// Compliance is implemented specifications version i.e. SPC-1, SPC-2, etc
Compliance string
}
DeviceAttribute represents the hardcoded information on the device. It is not gauranteed that all these fields should be present for a given blockdevice
type DeviceMapperInformation ¶ added in v1.0.0
type DeviceUsage ¶ added in v0.6.0
type DeviceUsage struct {
InUse bool
UsedBy StorageEngine
}
DeviceUsage defines if the block device is used by any known storage engines
type FileSystemInformation ¶
type FileSystemInformation struct {
// FileSystemUUID is the UUID of the filesystem on the blockdevice
FileSystemUUID string
// FileSystem is the filesystem present on the blockdevice
FileSystem string
// MountPoint is the list of mountpoints at which this blockdevice is mounted
MountPoint []string
}
FileSystemInformation contains the filesystem and mount information of blockdevice, if present
type Hierarchy ¶ added in v0.5.0
type Hierarchy map[string]BlockDevice
Hierarchy is the block device hierarchy on the system. This map will be used as in memory cache for storing the current state of all block devices on the system. This cache helps to get the details of any dependent blockdevices from a device. eg: If at a certain point, we are processing sda1 and we need to get the UUID of its parent device. We will get /dev/sda is the parent of /dev/sda1. This will be used to query the cache and get/generate the UUID of /dev/sda.
type Identifier ¶ added in v0.5.0
type Identifier struct {
// UUID is a system generated unique ID for this blockdevice
UUID string
// SysPath is the syspath of this device.
// Eg : /sys/dev/block/8:1
SysPath string
// DevPath is the name of the device in /dev
DevPath string
}
Identifier represents the various identifiers that can be used to identify this blockdevice uniquely on the host
type NodeAttribute ¶
NodeAttribute is the representing the various attributes of the machine on which this block device is present
type PartitionInformation ¶ added in v0.5.0
type PartitionInformation struct {
// PartitionNumber is the partition number
PartitionNumber uint8
// PartitionEntryUUID is the UUID of the partition
PartitionEntryUUID string
// PartitionTableUUID is the UUID of the partition table
PartitionTableUUID string
// PartitionTableType is the type of the partition (dos/gpt)
PartitionTableType string
}
PartitionInformation contains information related to the partition, if this blockdevice is a partition
type SMARTStats ¶ added in v0.9.0
type SMARTStats struct {
// RotationRate stores the rotation rate of a block device, only applicable for HDD
RotationRate uint16
// RotationalLatency stores the latency of the drive, only applicable for HDD
RotationalLatency float64
// TemperatureInfo stores the temperature information of the drive
TemperatureInfo TemperatureInformation
// TotalBytesRead stores the total amount of bytes read by a block device
TotalBytesRead uint64
// TotalBytesWritten stores the total amount of bytes written by a block device
TotalBytesWritten uint64
// UtilizationRate stores the rate of utilization of a block device
UtilizationRate float64
// PercentEnduranceUsed stores the endurance used in percent
PercentEnduranceUsed float64
}
SMARTStats represents stats from SMART spec and data fetched/calculated by data from seachest
type Status ¶
type Status struct {
// State is the state of this BD like Active(Online), Inactive(Offline) or
// Unknown
State string
// ClaimPhase is the phase of this BD when is it is being used by NDM consumers
ClaimPhase string
}
Status is used to represent the status of the blockdevice
type StorageEngine ¶ added in v0.6.0
type StorageEngine string
StorageEngine is a typed string for the storage engine
const ( // CStor CStor StorageEngine = "cstor" // ZFSLocalPV ZFSLocalPV StorageEngine = "zfs-localpv" // Mayastor Mayastor StorageEngine = "mayastor" // LocalPV LocalPV StorageEngine = "localpv" // Jiva Jiva StorageEngine = "jiva" )
type TemperatureInformation ¶ added in v0.5.0
type TemperatureInformation struct {
// CurrentTemperatureDataValid specifies whether the current temperature
// data reported is valid or not
CurrentTemperatureDataValid bool
// LowestTemperatureDataValid specifies whether the lowest temperature
// data reported is valid or not
LowestTemperatureDataValid bool
// HighestTemperatureDataValid specifies whether the highest temperature
// data reported is valid or not
HighestTemperatureDataValid bool
// CurrentTemperature is the temperature of the drive in celsius
CurrentTemperature int16
// LowestTemperature is the lowest temperature of the drive recorded in celsius
LowestTemperature int16
// HighestTemperature is the highest temperature of the drive recorded in celsius
HighestTemperature int16
}
TemperatureInformation stores the temperature information of the blockdevice