package fs

import "github.com/google/cadvisor/fs"

Provides Filesystem Stats

Index

Constants

const (
	LabelSystemRoot          = "root"
	LabelDockerImages        = "docker-images"
	LabelCrioImages          = "crio-images"
	LabelCrioContainers      = "crio-containers"
	DriverStatusPoolName     = "Pool Name"
	DriverStatusDataLoopFile = "Data loop file"
)

Variables

var (
	// ErrNoSuchDevice is the error indicating the requested device does not exist.
	ErrNoSuchDevice = errors.New("cadvisor: no such device")

	// ErrDeviceNotInPartitionsMap is the error resulting if a device could not be found in the partitions map.
	ErrDeviceNotInPartitionsMap = errors.New("could not find device in cached partitions map")
)
var ErrFallbackToVFS = errors.New("fallback to VFS")

ErrFallbackToVFS signals that a specialized plugin cannot handle this filesystem and VFS should be used instead.

Functions

func InitializeWatchers

func InitializeWatchers() map[string]FsWatcher

InitializeWatchers starts all plugin watchers and returns them.

func RegisterPlugin

func RegisterPlugin(name string, plugin FsPlugin) error

RegisterPlugin registers a filesystem plugin. This should be called from init() functions.

func StopWatchers

func StopWatchers(watchers map[string]FsWatcher)

StopWatchers stops all provided watchers.

Types

type Context

type Context struct {
	// docker root directory.
	Docker DockerContext
	Crio   CrioContext
	Podman PodmanContext
}

type CrioContext

type CrioContext struct {
	Root       string
	ImageStore string
	Driver     string
}

type DeviceInfo

type DeviceInfo struct {
	Device string
	Major  uint
	Minor  uint
}

type DiskStats

type DiskStats struct {
	MajorNum        uint64
	MinorNum        uint64
	ReadsCompleted  uint64
	ReadsMerged     uint64
	SectorsRead     uint64
	ReadTime        uint64
	WritesCompleted uint64
	WritesMerged    uint64
	SectorsWritten  uint64
	WriteTime       uint64
	IoInProgress    uint64
	IoTime          uint64
	WeightedIoTime  uint64
	Major           uint64
	Minor           uint64
}

type DockerContext

type DockerContext struct {
	Root         string
	Driver       string
	DriverStatus map[string]string
}

type Fs

type Fs struct {
	DeviceInfo
	Type       FsType
	Capacity   uint64
	Free       uint64
	Available  uint64
	Inodes     *uint64
	InodesFree *uint64
	DiskStats  DiskStats
}

type FsCachingPlugin

type FsCachingPlugin interface {
	FsPlugin

	// CacheKey returns a cache key for the given partition.
	// Stats will be cached by this key and reused for partitions with the same key.
	// Return empty string to disable caching for a specific partition.
	CacheKey(partition PartitionInfo) string
}

FsCachingPlugin is an optional interface for plugins that want to cache stats by a key (e.g., device ID) to avoid redundant stat calls. This is useful for network filesystems like NFS where multiple mounts may point to the same underlying device.

type FsInfo

type FsInfo interface {
	// Returns capacity and free space, in bytes, of all the ext2, ext3, ext4 filesystems on the host.
	GetGlobalFsInfo() ([]Fs, error)

	// Returns capacity and free space, in bytes, of the set of mounts passed.
	GetFsInfoForPath(mountSet map[string]struct{}) ([]Fs, error)

	// GetDirUsage returns a usage information for 'dir'.
	GetDirUsage(dir string) (UsageInfo, error)

	// GetDeviceInfoByFsUUID returns the information of the device with the
	// specified filesystem uuid. If no such device exists, this function will
	// return the ErrNoSuchDevice error.
	GetDeviceInfoByFsUUID(uuid string) (*DeviceInfo, error)

	// Returns the block device info of the filesystem on which 'dir' resides.
	GetDirFsDevice(dir string) (*DeviceInfo, error)

	// Returns the device name associated with a particular label.
	GetDeviceForLabel(label string) (string, error)

	// Returns all labels associated with a particular device name.
	GetLabelsForDevice(device string) ([]string, error)

	// Returns the mountpoint associated with a particular device.
	GetMountpointForDevice(device string) (string, error)
}

func NewFsInfo

func NewFsInfo(context Context) (FsInfo, error)

type FsPlugin

