/* Copyright The containerd Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /* Copyright 2013-2018 Docker, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // Original source: https://github.com/moby/moby/blob/v26.0.0/daemon/graphdriver/driver_linux.go package fs import ( "path/filepath" "syscall" ) // Magic unsigned id of the filesystem in use. type Magic uint32 const ( // MagicUnsupported is a predefined constant value other than a valid filesystem id. MagicUnsupported = Magic(0x00000000) ) const ( // MagicAufs filesystem id for Aufs MagicAufs = Magic(0x61756673) // MagicBtrfs filesystem id for Btrfs MagicBtrfs = Magic(0x9123683E) // MagicCramfs filesystem id for Cramfs MagicCramfs = Magic(0x28cd3d45) // MagicEcryptfs filesystem id for eCryptfs MagicEcryptfs = Magic(0xf15f) // MagicExtfs filesystem id for Extfs MagicExtfs = Magic(0x0000EF53) // MagicF2fs filesystem id for F2fs MagicF2fs = Magic(0xF2F52010) // MagicGPFS filesystem id for GPFS MagicGPFS = Magic(0x47504653) // MagicJffs2Fs filesystem if for Jffs2Fs MagicJffs2Fs = Magic(0x000072b6) // MagicJfs filesystem id for Jfs MagicJfs = Magic(0x3153464a) // MagicNfsFs filesystem id for NfsFs MagicNfsFs = Magic(0x00006969) // MagicRAMFs filesystem id for RamFs MagicRAMFs = Magic(0x858458f6) // MagicReiserFs filesystem id for ReiserFs MagicReiserFs = Magic(0x52654973) // MagicSmbFs filesystem id for SmbFs MagicSmbFs = Magic(0x0000517B) // MagicSquashFs filesystem id for SquashFs MagicSquashFs = Magic(0x73717368) // MagicTmpFs filesystem id for TmpFs MagicTmpFs = Magic(0x01021994) // MagicVxFS filesystem id for VxFs MagicVxFS = Magic(0xa501fcf5) // MagicXfs filesystem id for Xfs MagicXfs = Magic(0x58465342) // MagicZfs filesystem id for Zfs MagicZfs = Magic(0x2fc12fc1) // MagicOverlay filesystem id for overlay MagicOverlay = Magic(0x794C7630) ) var ( // FsNames maps filesystem id to name of the filesystem. FsNames = map[Magic]string{ MagicAufs: "aufs", MagicBtrfs: "btrfs", MagicCramfs: "cramfs", MagicExtfs: "extfs", MagicF2fs: "f2fs", MagicGPFS: "gpfs", MagicJffs2Fs: "jffs2", MagicJfs: "jfs", MagicNfsFs: "nfs", MagicOverlay: "overlayfs", MagicRAMFs: "ramfs", MagicReiserFs: "reiserfs", MagicSmbFs: "smb", MagicSquashFs: "squashfs", MagicTmpFs: "tmpfs", MagicUnsupported: "unsupported", MagicVxFS: "vxfs", MagicXfs: "xfs", MagicZfs: "zfs", } ) // GetMagic returns the filesystem id given the path. func GetMagic(rootpath string) (Magic, error) { var buf syscall.Statfs_t if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil { return 0, err } return Magic(buf.Type), nil }