Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ===================================== |
| 4 | OCFS2 file system - online file check |
| 5 | ===================================== |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 6 | |
| 7 | This document will describe OCFS2 online file check feature. |
| 8 | |
| 9 | Introduction |
| 10 | ============ |
Masanari Iida | a039ba3 | 2016-07-01 20:28:18 +0900 | [diff] [blame] | 11 | OCFS2 is often used in high-availability systems. However, OCFS2 usually |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 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 |
Masanari Iida | a039ba3 | 2016-07-01 20:28:18 +0900 | [diff] [blame] | 16 | -EIO errno to the calling process and terminate further processing so that the |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 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 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 46 | There is a sysfs directory for each OCFS2 file system mounting:: |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 47 | |
| 48 | /sys/fs/ocfs2/<devname>/filecheck |
| 49 | |
Masanari Iida | a039ba3 | 2016-07-01 20:28:18 +0900 | [diff] [blame] | 50 | Here, <devname> indicates the name of OCFS2 volume device which has been already |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 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 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 56 | 1. If you want to know what error exactly happened to <inode> before fixing, do:: |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 57 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 58 | # echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/check |
| 59 | # cat /sys/fs/ocfs2/<devname>/filecheck/check |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 60 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 61 | The output is like this:: |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 62 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 63 | INO DONE ERROR |
| 64 | 39502 1 GENERATION |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 65 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 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. |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 70 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 71 | 2. If you determine to fix this inode, do:: |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 72 | |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 73 | # echo "<inode>" > /sys/fs/ocfs2/<devname>/filecheck/fix |
| 74 | # cat /sys/fs/ocfs2/<devname>/filecheck/fix |
| 75 | |
| 76 | The output is like this::: |
| 77 | |
| 78 | INO DONE ERROR |
| 79 | 39502 1 SUCCESS |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 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 |
Masanari Iida | a039ba3 | 2016-07-01 20:28:18 +0900 | [diff] [blame] | 84 | default size is 10, and can be adjust between the range of 10 ~ 100. You can |
Mauro Carvalho Chehab | 3d0c60d | 2020-02-17 17:12:14 +0100 | [diff] [blame] | 85 | adjust the size like this:: |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 86 | |
| 87 | # echo "<size>" > /sys/fs/ocfs2/<devname>/filecheck/set |
| 88 | |
| 89 | Fixing stuff |
| 90 | ============ |
Masanari Iida | a039ba3 | 2016-07-01 20:28:18 +0900 | [diff] [blame] | 91 | On receiving the inode, the filesystem would read the inode and the |
Gang He | d750c42 | 2016-03-22 14:24:33 -0700 | [diff] [blame] | 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. |