driver_linux.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // +build linux
  2. package graphdriver
  3. import (
  4. "path/filepath"
  5. "syscall"
  6. )
  7. const (
  8. // FsMagicAufs filesystem id for Aufs
  9. FsMagicAufs = FsMagic(0x61756673)
  10. // FsMagicBtrfs filesystem id for Btrfs
  11. FsMagicBtrfs = FsMagic(0x9123683E)
  12. // FsMagicCramfs filesystem id for Cramfs
  13. FsMagicCramfs = FsMagic(0x28cd3d45)
  14. // FsMagicExtfs filesystem id for Extfs
  15. FsMagicExtfs = FsMagic(0x0000EF53)
  16. // FsMagicF2fs filesystem id for F2fs
  17. FsMagicF2fs = FsMagic(0xF2F52010)
  18. // FsMagicGPFS filesystem id for GPFS
  19. FsMagicGPFS = FsMagic(0x47504653)
  20. // FsMagicJffs2Fs filesystem if for Jffs2Fs
  21. FsMagicJffs2Fs = FsMagic(0x000072b6)
  22. // FsMagicJfs filesystem id for Jfs
  23. FsMagicJfs = FsMagic(0x3153464a)
  24. // FsMagicNfsFs filesystem id for NfsFs
  25. FsMagicNfsFs = FsMagic(0x00006969)
  26. // FsMagicRAMFs filesystem id for RamFs
  27. FsMagicRAMFs = FsMagic(0x858458f6)
  28. // FsMagicReiserFs filesystem id for ReiserFs
  29. FsMagicReiserFs = FsMagic(0x52654973)
  30. // FsMagicSmbFs filesystem id for SmbFs
  31. FsMagicSmbFs = FsMagic(0x0000517B)
  32. // FsMagicSquashFs filesystem id for SquashFs
  33. FsMagicSquashFs = FsMagic(0x73717368)
  34. // FsMagicTmpFs filesystem id for TmpFs
  35. FsMagicTmpFs = FsMagic(0x01021994)
  36. // FsMagicVxFS filesystem id for VxFs
  37. FsMagicVxFS = FsMagic(0xa501fcf5)
  38. // FsMagicXfs filesystem id for Xfs
  39. FsMagicXfs = FsMagic(0x58465342)
  40. // FsMagicZfs filesystem id for Zfs
  41. FsMagicZfs = FsMagic(0x2fc12fc1)
  42. // FsMagicOverlay filesystem id for overlay
  43. FsMagicOverlay = FsMagic(0x794C7630)
  44. )
  45. var (
  46. // Slice of drivers that should be used in an order
  47. priority = []string{
  48. "aufs",
  49. "btrfs",
  50. "zfs",
  51. "devicemapper",
  52. "overlay",
  53. "vfs",
  54. }
  55. // FsNames maps filesystem id to name of the filesystem.
  56. FsNames = map[FsMagic]string{
  57. FsMagicAufs: "aufs",
  58. FsMagicBtrfs: "btrfs",
  59. FsMagicCramfs: "cramfs",
  60. FsMagicExtfs: "extfs",
  61. FsMagicF2fs: "f2fs",
  62. FsMagicGPFS: "gpfs",
  63. FsMagicJffs2Fs: "jffs2",
  64. FsMagicJfs: "jfs",
  65. FsMagicNfsFs: "nfs",
  66. FsMagicRAMFs: "ramfs",
  67. FsMagicReiserFs: "reiserfs",
  68. FsMagicSmbFs: "smb",
  69. FsMagicSquashFs: "squashfs",
  70. FsMagicTmpFs: "tmpfs",
  71. FsMagicUnsupported: "unsupported",
  72. FsMagicVxFS: "vxfs",
  73. FsMagicXfs: "xfs",
  74. FsMagicZfs: "zfs",
  75. }
  76. )
  77. // GetFSMagic returns the filesystem id given the path.
  78. func GetFSMagic(rootpath string) (FsMagic, error) {
  79. var buf syscall.Statfs_t
  80. if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil {
  81. return 0, err
  82. }
  83. return FsMagic(buf.Type), nil
  84. }
  85. // Mounted checks if the given path is mounted as the fs type
  86. func Mounted(fsType FsMagic, mountPath string) (bool, error) {
  87. var buf syscall.Statfs_t
  88. if err := syscall.Statfs(mountPath, &buf); err != nil {
  89. return false, err
  90. }
  91. return FsMagic(buf.Type) == fsType, nil
  92. }