|
| 1 | +// +build linux |
| 2 | + |
| 3 | +package main |
| 4 | + |
| 5 | +import ( |
| 6 | + "syscall" |
| 7 | +) |
| 8 | + |
| 9 | +const ( |
| 10 | + /* statfs(2) */ |
| 11 | + ADFS_SUPER_MAGIC = 0xadf5 |
| 12 | + AFFS_SUPER_MAGIC = 0xadff |
| 13 | + AFS_SUPER_MAGIC = 0x5346414f |
| 14 | + ANON_INODE_FS_MAGIC = 0x09041934 |
| 15 | + AUTOFS_SUPER_MAGIC = 0x0187 |
| 16 | + BDEVFS_MAGIC = 0x62646576 |
| 17 | + BEFS_SUPER_MAGIC = 0x42465331 |
| 18 | + BFS_MAGIC = 0x1badface |
| 19 | + BINFMTFS_MAGIC = 0x42494e4d |
| 20 | + BPF_FS_MAGIC = 0xcafe4a11 |
| 21 | + BTRFS_SUPER_MAGIC = 0x9123683e |
| 22 | + BTRFS_TEST_MAGIC = 0x73727279 |
| 23 | + CGROUP_SUPER_MAGIC = 0x27e0eb |
| 24 | + CGROUP2_SUPER_MAGIC = 0x63677270 |
| 25 | + CIFS_MAGIC_NUMBER = 0xff534d42 |
| 26 | + CODA_SUPER_MAGIC = 0x73757245 |
| 27 | + COH_SUPER_MAGIC = 0x012ff7b7 |
| 28 | + CRAMFS_MAGIC = 0x28cd3d45 |
| 29 | + DEBUGFS_MAGIC = 0x64626720 |
| 30 | + DEVFS_SUPER_MAGIC = 0x1373 |
| 31 | + DEVPTS_SUPER_MAGIC = 0x1cd1 |
| 32 | + ECRYPTFS_SUPER_MAGIC = 0xf15f |
| 33 | + EFIVARFS_MAGIC = 0xde5e81e4 |
| 34 | + EFS_SUPER_MAGIC = 0x00414a53 |
| 35 | + EXT_SUPER_MAGIC = 0x137d |
| 36 | + EXT2_OLD_SUPER_MAGIC = 0xef51 |
| 37 | + EXT2_SUPER_MAGIC = 0xef53 |
| 38 | + EXT3_SUPER_MAGIC = 0xef53 |
| 39 | + EXT4_SUPER_MAGIC = 0xef53 |
| 40 | + F2FS_SUPER_MAGIC = 0xf2f52010 |
| 41 | + FUSE_SUPER_MAGIC = 0x65735546 |
| 42 | + FUTEXFS_SUPER_MAGIC = 0xbad1dea |
| 43 | + HFS_SUPER_MAGIC = 0x4244 |
| 44 | + HOSTFS_SUPER_MAGIC = 0x00c0ffee |
| 45 | + HPFS_SUPER_MAGIC = 0xf995e849 |
| 46 | + HUGETLBFS_MAGIC = 0x958458f6 |
| 47 | + ISOFS_SUPER_MAGIC = 0x9660 |
| 48 | + JFFS2_SUPER_MAGIC = 0x72b6 |
| 49 | + JFS_SUPER_MAGIC = 0x3153464a |
| 50 | + MINIX_SUPER_MAGIC = 0x137f /* orig. minix */ |
| 51 | + MINIX_SUPER_MAGIC2 = 0x138f /* 30 char minix */ |
| 52 | + MINIX2_SUPER_MAGIC = 0x2468 /* minix V2 */ |
| 53 | + MINIX2_SUPER_MAGIC2 = 0x2478 /* minix V2, 30 char names */ |
| 54 | + MINIX3_SUPER_MAGIC = 0x4d5a /* minix V3 fs, 60 char names */ |
| 55 | + MQUEUE_MAGIC = 0x19800202 |
| 56 | + MSDOS_SUPER_MAGIC = 0x4d44 |
| 57 | + MTD_INODE_FS_MAGIC = 0x11307854 |
| 58 | + NCP_SUPER_MAGIC = 0x564c |
| 59 | + NFS_SUPER_MAGIC = 0x6969 |
| 60 | + NILFS_SUPER_MAGIC = 0x3434 |
| 61 | + NSFS_MAGIC = 0x6e736673 |
| 62 | + NTFS_SB_MAGIC = 0x5346544e |
| 63 | + OCFS2_SUPER_MAGIC = 0x7461636f |
| 64 | + OPENPROM_SUPER_MAGIC = 0x9fa1 |
| 65 | + OVERLAYFS_SUPER_MAGIC = 0x794c7630 |
| 66 | + PIPEFS_MAGIC = 0x50495045 |
| 67 | + PROC_SUPER_MAGIC = 0x9fa0 |
| 68 | + PSTOREFS_MAGIC = 0x6165676c |
| 69 | + QNX4_SUPER_MAGIC = 0x002f |
| 70 | + QNX6_SUPER_MAGIC = 0x68191122 |
| 71 | + RAMFS_MAGIC = 0x858458f6 |
| 72 | + REISERFS_SUPER_MAGIC = 0x52654973 |
| 73 | + ROMFS_MAGIC = 0x7275 |
| 74 | + SECURITYFS_MAGIC = 0x73636673 |
| 75 | + SELINUX_MAGIC = 0xf97cff8c |
| 76 | + SMACK_MAGIC = 0x43415d53 |
| 77 | + SMB_SUPER_MAGIC = 0x517b |
| 78 | + SMB2_MAGIC_NUMBER = 0xfe534d42 |
| 79 | + SOCKFS_MAGIC = 0x534f434b |
| 80 | + SQUASHFS_MAGIC = 0x73717368 |
| 81 | + SYSFS_MAGIC = 0x62656572 |
| 82 | + SYSV2_SUPER_MAGIC = 0x012ff7b6 |
| 83 | + SYSV4_SUPER_MAGIC = 0x012ff7b5 |
| 84 | + TMPFS_MAGIC = 0x01021994 |
| 85 | + TRACEFS_MAGIC = 0x74726163 |
| 86 | + UDF_SUPER_MAGIC = 0x15013346 |
| 87 | + UFS_MAGIC = 0x00011954 |
| 88 | + USBDEVICE_SUPER_MAGIC = 0x9fa2 |
| 89 | + V9FS_MAGIC = 0x01021997 |
| 90 | + VXFS_SUPER_MAGIC = 0xa501fcf5 |
| 91 | + XENFS_SUPER_MAGIC = 0xabba1974 |
| 92 | + XENIX_SUPER_MAGIC = 0x012ff7b4 |
| 93 | + XFS_SUPER_MAGIC = 0x58465342 |
| 94 | + _XIAFS_SUPER_MAGIC = 0x012fd16d |
| 95 | + |
| 96 | + // vmblock.tar:vmblock-only/linux/filesystem.h |
| 97 | + VMBLOCK_SUPER_MAGIC = 0xabababab |
| 98 | + |
| 99 | + // linux/fs/afs/super.c |
| 100 | + AFS_FS_MAGIC = 0x6b414653 |
| 101 | + |
| 102 | + // linux/fs/ceph/super.h |
| 103 | + CEPH_SUPER_MAGIC = 0x00c36400 |
| 104 | + |
| 105 | + // openafs-1.6.18.2/src/afs/LINUX/osi_vfsops.c |
| 106 | + OPENAFS_FS_MAGIC = 0x5346414f |
| 107 | +) |
| 108 | + |
| 109 | +func isNetworkFS(path string) bool { |
| 110 | + var buf syscall.Statfs_t |
| 111 | + if err := syscall.Statfs(path, &buf); err != nil { |
| 112 | + return false |
| 113 | + } |
| 114 | + switch uint32(buf.Type) { |
| 115 | + case |
| 116 | + // pseudo filesystems |
| 117 | + BDEVFS_MAGIC, |
| 118 | + BINFMTFS_MAGIC, |
| 119 | + CGROUP_SUPER_MAGIC, |
| 120 | + DEBUGFS_MAGIC, |
| 121 | + EFIVARFS_MAGIC, |
| 122 | + FUTEXFS_SUPER_MAGIC, |
| 123 | + HUGETLBFS_MAGIC, |
| 124 | + PIPEFS_MAGIC, |
| 125 | + PROC_SUPER_MAGIC, |
| 126 | + SELINUX_MAGIC, |
| 127 | + SMACK_MAGIC, |
| 128 | + SYSFS_MAGIC, |
| 129 | + // network filesystems |
| 130 | + AFS_FS_MAGIC, |
| 131 | + OPENAFS_FS_MAGIC, |
| 132 | + CEPH_SUPER_MAGIC, |
| 133 | + CIFS_MAGIC_NUMBER, |
| 134 | + CODA_SUPER_MAGIC, |
| 135 | + NCP_SUPER_MAGIC, |
| 136 | + NFS_SUPER_MAGIC, |
| 137 | + OCFS2_SUPER_MAGIC, |
| 138 | + SMB_SUPER_MAGIC, |
| 139 | + V9FS_MAGIC, |
| 140 | + VMBLOCK_SUPER_MAGIC, |
| 141 | + SMB2_MAGIC_NUMBER, |
| 142 | + XENFS_SUPER_MAGIC: |
| 143 | + return true |
| 144 | + default: |
| 145 | + return false |
| 146 | + } |
| 147 | +} |
0 commit comments