Commit | Line | Data |
---|---|---|
3d0c60d0 MCC |
1 | .. SPDX-License-Identifier: GPL-2.0 |
2 | ||
3 | ===================================== | |
4 | OCFS2 file system - online file check | |
5 | ===================================== | |
d750c42a GH |
6 | |
7 | This document will describe OCFS2 online file check feature. | |
8 | ||
9 | Introduction | |
10 | ============ | |
a039ba34 | 11 | OCFS2 is often used in high-availability systems. However, OCFS2 usually |
d750c42a GH |
12 | converts the filesystem to read-only when encounters an error. This may not be |
13 | necessary, since turning the filesystem read-only would affect other running | |
14 | processes as well, decreasing availability. | |
15 | Then, a mount option (errors=continue) is introduced, which would return the | |
a039ba34 | 16 | -EIO errno to the calling process and terminate further processing so that the |
d750c42a GH |
17 | filesystem is not corrupted further. The filesystem is not converted to |
18 | read-only, and the problematic file's inode number is reported in the kernel | |
19 | log. The user can try to check/fix this file via online filecheck feature. | |
20 | ||
21 | Scope | |
22 | ===== | |
23 | This effort is to check/fix small issues which may hinder day-to-day operations | |
24 | of a cluster filesystem by turning the filesystem read-only. The scope of | |
25 | checking/fixing is at the file level, initially for regular files and eventually | |
26 | to all files (including system files) of the filesystem. | |
27 | ||
28 | In case of directory to file links is incorrect, the directory inode is | |
29 | reported as erroneous. | |
30 | ||
31 | This feature is not suited for extravagant checks which involve dependency of | |
32 | other components of the filesystem, such as but not limited to, checking if the | |
33 | bits for file blocks in the allocation has been set. In case of such an error, | |
34 | the offline fsck should/would be recommended. | |
35 | ||
36 | Finally, such an operation/feature should not be automated lest the filesystem | |
37 | may end up with more damage than before the repair attempt. So, this has to | |
38 | be performed using user interaction and consent. | |
39 | ||
40 | User interface | |
41 | ============== | |
42 | When there are errors in the OCFS2 filesystem, they are usually accompanied | |
43 | by the inode number which caused the error. This inode number would be the | |
44 | input to check/fix the file. | |
45 | ||
3d0c60d0 | 46 | There is a sysfs directory for each OCFS2 file system mounting:: |
d750c42a GH |
47 | |
48 | /sys/fs/ocfs2/<devname>/filecheck | |
49 | ||
a039ba34 | 50 | Here, <devname> indicates the name of OCFS2 volume device which has been already |
d750c42a GH |
51 | mounted. The file above would accept inode numbers. This could be used to |
52 | communicate with kernel space, tell which file(inode number) will be checked or | |
53 | fixed. Currently, three operations are supported, which includes checking | |
54 | inode, fixing inode and setting the size of result record history. | |
55 | ||
3d0c60d0 MCC |
56 | 1. If you want to know what error exactly happened to <inode> before fixing, do:: |
57 | ||
58 | # echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/check | |
59 | # cat /sys/fs/ocfs2/<devname>/filecheck/check | |
60 | ||
61 | The output is like this:: | |
d750c42a | 62 | |
3d0c60d0 MCC |
63 | INO DONE ERROR |
64 | 39502 1 GENERATION | |
d750c42a | 65 | |
3d0c60d0 MCC |
66 | <INO> lists the inode numbers. |
67 | <DONE> indicates whether the operation has been finished. | |
68 | <ERROR> says what kind of errors was found. For the detailed error numbers, | |
69 | please refer to the file linux/fs/ocfs2/filecheck.h. | |
d750c42a | 70 | |
3d0c60d0 | 71 | 2. If you determine to fix this inode, do:: |
d750c42a | 72 | |
3d0c60d0 MCC |
73 | # echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/fix |
74 | # cat /sys/fs/ocfs2/<devname>/filecheck/fix | |
d750c42a | 75 | |
3d0c60d0 | 76 | The output is like this::: |
d750c42a | 77 | |
3d0c60d0 MCC |
78 | INO DONE ERROR |
79 | 39502 1 SUCCESS | |
d750c42a GH |
80 | |
81 | This time, the <ERROR> column indicates whether this fix is successful or not. | |
82 | ||
83 | 3. The record cache is used to store the history of check/fix results. It's | |
a039ba34 | 84 | default size is 10, and can be adjust between the range of 10 ~ 100. You can |
3d0c60d0 | 85 | adjust the size like this:: |
d750c42a GH |
86 | |
87 | # echo "<size>" > /sys/fs/ocfs2/<devname>/filecheck/set | |
88 | ||
89 | Fixing stuff | |
90 | ============ | |
a039ba34 | 91 | On receiving the inode, the filesystem would read the inode and the |
d750c42a GH |
92 | file metadata. In case of errors, the filesystem would fix the errors |
93 | and report the problems it fixed in the kernel log. As a precautionary measure, | |
94 | the inode must first be checked for errors before performing a final fix. | |
95 | ||
96 | The inode and the result history will be maintained temporarily in a | |
97 | small linked list buffer which would contain the last (N) inodes | |
98 | fixed/checked, the detailed errors which were fixed/checked are printed in the | |
99 | kernel log. |