mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
This function largely identical to GetFSMagic, except for suppressing ENOENT errors. The only consumer of this function was fsChecker.IsMounted, which would ignore errors either way, and only use the "success" case to check if the detected filesystem-type was the expected one. This patch; - rewrites fsChecker.IsMounted to use GetFSMagic instead - removes the now unused Mounted function As we consider daemon/graphdriver to be "internal", and as there are no public consumers of this, we can remove this function without deprecating first. The freebsd implementation also seemed to be broken, as it mixed syscall with golang.org/x/sys/unix, which used incompatible types. I left the file in place for now, but we can consider removing it altogether as there's no active development on making freebsd functional. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
118 lines
3.3 KiB
Go
118 lines
3.3 KiB
Go
package graphdriver // import "github.com/docker/docker/daemon/graphdriver"
|
|
|
|
import (
|
|
"github.com/moby/sys/mountinfo"
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
const (
|
|
// FsMagicAufs filesystem id for Aufs
|
|
FsMagicAufs = FsMagic(0x61756673)
|
|
// FsMagicBtrfs filesystem id for Btrfs
|
|
FsMagicBtrfs = FsMagic(0x9123683E)
|
|
// FsMagicCramfs filesystem id for Cramfs
|
|
FsMagicCramfs = FsMagic(0x28cd3d45)
|
|
// FsMagicEcryptfs filesystem id for eCryptfs
|
|
FsMagicEcryptfs = FsMagic(0xf15f)
|
|
// FsMagicExtfs filesystem id for Extfs
|
|
FsMagicExtfs = FsMagic(0x0000EF53)
|
|
// FsMagicF2fs filesystem id for F2fs
|
|
FsMagicF2fs = FsMagic(0xF2F52010)
|
|
// FsMagicGPFS filesystem id for GPFS
|
|
FsMagicGPFS = FsMagic(0x47504653)
|
|
// FsMagicJffs2Fs filesystem if for Jffs2Fs
|
|
FsMagicJffs2Fs = FsMagic(0x000072b6)
|
|
// FsMagicJfs filesystem id for Jfs
|
|
FsMagicJfs = FsMagic(0x3153464a)
|
|
// FsMagicNfsFs filesystem id for NfsFs
|
|
FsMagicNfsFs = FsMagic(0x00006969)
|
|
// FsMagicRAMFs filesystem id for RamFs
|
|
FsMagicRAMFs = FsMagic(0x858458f6)
|
|
// FsMagicReiserFs filesystem id for ReiserFs
|
|
FsMagicReiserFs = FsMagic(0x52654973)
|
|
// FsMagicSmbFs filesystem id for SmbFs
|
|
FsMagicSmbFs = FsMagic(0x0000517B)
|
|
// FsMagicSquashFs filesystem id for SquashFs
|
|
FsMagicSquashFs = FsMagic(0x73717368)
|
|
// FsMagicTmpFs filesystem id for TmpFs
|
|
FsMagicTmpFs = FsMagic(0x01021994)
|
|
// FsMagicVxFS filesystem id for VxFs
|
|
FsMagicVxFS = FsMagic(0xa501fcf5)
|
|
// FsMagicXfs filesystem id for Xfs
|
|
FsMagicXfs = FsMagic(0x58465342)
|
|
// FsMagicZfs filesystem id for Zfs
|
|
FsMagicZfs = FsMagic(0x2fc12fc1)
|
|
// FsMagicOverlay filesystem id for overlay
|
|
FsMagicOverlay = FsMagic(0x794C7630)
|
|
// FsMagicFUSE filesystem id for FUSE
|
|
FsMagicFUSE = FsMagic(0x65735546)
|
|
)
|
|
|
|
var (
|
|
// List of drivers that should be used in an order
|
|
priority = "overlay2,fuse-overlayfs,btrfs,zfs,vfs"
|
|
|
|
// FsNames maps filesystem id to name of the filesystem.
|
|
FsNames = map[FsMagic]string{
|
|
FsMagicAufs: "aufs",
|
|
FsMagicBtrfs: "btrfs",
|
|
FsMagicCramfs: "cramfs",
|
|
FsMagicEcryptfs: "ecryptfs",
|
|
FsMagicExtfs: "extfs",
|
|
FsMagicF2fs: "f2fs",
|
|
FsMagicFUSE: "fuse",
|
|
FsMagicGPFS: "gpfs",
|
|
FsMagicJffs2Fs: "jffs2",
|
|
FsMagicJfs: "jfs",
|
|
FsMagicNfsFs: "nfs",
|
|
FsMagicOverlay: "overlayfs",
|
|
FsMagicRAMFs: "ramfs",
|
|
FsMagicReiserFs: "reiserfs",
|
|
FsMagicSmbFs: "smb",
|
|
FsMagicSquashFs: "squashfs",
|
|
FsMagicTmpFs: "tmpfs",
|
|
FsMagicUnsupported: "unsupported",
|
|
FsMagicVxFS: "vxfs",
|
|
FsMagicXfs: "xfs",
|
|
FsMagicZfs: "zfs",
|
|
}
|
|
)
|
|
|
|
// GetFSMagic returns the filesystem id given the path.
|
|
func GetFSMagic(rootpath string) (FsMagic, error) {
|
|
var buf unix.Statfs_t
|
|
if err := unix.Statfs(rootpath, &buf); err != nil {
|
|
return 0, err
|
|
}
|
|
return FsMagic(buf.Type), nil
|
|
}
|
|
|
|
// NewFsChecker returns a checker configured for the provided FsMagic
|
|
func NewFsChecker(t FsMagic) Checker {
|
|
return &fsChecker{
|
|
t: t,
|
|
}
|
|
}
|
|
|
|
type fsChecker struct {
|
|
t FsMagic
|
|
}
|
|
|
|
func (c *fsChecker) IsMounted(path string) bool {
|
|
fsType, _ := GetFSMagic(path)
|
|
return fsType == c.t
|
|
}
|
|
|
|
// NewDefaultChecker returns a check that parses /proc/mountinfo to check
|
|
// if the specified path is mounted.
|
|
func NewDefaultChecker() Checker {
|
|
return &defaultChecker{}
|
|
}
|
|
|
|
type defaultChecker struct{}
|
|
|
|
func (c *defaultChecker) IsMounted(path string) bool {
|
|
m, _ := mountinfo.Mounted(path)
|
|
return m
|
|
}
|