driver_linux.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // +build linux
  2. package graphdriver
  3. import (
  4. "path/filepath"
  5. "syscall"
  6. )
  7. const (
  8. FsMagicAufs = FsMagic(0x61756673)
  9. FsMagicBtrfs = FsMagic(0x9123683E)
  10. FsMagicCramfs = FsMagic(0x28cd3d45)
  11. FsMagicExtfs = FsMagic(0x0000EF53)
  12. FsMagicF2fs = FsMagic(0xF2F52010)
  13. FsMagicJffs2Fs = FsMagic(0x000072b6)
  14. FsMagicJfs = FsMagic(0x3153464a)
  15. FsMagicNfsFs = FsMagic(0x00006969)
  16. FsMagicRamFs = FsMagic(0x858458f6)
  17. FsMagicReiserFs = FsMagic(0x52654973)
  18. FsMagicSmbFs = FsMagic(0x0000517B)
  19. FsMagicSquashFs = FsMagic(0x73717368)
  20. FsMagicTmpFs = FsMagic(0x01021994)
  21. FsMagicXfs = FsMagic(0x58465342)
  22. FsMagicZfs = FsMagic(0x2fc12fc1)
  23. )
  24. var (
  25. // Slice of drivers that should be used in an order
  26. priority = []string{
  27. "aufs",
  28. "btrfs",
  29. "zfs",
  30. "devicemapper",
  31. "overlay",
  32. "vfs",
  33. }
  34. FsNames = map[FsMagic]string{
  35. FsMagicAufs: "aufs",
  36. FsMagicBtrfs: "btrfs",
  37. FsMagicCramfs: "cramfs",
  38. FsMagicExtfs: "extfs",
  39. FsMagicF2fs: "f2fs",
  40. FsMagicJffs2Fs: "jffs2",
  41. FsMagicJfs: "jfs",
  42. FsMagicNfsFs: "nfs",
  43. FsMagicRamFs: "ramfs",
  44. FsMagicReiserFs: "reiserfs",
  45. FsMagicSmbFs: "smb",
  46. FsMagicSquashFs: "squashfs",
  47. FsMagicTmpFs: "tmpfs",
  48. FsMagicUnsupported: "unsupported",
  49. FsMagicXfs: "xfs",
  50. FsMagicZfs: "zfs",
  51. }
  52. )
  53. func GetFSMagic(rootpath string) (FsMagic, error) {
  54. var buf syscall.Statfs_t
  55. if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil {
  56. return 0, err
  57. }
  58. return FsMagic(buf.Type), nil
  59. }