path: root/Documentation
diff options
authorQu Wenruo <>2017-10-17 15:45:50 +0800
committerDavid Sterba <>2017-11-14 15:59:00 +0100
commit06f56db9cb1aaff277b25f07da091e146ac319b9 (patch)
tree92df4648f5a16265ccde68c06b95368e4bbb635a /Documentation
parenta450dc4bfe76329b908e2b5aa43d3e6a6aa22732 (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 <> Reported-by: Rich Rauenzahn <> Reviewed-by: Nikolay Borisov <> Signed-off-by: Qu Wenruo <>
Diffstat (limited to 'Documentation')
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);
*btrfs rescue* returns a zero exit status if it succeeds. Non zero is