Whamcloud - gitweb
6bc8670979c638de980b9f1e27ae555f7bf8f5d1
[doc/protocol.git] / struct_obd_statfs.txt
1 .OBD Statfs
2 [[struct-obd-statfs]]
3 ****
4 An 'obd_statfs' structure conveys file-system-wide information of a
5 given target (MDT or OST).
6
7 [source,c]
8 ----
9 struct obd_statfs {
10         __u64  os_type;
11         __u64  os_blocks;
12         __u64  os_bfree;
13         __u64  os_bavail;
14         __u64  os_files;
15         __u64  os_ffree;
16         __u8   os_fsid[40];
17         __u32  os_bsize;
18         __u32  os_namelen;
19         __u64  os_maxbytes;
20         __u32  os_state;
21         __u32  os_fprecreated;
22         __u32  os_spare2;
23         __u32  os_spare3;
24         __u32  os_spare4;
25         __u32  os_spare5;
26         __u32  os_spare6;
27         __u32  os_spare7;
28         __u32  os_spare8;
29         __u32  os_spare9;
30 };
31 ----
32 ****
33
34 Most of the fields correspond directly to the 'struct statfs' fields
35 returned by a 'statfs()' system call and have the same meaning. The
36 values are for the target in question (MDT or OST).
37
38 The 'os_type' field gives the kind of file system used for the
39 target's OSD:
40
41 .File system types ('os_type') for Lustre targets
42 [options="header"]
43 |====
44 | f_type                     | value
45 | EXT4_SUPER_MAGIC (ldiskfs) | 0xEF53
46 | ZFS_SUPER_MAGIC            | 0x2fc12fc1
47 |====
48
49 The 'os_blocks' field is the total number of blocks in the target, in
50 units of os_bsize.
51
52 The 'os_bfree' field is the number of blocks not currently in use.
53
54 The 'os_bavail' is the number of blocks available to be allocated to
55 new files.  The number of available blocks is typically lower than the
56 number of free blocks due to outstanding "grants" (see <<grant>>) and
57 blocks reserved for target internal usage such as metadata.
58
59 The 'os_files' field is the total number of files on the target, both
60 allocated and free.  For some OSD types this is a static number, and
61 for others this is dynamic based on os_ffree and the amount of free
62 space.
63
64 The 'os_ffree' field is the current number of files that could be
65 created based on current usage.  For some OSD types this is a function
66 of the free space in the device and may increase or decrease as free
67 space changes.
68
69 The 'os_fsid' is intended to be the target backing device UUID in
70 ASCII format.  The current osd-ldiskfs and osd-zfs implementations
71 do not fill this field in.
72
73 The 'os_bsize' field is the block size in bytes. This is for computing
74 the total, free, and available space in combination with 'os_blocks',
75 'os_bfree', and 'os_bavail' respectively.  It does not necessarily
76 represent the minimum or optimal IO size.
77
78 The 'os_namelen' field gives the maximum name length (in bytes) for
79 files on the OSD.
80
81 The 'os_maxbytes' field is the maximum size of a single object
82 (i.e. the maximum byte offset that can be written to).  This is the
83 same value as the 'ocd_maxbytes' field of the 'obd_connect_data'
84 structure.
85
86 The 'os_state' field encodes the status of the OSD. It can be:
87
88 .OSD state
89 [options="header"]
90 |====
91 | os_state flag     | value
92 | OS_STATE_DEGRADED | 0x1
93 | OS_STATE_READONLY | 0x2
94 |====
95
96 In normal operation the 'os_state' value is returned as 0x0.  If the
97 OSD has a RAID configuration that is degraded or
98 rebuilding the state is returned with the OS_STATE_DEGRADED (0x1) flag
99 set. If the file system has been set to read-only, either manually at
100 mount or automatcially due to detected corruption of the underlying
101 target filesystem, then 'os_state' is returned with OS_STATE_READONLY (0x2)
102 set.
103
104 The 'os_fprecreated' field counts the number of pre-created objects
105 available on an OST. The 'os_fprecreated' value counts as "used"
106 inodes, so it reduces 'os_ffree'. Lustre places a hard limit of
107 2*OST_MAX_PRECREATE (2*20000) on the number of precreates it will
108 allow for an OST. There are currently no precreated objects on an MDT
109 so it is just 0 in that case.
110