16
#define MINIX_SUPER_MAGIC 0x137F /* minix v1, 14 char names */
17
#define MINIX_SUPER_MAGIC2 0x138F /* minix v1, 30 char names */
18
#define MINIX2_SUPER_MAGIC 0x2468 /* minix v2, 14 char names */
19
#define MINIX2_SUPER_MAGIC2 0x2478 /* minix v2, 30 char names */
20
struct minix_super_block {
24
#define minixmagic(s) assemble2le(s.s_magic)
26
#define ISODCL(from, to) (to - from + 1)
27
#define ISO_STANDARD_ID "CD001"
28
struct iso_volume_descriptor {
29
char type[ISODCL(1,1)]; /* 711 */
31
char version[ISODCL(7,7)];
32
char data[ISODCL(8,2048)];
35
#define HS_STANDARD_ID "CDROM"
36
struct hs_volume_descriptor {
37
char foo[ISODCL ( 1, 8)]; /* 733 */
38
char type[ISODCL ( 9, 9)]; /* 711 */
39
char id[ISODCL ( 10, 14)];
40
char version[ISODCL ( 15, 15)]; /* 711 */
41
char data[ISODCL(16,2048)];
44
#define EXT_SUPER_MAGIC 0x137D
45
struct ext_super_block {
49
#define extmagic(s) assemble2le(s.s_magic)
51
#define EXT2_PRE_02B_MAGIC 0xEF51
52
#define EXT2_SUPER_MAGIC 0xEF53
53
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
54
struct ext2_super_block {
58
u_char s_feature_compat[4];
59
u_char s_feature_incompat[4];
60
u_char s_feature_ro_compat[4];
62
u_char s_volume_name[16];
64
u_char s_journal_inum[4]; /* ext3 only */
66
#define ext2magic(s) assemble2le(s.s_magic)
68
struct reiserfs_super_block
70
u_char s_block_count[4];
71
u_char s_free_blocks[4];
72
u_char s_root_block[4];
73
u_char s_journal_block[4];
74
u_char s_journal_dev[4];
75
u_char s_orig_journal_size[4];
76
u_char s_journal_trans_max[4];
77
u_char s_journal_block_count[4];
78
u_char s_journal_max_batch[4];
79
u_char s_journal_max_commit_age[4];
80
u_char s_journal_max_trans_age[4];
81
u_char s_blocksize[2];
82
u_char s_oid_maxsize[2];
83
u_char s_oid_cursize[2];
87
u_char s_version[2]; /* only valid with relocated journal */
89
/* only valid in 3.6.x format --mason@suse.com */
94
#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs"
95
#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs"
96
/* also known as REISER2FS_JR_SUPER_MAGIC_STRING */
97
#define REISER3FS_SUPER_MAGIC_STRING "ReIsEr3Fs"
98
#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024)
99
/* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */
100
#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024)
102
/* values of s_version when REISER3FS_SUPER_MAGIC_STRING is found */
103
#define REISERFS_VERSION_1 0 /* 3.5.x disk format */
104
#define REISERFS_VERSION_2 2 /* 3.6.x disk format */
106
extern int reiserfs_magic_version(const char *magic);
108
#define _XIAFS_SUPER_MAGIC 0x012FD16D
109
struct xiafs_super_block {
110
u_char s_boot_segment[512]; /* 1st sector reserved for boot */
114
#define xiafsmagic(s) assemble4le(s.s_magic)
116
/* From jj@sunsite.ms.mff.cuni.cz Mon Mar 23 15:19:05 1998 */
117
#define UFS_SUPER_MAGIC_LE 0x00011954
118
#define UFS_SUPER_MAGIC_BE 0x54190100
119
struct ufs_super_block {
120
u_char s_dummy[0x55c];
123
#define ufsmagic(s) assemble4le(s.s_magic)
125
/* From Richard.Russon@ait.co.uk Wed Feb 24 08:05:27 1999 */
126
#define NTFS_SUPER_MAGIC "NTFS"
127
struct ntfs_super_block {
132
/* From inspection of a few FAT filesystems - aeb */
133
/* Unfortunately I find almost the same thing on an extended partition;
134
it looks like a primary has some directory entries where the extended
135
has a partition table: IO.SYS, MSDOS.SYS, WINBOOT.SYS */
136
struct fat_super_block {
138
u_char s_os[8]; /* "MSDOS5.0" or "MSWIN4.0" or "MSWIN4.1" */
139
/* mtools-3.9.4 writes "MTOOL394" */
141
u_char s_label[11]; /* for DOS? */
142
u_char s_fs[8]; /* "FAT12 " or "FAT16 " or all zero */
143
/* OS/2 BM has "FAT " here. */
145
u_char s_label2[11]; /* for Windows? */
146
u_char s_fs2[8]; /* garbage or "FAT32 " */
149
#define XFS_SUPER_MAGIC "XFSB"
150
struct xfs_super_block {
158
#define CRAMFS_SUPER_MAGIC 0x28cd3d45
159
#define CRAMFS_SUPER_MAGIC_BE 0x453dcd28
160
struct cramfs_super_block {
165
#define cramfsmagic(s) assemble4le(s.s_magic)
167
#define HFS_SUPER_MAGIC 0x4244
168
struct hfs_super_block {
169
u_char s_magic[2]; /* drSigWord */
171
u_char s_blksize[4]; /* drAlBlkSiz */
173
#define hfsmagic(s) assemble2be(s.s_magic)
174
#define hfsblksize(s) assemble4be(s.s_blksize)
176
#define HPFS_SUPER_MAGIC 0xf995e849
177
struct hpfs_super_block {
181
#define hpfsmagic(s) assemble4le(s.s_magic)
183
struct adfs_super_block {
187
u_char s_checksum[1];
189
#define adfsblksize(s) ((uint) s.s_blksize[0])
191
/* found in first 4 bytes of block 1 */
192
struct vxfs_super_block {
195
#define vxfsmagic(s) assemble4le(s.s_magic)
196
#define VXFS_SUPER_MAGIC 0xa501FCF5
198
struct jfs_super_block {
207
#define JFS_SUPER1_OFF 0x8000
208
#define JFS_MAGIC "JFS1"
210
struct sysv_super_block {
211
u_char s_dummy1[504];
215
#define sysvmagic(s) assemble4le(s.s_magic)
216
#define SYSV_SUPER_MAGIC 0xfd187e20
218
struct mdp_super_block {
221
#define MD_SB_MAGIC 0xa92b4efc
222
#define mdsbmagic(s) assemble4le(s.md_magic)
224
struct ocfs_volume_header {
225
u_char minor_version[4];
226
u_char major_version[4];
227
u_char signature[128];
230
struct ocfs_volume_label {
231
u_char disk_lock[48];
236
#define ocfslabellen(o) assemble2le(o.label_len)
237
#define OCFS_MAGIC "OracleCFS"
239
struct ocfs2_super_block {
241
u_char s_dummy1[184];
247
#define OCFS2_MIN_BLOCKSIZE 512
248
#define OCFS2_MAX_BLOCKSIZE 4096
249
#define OCFS2_SUPER_BLOCK_BLKNO 2
250
#define OCFS2_SUPER_BLOCK_SIGNATURE "OCFSV2"
253
struct efs_volume_directory { /* size 16 */
259
struct efs_partition_table { /* size 12 */
265
struct efs_volume_header { /* size 512 */
269
char vh_bootfile[16];
271
struct efs_volume_directory vh_vd[15];
272
struct efs_partition_table vh_pt[16];
278
char fs_stuff[512+28];
285
#define EFS_VHMAGIC 0x0be5a941 /* big endian */
286
#define EFS_SBMAGIC 0x00072959 /* idem */
287
#define EFS_SBMAGIC2 0x0007295a /* idem */
290
assemble2le(unsigned char *p) {
291
return (p[0] | (p[1] << 8));
295
assemble2be(unsigned char *p) {
296
return (p[1] | (p[0] << 8));
300
assemble4le(unsigned char *p) {
301
return (p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24));
305
assemble4be(unsigned char *p) {
306
return (p[3] | (p[2] << 8) | (p[1] << 16) | (p[0] << 24));