Documentation
¶
Overview ¶
Package ioctl provides a pure-Go low-level wrapper around ZFS's ioctl interface and basic wrappers around common ioctls to make them usable from normal Go code.
Index ¶
- Constants
- func Bookmark(snapshotsToBookmarks map[string]string) error
- func Clone(origin string, name string, props *DatasetProps) error
- func Create(name string, t ObjectType, props *DatasetProps) error
- func DatasetListNext(name string, cursor uint64) (string, uint64, DMUObjectSetStats, DatasetPropsWithSource, error)
- func Destroy(name string, t ObjectType, deferred bool) error
- func DestroySnapshots(names []string, pool string, defer_ bool) error
- func GetSpaceWritten(dataset, snapshot string) (uint64, error)
- func InheritProp(name string, propName string, revertToReceived bool) error
- func Init(nodePath string) error
- func NvlistIoctl(fd uintptr, ioctl Ioctl, name string, cmd *Cmd, request interface{}, ...) error
- func ObjsetZPLProps(name string) (props interface{}, err error)
- func PauseScan(pool string) error
- func PoolConfigs() (map[string]interface{}, error)
- func PoolCreate(name string, features map[string]uint64, config VDev) error
- func PoolDestroy(name string) error
- func PoolExport(name string, force, hardForce bool) error
- func PoolGetProps(name string) (props interface{}, err error)
- func PoolImport(name string, config map[string]interface{}, props map[string]interface{}) (map[string]interface{}, error)
- func PoolStats(name string) (map[string]interface{}, error)
- func Promote(name string) (conflictingSnapshot string, err error)
- func RegenerateGUID(pool string) error
- func Rename(oldName, newName string, recursive bool) error
- func Rollback(name string, target string) (actualTarget string, err error)
- func Send(name string, options SendOptions) (io.ReadCloser, error)
- func SendSpace(name string, options SendSpaceOptions) (uint64, error)
- func SetProp(name string, props map[string]interface{}, source PropSource) error
- func Snapshot(names []string, pool string, props *DatasetProps) error
- func StartStopScan(pool string, t ScanType) error
- type ACLInheritancePolicy
- type CanMount
- type Cmd
- type DMUObjectSetStats
- type DNodeSize
- type DRRBegin
- type DatasetProps
- type DatasetPropsWithSource
- type FailMode
- type FilesystemProps
- type Ioctl
- type ObjectType
- type PoolConfig
- type PoolProps
- type PropSource
- type PropWithSource
- type ReceiveError
- type ReceiveOpts
- type ReceiveStream
- type ScanType
- type SendOptions
- type SendSpaceOptions
- type Share
- type Stat
- type State
- type VDev
- type VolumeProps
- type ZInjectRecord
Constants ¶
const ( // Per-platform (Optional) - 8/128 numbers reserved. ZFS_IOC_PLATFORM = ZFS_IOC_FIRST + 0x80 + iota ZFS_IOC_EVENTS_NEXT // 0x81 (Linux) ZFS_IOC_EVENTS_CLEAR // 0x82 (Linux) ZFS_IOC_EVENTS_SEEK // 0x83 (Linux) ZFS_IOC_NEXTBOOT // 0x84 (FreeBSD) ZFS_IOC_JAIL // 0x85 (FreeBSD) ZFS_IOC_UNJAIL // 0x86 (FreeBSD) ZFS_IOC_SET_BOOTENV // 0x87 ZFS_IOC_GET_BOOTENV // 0x88 ZFS_IOC_LAST )
const ( StateUnknown = iota StateClosed StateOffline StateRemoved StateCantOpen StateFaulted StateDegraded StateHealthy )
const ( FailWait = iota FailContinue FailPanic )
const ( ObjectTypeNone = ObjectType(iota) ObjectTypeMeta ObjectTypeZFS ObjectTypeZvol ObjectTypeOther ObjectTypeAny ObjectTypeNumtypes )
const ( ErrorPropClearFailed = 0x01 ErrorPropRestoreFailed = 0x02 )
Variables ¶
This section is empty.
Functions ¶
func Bookmark ¶
Bookmark creates ZFS bookmarks from snapshots. These are only available on ZoL 0.7+ and currently only used for resumable send/receive, but will eventually be usable as a reference for incremental sends.
func Clone ¶
func Clone(origin string, name string, props *DatasetProps) error
Clone creates a new writable ZFS dataset from the given origin snapshot
func Create ¶
func Create(name string, t ObjectType, props *DatasetProps) error
Create creates a new ZFS dataset
func DatasetListNext ¶
func DatasetListNext(name string, cursor uint64) (string, uint64, DMUObjectSetStats, DatasetPropsWithSource, error)
DatasetListNext lists ZFS datsets under the dataset or zpool given by name. It only returns one dataset and a cursor which can be used to get the next dataset in the list. The cursor value for the first element is 0.
func Destroy ¶
func Destroy(name string, t ObjectType, deferred bool) error
Destroy removes dataset irrevocably. If the deferred flag is given, the function will terminate and the actuall removal will be processed asynchronously.
func DestroySnapshots ¶
DestroySnapshots removes multiple snapshots in the same pool. By setting the defer option the operation will be executed in the background after the function has returned.
func GetSpaceWritten ¶
GetSpaceWritten returns the amount of bytes written into a dataset since the given snapshot was taken. Also useful for determining if anything has changed in dataset since the snaphsot was taken.
func InheritProp ¶
InheritProp makes a prop inherit from its parent or reverts it to the received prop which is being shadowed by a local prop (see PropSource).
func Init ¶
Init optionally creates and opens a ZFS handle, by default at "/dev/zfs", overridable by nodePath
func NvlistIoctl ¶
func NvlistIoctl(fd uintptr, ioctl Ioctl, name string, cmd *Cmd, request interface{}, response interface{}, config interface{}) error
NvlistIoctl issues a low-level ioctl syscall with only some common wrappers. All unsafety is contained in here.
func ObjsetZPLProps ¶
ObjsetZPLProps gets all object set props
func PoolConfigs ¶
PoolConfigs gets all pool configs
func PoolCreate ¶
PoolCreate creates a new zpool with the given name, featues and devices
func PoolExport ¶
PoolExport exports a pool
func PoolGetProps ¶
PoolGetProps gets all props for a zpool
func PoolImport ¶
func PoolImport(name string, config map[string]interface{}, props map[string]interface{}) (map[string]interface{}, error)
PoolImport imports a pool
func RegenerateGUID ¶
RegenerateGUID assigns a new GUID to the pool. Since this operation needs to write to all devices the pool cannot be degraded or have missing devices.
func Send ¶
func Send(name string, options SendOptions) (io.ReadCloser, error)
Send generates a stream containing either a full or an incremental snapshot. This function provides some basic convenience wrappers including a fail-fast mode which returns an error directly if it happens before a single byte is sent out and a Read-compatible output stream.
func SendSpace ¶
func SendSpace(name string, options SendSpaceOptions) (uint64, error)
SendSpace determines approximately how big a ZFS send stream will be
func SetProp ¶
func SetProp(name string, props map[string]interface{}, source PropSource) error
SetProp sets one or more props on a ZFS dataset.
func Snapshot ¶
func Snapshot(names []string, pool string, props *DatasetProps) error
Snapshot creates one or more snapshots of datasets on the same zpool. The names are in standard ZFS syntax (dataset/subdataset@snapname).
func StartStopScan ¶
StartStopScan starts or stops a scrub or resilver operation. If the ScanType is set to ScanType none, it will stop an active resilver or scrub operation, ScanTypeScrub and ScanTypeResilver will resume or start a new operation (start is not supported for resilver)
Types ¶
type ACLInheritancePolicy ¶
type ACLInheritancePolicy uint64
type Cmd ¶
type Cmd struct {
Name [4096]byte
Nvlist_src uint64
Nvlist_src_size uint64
Nvlist_dst uint64
Nvlist_dst_size uint64
Nvlist_dst_filled bool
Pad_cgo_0 [3]byte
Pad2 int32
History uint64
Value [8192]byte
String [256]byte
Guid uint64
Nvlist_conf uint64
Nvlist_conf_size uint64
Cookie uint64
Objset_type uint64
Perm_action uint64
History_len uint64
History_offset uint64
Obj uint64
Iflags uint64
Objset_stats DMUObjectSetStats
Begin_record DRRBegin
Inject_record ZInjectRecord
Defer_destroy uint32
Flags uint32
Action_handle uint64
Cleanup_fd int32
Simple uint8
Pad [3]uint8
Sendobj uint64
Fromobj uint64
Createtxg uint64
Stat Stat
}
Cmd is the main data exchange struct for all ZFS ioctl()s aside from nvlists. Mostly generated by godefs.
type DMUObjectSetStats ¶
type DMUObjectSetStats struct {
Num_clones uint64
Creation_txg uint64
Guid uint64
Type uint32
Is_snapshot uint8
Inconsistent uint8
Origin [256]byte
Pad_cgo_0 [2]byte
}
func SnapshotListNext ¶
func SnapshotListNext(name string, cursor uint64, props interface{}) (string, uint64, DMUObjectSetStats, error)
SnapshotListNext lists ZFS snapshots under the dataset or zpool given by name. It works similar to DatsetListNext
type DatasetProps ¶
type DatasetProps map[string]interface{}
DatasetProps contains all normal props for a dataset
type DatasetPropsWithSource ¶
type DatasetPropsWithSource map[string]PropWithSource
func ObjsetStats ¶
func ObjsetStats(name string) (props DatasetPropsWithSource, err error)
ObjsetStats gets statistics on object sets
type FilesystemProps ¶
type FilesystemProps struct {
SnapshotDirectoryEnabled bool `nvlist:"snapdir,asuint64"`
ACLInheritancePolicy ACLInheritancePolicy `nvlist:"aclinherit,omitempty,default=4"`
DNodeSize DNodeSize `nvlist:"dnodesize,omitempty"`
Atime bool `nvlist:"atime,default=true"`
RelativeAtime bool `nvlist:"relatime"`
// All props below do nothing here
Zoned bool `nvlist:"zoned"`
VirusScan bool `nvlist:"vscan"`
Overlay bool `nvlist:"overlay"`
CanMount CanMount `nvlist:"canmount,default=true"`
Mounted bool `nvlist:"mounted"`
Mountpoint string `nvlist:"mountpoint"`
}
type Ioctl ¶
type Ioctl uint32
const ( ZFS_IOC_POOL_CREATE Ioctl = ZFS_IOC_FIRST + iota ZFS_IOC_POOL_DESTROY ZFS_IOC_POOL_IMPORT ZFS_IOC_POOL_EXPORT ZFS_IOC_POOL_CONFIGS ZFS_IOC_POOL_STATS ZFS_IOC_POOL_TRYIMPORT ZFS_IOC_POOL_SCAN ZFS_IOC_POOL_FREEZE ZFS_IOC_POOL_UPGRADE ZFS_IOC_POOL_GET_HISTORY ZFS_IOC_VDEV_ADD ZFS_IOC_VDEV_REMOVE ZFS_IOC_VDEV_SET_STATE ZFS_IOC_VDEV_ATTACH ZFS_IOC_VDEV_DETACH ZFS_IOC_VDEV_SETPATH ZFS_IOC_VDEV_SETFRU ZFS_IOC_OBJSET_STATS ZFS_IOC_OBJSET_ZPLPROPS ZFS_IOC_DATASET_LIST_NEXT ZFS_IOC_SNAPSHOT_LIST_NEXT ZFS_IOC_SET_PROP ZFS_IOC_CREATE ZFS_IOC_DESTROY ZFS_IOC_ROLLBACK ZFS_IOC_RENAME ZFS_IOC_RECV ZFS_IOC_SEND ZFS_IOC_INJECT_FAULT ZFS_IOC_CLEAR_FAULT ZFS_IOC_INJECT_LIST_NEXT ZFS_IOC_ERROR_LOG ZFS_IOC_CLEAR ZFS_IOC_PROMOTE ZFS_IOC_SNAPSHOT ZFS_IOC_DSOBJ_TO_DSNAME ZFS_IOC_OBJ_TO_PATH ZFS_IOC_POOL_SET_PROPS ZFS_IOC_POOL_GET_PROPS ZFS_IOC_SET_FSACL ZFS_IOC_GET_FSACL ZFS_IOC_SHARE ZFS_IOC_INHERIT_PROP ZFS_IOC_SMB_ACL ZFS_IOC_USERSPACE_ONE ZFS_IOC_USERSPACE_MANY ZFS_IOC_USERSPACE_UPGRADE ZFS_IOC_HOLD ZFS_IOC_RELEASE ZFS_IOC_GET_HOLDS ZFS_IOC_OBJSET_RECVD_PROPS ZFS_IOC_VDEV_SPLIT ZFS_IOC_NEXT_OBJ ZFS_IOC_DIFF ZFS_IOC_TMP_SNAPSHOT ZFS_IOC_OBJ_TO_STATS ZFS_IOC_SPACE_WRITTEN ZFS_IOC_SPACE_SNAPS ZFS_IOC_DESTROY_SNAPS ZFS_IOC_POOL_REGUID ZFS_IOC_POOL_REOPEN ZFS_IOC_SEND_PROGRESS ZFS_IOC_LOG_HISTORY ZFS_IOC_SEND_NEW ZFS_IOC_SEND_SPACE ZFS_IOC_CLONE ZFS_IOC_BOOKMARK ZFS_IOC_GET_BOOKMARKS ZFS_IOC_DESTROY_BOOKMARKS ZFS_IOC_RECV_NEW ZFS_IOC_POOL_SYNC )
const ZFS_IOC_FIRST Ioctl = 'Z' << 8
type ObjectType ¶
type ObjectType int32
type PoolConfig ¶
type PoolConfig struct {
Version uint64 `nvlist:"version,omitempty"`
Name string `nvlist:"name,omitempty"`
State uint64 `nvlist:"state,omitempty"`
TXG uint64 `nvlist:"txg,omitempty"`
GUID uint64 `nvlist:"pool_guid,omitempty"`
Errata uint64 `nvlist:"errata,omitempty"`
Hostname string `nvlist:"hostname,omitempty"`
NumberOfChildren uint64 `nvlist:"vdev_children"`
VDevTree *VDev `nvlist:"vdev_tree"`
HostID uint64 `nvlist:"hostid,omitempty"`
// Delta: -hostid, +top_guid, +guid, +features_for_read
FeaturesForRead map[string]bool `nvlist:"features_for_read"`
}
type PoolProps ¶
type PoolProps struct {
Name string `nvlist:"name,omitempty"`
Version uint64 `nvlist:"version,omitempty"`
Comment string `nvlist:"comment,omitempty"`
// Pool configuration
AlternativeRoot string `nvlist:"altroot,omitempty"`
TemporaryName string `nvlist:"tname,omitempty"`
BootFS string `nvlist:"bootfs,omitempty"`
CacheFile string `nvlist:"cachefile,omitempty"`
ReadOnly bool `nvlist:"readonly,omitempty"`
Multihost bool `nvlist:"multihost,omitempty"`
Failmode FailMode `nvlist:"failmode,omitempty"`
DedupDitto uint64 `nvlist:"dedupditto,omitempty"`
AlignmentShift uint64 `nvlist:"ashift,omitempty"`
Delegation bool `nvlist:"delegation,omitempty"`
Autoreplace bool `nvlist:"autoreplace,omitempty"`
ListSnapshots bool `nvlist:"listsnapshots,omitempty"`
Autoexpand bool `nvlist:"autoexpand,omitempty"`
MaxBlockSize uint64 `nvlist:"maxblocksize,omitempty"`
MaxDnodeSize uint64 `nvlist:"maxdnodesize,omitempty"`
// Defines props for the root volume for PoolCreate()
RootProps *DatasetProps `nvlist:"root-props-nvl,omitempty"`
// All user properties are represented here
User map[string]string `nvlist:"-,extra,omitempty"`
// Read-only information
Size uint64 `nvlist:"size,ro"`
Free uint64 `nvlist:"free,ro"`
Freeing uint64 `nvlist:"freeing,ro"`
Leaked uint64 `nvlist:"leaked,ro"`
Allocated uint64 `nvlist:"allocated,ro"`
ExpandSize uint64 `nvlist:"expandsize,ro"`
Fragmentation uint64 `nvlist:"fragmentation,ro"`
Capacity uint64 `nvlist:"capacity,ro"`
GUID uint64 `nvlist:"guid,ro"`
Health State `nvlist:"health,ro"`
DedupRatio uint64 `nvlist:"dedupratio,ro"`
}
PoolProps represents all properties of a zpool
type PropSource ¶
type PropSource uint64
PropSource represents all possible sources for ZFS props
const ( PropSourceNone PropSource = 1 << iota PropSourceDefault PropSourceTemporary PropSourceLocal PropSourceInherited PropSourceReceived )
All possible values of PropSource
type PropWithSource ¶
type PropWithSource struct {
Value interface{} `nvlist:"value"`
Source string `nvlist:"source"`
}
PropWithSource repesents a prop with source
type ReceiveError ¶
type ReceiveError struct {
ReadBytes uint64 `nvlist:"read_bytes"`
ErrorFlags uint64 `nvlist:"error_flags"`
ErrorList map[string]int32 `nvlist:"errors"`
}
func (ReceiveError) Error ¶
func (e ReceiveError) Error() string
type ReceiveOpts ¶
type ReceiveOpts struct {
Origin string `nvlist:"origin,omitempty"`
SnapshotName string `nvlist:"snapname"`
ReceivedProps *DatasetProps `nvlist:"props"`
LocalProps *DatasetProps `nvlist:"localprops"`
HiddenArgs *struct{} `nvlist:"hidden_args"` // TODO: Key material belongs here
// Fd should generally not be set by the user, it bypasses all convenience features of Receive()
// If it is set, BeginRecord also needs to be set to the first currently 312 bytes of the stream
Fd int32 `nvlist:"input_fd"`
BeginRecord []byte `nvlist:"begin_record"`
CleanupFd int32 `nvlist:"cleanup_fd,omitempty"` // Operation gets aborted if this Fd is closed
// The following are options
Force bool `nvlist:"force"`
Resumable bool `nvlist:"resumable"`
}
ReceiveOpts represents all options for the Receive() call
type ReceiveStream ¶
type ReceiveStream struct {
// contains filtered or unexported fields
}
func Receive ¶
func Receive(name string, opts ReceiveOpts) (*ReceiveStream, error)
Receive creates a snapshot from a stream generated by Send()
func (*ReceiveStream) WaitAndClose ¶
func (r *ReceiveStream) WaitAndClose() error
WaitAndClose waits for receive process to complete, returns the result and closes everything
type ScanType ¶
type ScanType uint64
ScanType represents all possible scan-type operations (resilver or scrub)
type SendOptions ¶
type SendOptions struct {
// Fd is writable file descriptor and should generally not be set. If it is set, all convenience
// wrappers will be disabled and the Fd will be directly passed into the kernel.
Fd int32 `nvlist:"fd"`
// From can optionally contain an older snapshot for an incremental send
From string `nvlist:"fromsnap,omitempty"`
// FromBookmark can optionally contain a bookmark which is used to reduce the amount of data sent
FromBookmark string `nvlist:"redactbook,omitempty"`
// These enable individual features for the send stream
LargeBlocks bool `nvlist:"largeblockok"`
// Allows DRR_WRITE_EMBEDDED
Embed bool `nvlist:"embedok"`
// Allows compressed DRR_WRITE
Compress bool `nvlist:"compress"`
// Allows raw encrypted records
Raw bool `nvlist:"rawok"`
// Send a partially received snapshot
Saved bool `nvlist:"savedok"`
// These can optionally be set to resume a transfer (ZoL 0.7+)
ResumeObject uint64 `nvlist:"resume_object,omitempty"`
ResumeOffset uint64 `nvlist:"resume_offset,omitempty"`
}
SendOptions contains all options for the Send function.
type SendSpaceOptions ¶
type SendSpaceOptions struct {
// From can contain an older snapshot for an incremental transfer
From string `nvlist:"from,omitempty"`
// These enable individual features for transfer space estimation
LargeBlocks bool `nvlist:"largeblockok"`
Embed bool `nvlist:"embedok"`
Compress bool `nvlist:"compressok"`
}
SendSpaceOptions contains all options for the SendSpace function
type VDev ¶
type VDev struct {
IsLog uint64 `nvlist:"is_log"`
DTL uint64 `nvlist:"DTL,omitempty"`
AlignmentShift uint64 `nvlist:"ashift,omitempty"`
AllocatableCapacity uint64 `nvlist:"asize,omitempty"`
GUID uint64 `nvlist:"guid,omitempty"`
ID uint64 `nvlist:"id,omitempty"`
Path string `nvlist:"path"`
Type string `nvlist:"type"`
Children []VDev `nvlist:"children,omitempty"`
L2CacheChildren []VDev `nvlist:"l2cache,omitempty"`
SparesChildren []VDev `nvlist:"spares,omitempty"`
}
type VolumeProps ¶
type VolumeProps struct {
}