type FsPlugin interface {
	// Name returns the plugin identifier (e.g., "zfs", "devicemapper", "vfs").
	Name() string

	// CanHandle returns true if this plugin handles the given filesystem type.
	CanHandle(fsType string) bool

	// Priority returns the plugin priority (higher = checked first).
	// Allows specific plugins (zfs, btrfs) to override generic (vfs).
	Priority() int

	// GetStats returns filesystem statistics for a partition.
	GetStats(device string, partition PartitionInfo) (*FsStats, error)

	// ProcessMount optionally modifies mount info during processing.
	// Returns (shouldInclude bool, modifiedMount *mount.Info, error).
	ProcessMount(mnt *mount.Info) (bool, *mount.Info, error)
}

FsPlugin provides filesystem-specific statistics collection.

func GetAllPlugins

func GetAllPlugins() []FsPlugin

GetAllPlugins returns all registered plugins.

func GetPluginForFsType

func GetPluginForFsType(fsType string) FsPlugin

GetPluginForFsType returns the appropriate plugin for the filesystem type. Returns nil if no plugin can handle the filesystem type.

type FsStats

type FsStats struct {
	Capacity   uint64
	Free       uint64
	Available  uint64
	Inodes     *uint64
	InodesFree *uint64
	Type       FsType
}

FsStats contains filesystem statistics returned by plugins.

type FsType

type FsType string
const (
	ZFS          FsType = "zfs"
	DeviceMapper FsType = "devicemapper"
	VFS          FsType = "vfs"
	NFS          FsType = "nfs"
)

func (FsType) String

func (ft FsType) String() string

type FsWatcher

type FsWatcher interface {
	// GetUsage returns filesystem usage for a specific container/path.
	GetUsage(containerID string, deviceID string) (uint64, error)

	// Stop stops the background monitoring.
	Stop()
}

FsWatcher provides container-level filesystem usage from background monitoring.

type FsWatcherPlugin

type FsWatcherPlugin interface {
	FsPlugin

	// StartWatcher starts background monitoring.
	// Returns a Watcher that can be used to get container-level usage.
	StartWatcher() (FsWatcher, error)
}

FsWatcherPlugin is an optional interface for plugins that provide background monitoring (e.g., ZFS watcher, ThinPool watcher).

type PartitionInfo

type PartitionInfo struct {
	Mountpoint string
	Major      uint
	Minor      uint
	FsType     string
	BlockSize  uint
}

PartitionInfo contains information needed for stats collection.

type PodmanContext

type PodmanContext struct {
	Root         string
	Driver       string
	DriverStatus map[string]string
}

type RealFsInfo

type RealFsInfo struct {
	// contains filtered or unexported fields
}

func (*RealFsInfo) GetDeviceForLabel

func (i *RealFsInfo) GetDeviceForLabel(label string) (string, error)

func (*RealFsInfo) GetDeviceInfoByFsUUID

func (i *RealFsInfo) GetDeviceInfoByFsUUID(uuid string) (*DeviceInfo, error)

func (*RealFsInfo) GetDirFsDevice

func (i *RealFsInfo) GetDirFsDevice(dir string) (*DeviceInfo, error)

func (*RealFsInfo) GetDirUsage

func (i *RealFsInfo) GetDirUsage(dir string) (UsageInfo, error)

func (*RealFsInfo) GetFsInfoForPath

func (i *RealFsInfo) GetFsInfoForPath(mountSet map[string]struct{}) ([]Fs, error)

func (*RealFsInfo) GetGlobalFsInfo

func (i *RealFsInfo) GetGlobalFsInfo() ([]Fs, error)

func (*RealFsInfo) GetLabelsForDevice

func (i *RealFsInfo) GetLabelsForDevice(device string) ([]string, error)

func (*RealFsInfo) GetMountpointForDevice

func (i *RealFsInfo) GetMountpointForDevice(dev string) (string, error)

type UsageInfo

type UsageInfo struct {
	Bytes  uint64
	Inodes uint64
}

func GetDirUsage

func GetDirUsage(dir string) (UsageInfo, error)

Source Files

fs.go plugin.go types.go

Directories

PathSynopsis
fs/btrfs
fs/btrfs/install
fs/devicemapper
fs/devicemapper/install
fs/nfs
fs/nfs/install
fs/overlay
fs/overlay/install
fs/tmpfs
fs/tmpfs/install
fs/vfs
fs/vfs/install
fs/zfs
fs/zfs/install
Version
v0.55.1 (latest)
Published
Dec 19, 2025
Platform
linux/amd64
Imports
14 packages
Last checked
4 months ago

Tools for package owners.