diff options
author | Qu Wenruo <wqu@suse.com> | 2017-10-17 15:45:50 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-11-14 15:59:00 +0100 |
commit | 06f56db9cb1aaff277b25f07da091e146ac319b9 (patch) | |
tree | 92df4648f5a16265ccde68c06b95368e4bbb635a /Documentation | |
parent | a450dc4bfe76329b908e2b5aa43d3e6a6aa22732 (diff) |
btrfs-progs: rescue: Introduce fix-device-size
Introduce new subcommand 'fix-device-size' to the rescue group, to fix
device size alignment-related problems.
Especially for people unable to mount their fs with super::total_bytes
mismatch, this tool will fix the problems and let the mount continue.
Reported-by: Asif Youssuff <yoasif@gmail.com>
Reported-by: Rich Rauenzahn <rrauenza@gmail.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/btrfs-rescue.asciidoc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Documentation/btrfs-rescue.asciidoc b/Documentation/btrfs-rescue.asciidoc index 24b619c6..815abe3c 100644 --- a/Documentation/btrfs-rescue.asciidoc +++ b/Documentation/btrfs-rescue.asciidoc @@ -73,6 +73,35 @@ the log and the filesystem may be mounted normally again. The keywords to look for are 'open_ctree' which says that it's during mount and function names that contain 'replay', 'recover' or 'log_tree'. +*fix-device-size* <device>:: +fix device size and super block total bytes ++ +This command will fix the following problems, by re-aligning all devices' total +bytes and re-calculating super block total bytes. ++ +1. Newer kernel refuse to mount btrfs caused by mismatch super block total bytes ++ +---- +BTRFS error (device sdb): super_total_bytes 92017859088384 mismatch with fs_devices total_rw_bytes 92017859094528 +---- ++ +2. Noisy kernel warning for newer kernels ++ +---- +WARNING: CPU: 3 PID: 439 at fs/btrfs/ctree.h:1559 btrfs_update_device+0x1c5/0x1d0 [btrfs] +---- ++ +And the corresponding line is the `WARN_ON()` line below: ++ +---- +{ + BUILD_BUG_ON(sizeof(u64) != + sizeof(((struct btrfs_dev_item *)0))->total_bytes); + WARN_ON(!IS_ALIGNED(val, eb->fs_info->sectorsize)); + btrfs_set_64(eb, s, offsetof(struct btrfs_dev_item, total_bytes), val); +} +---- + EXIT STATUS ----------- *btrfs rescue* returns a zero exit status if it succeeds. Non zero is |