From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v2 00/19]
Date: Mon, 26 Dec 2016 14:29:20 +0800 [thread overview]
Message-ID: <20161226062939.5841-1-quwenruo@cn.fujitsu.com> (raw)
For any one who wants to try it, it can be get from my repo:
https://github.com/adam900710/btrfs-progs/tree/offline_scrub
Currently, I only tested it on SINGLE/DUP/RAID1/RAID5 filesystems, with
mirror or parity or data corrupted.
The tool are all able to detect them and give recoverbility report.
Several reports on kernel scrub screwing up good data stripes are in ML
for sometime.
And since kernel scrub won't account P/Q corruption, it makes us quite
to detect error like kernel screwing up P/Q when scrubbing.
To get a comparable tool for kernel scrub, we need a user-space tool to
act as benchmark to compare their different behaviors.
So here is the patchset for user-space scrub.
Which can do:
1) All mirror/backup check for non-parity based stripe
Which means for RAID1/DUP/RAID10, we can really check all mirrors
other than the 1st good mirror.
Current "--check-data-csum" option will be finally replace by scrub.
As it doesn't really check all mirrors, if it hits a good copy, then
resting copies will just be ignored.
2) Comprehensive RAID5/6 full stripe check
It will take full use of btrfs csum(both tree and data).
It will only recover the full stripe if all recovered data matches
with its csum.
In fact, it can already expose several new btrfs kernel bug.
As it's the main tool I'm using when developing the kernel fixes.
For example, after screwing up a data stripe, kernel did repairs using
parity, but recovered full stripe has wrong parity.
Need to scrub again to fix it.
And this patchset also introduced new map_block() function, which is
more flex than current btrfs_map_block(), and has a unified interface
for all profiles, not just an array of physical addresses.
Check the 6th and 7th patch for details.
They are already used in RAID5/6 scrub, but can also be used for other
profiles too.
The to-do list has been shortened, since RAID6 and new check logical is
introduced.
1) Repair support
In fact, current tool can already report recoverability, repair is
not hard to implement.
2) Test cases
Need to make the infrastructure able to handle multi-device first.
3) Make btrfsck able to handle RAID5 with missing device
Now it doesn't even open RAID5 btrfs with missing device, even though
scrub should be able to handle it.
Changelog:
V0.8 RFC:
Initial RFC patchset
v1:
First formal patchset.
RAID6 recovery support added, mainly copied from kernel radi6 lib.
Cleaner recovery logical.
v2:
More comments in both code and commit message, suggested by David.
File re-arrangement, no check/ dir, raid56.ch moved to kernel-lib,
Suggested by David
Qu Wenruo (19):
btrfs-progs: raid56: Introduce raid56 header for later recovery usage
btrfs-progs: raid56: Introduce tables for RAID6 recovery
btrfs-progs: raid56: Allow raid6 to recover 2 data stripes
btrfs-progs: raid56: Allow raid6 to recover data and p
btrfs-progs: Introduce wrapper to recover raid56 data
btrfs-progs: Introduce new btrfs_map_block function which returns more
unified result.
btrfs-progs: Allow __btrfs_map_block_v2 to remove unrelated stripes
btrfs-progs: csum: Introduce function to read out one data csum
btrfs-progs: scrub: Introduce structures to support fsck scrub for
RAID56
btrfs-progs: scrub: Introduce function to scrub mirror based tree
block
btrfs-progs: scrub: Introduce function to scrub mirror based data
blocks
btrfs-progs: scrub: Introduce function to scrub one extent
btrfs-progs: scrub: Introduce function to scrub one data stripe
btrfs-progs: scrub: Introduce function to verify parities
btrfs-progs: extent-tree: Introduce function to check if there is any
extent in given range.
btrfs-progs: scrub: Introduce function to recover data parity
btrfs-progs: scrub: Introduce a function to scrub one full stripe
btrfs-progs: scrub: Introduce function to check a whole block group
btrfs-progs: fsck: Introduce offline scrub function
.gitignore | 2 +
Documentation/btrfs-check.asciidoc | 7 +
Makefile.in | 19 +-
cmds-check.c | 12 +-
csum.c | 96 ++++
ctree.h | 8 +
disk-io.c | 4 +-
disk-io.h | 7 +-
extent-tree.c | 60 +++
kernel-lib/mktables.c | 148 ++++++
kernel-lib/raid56.c | 359 +++++++++++++
kernel-lib/raid56.h | 58 +++
raid56.c | 172 ------
scrub.c | 1004 ++++++++++++++++++++++++++++++++++++
volumes.c | 283 ++++++++++
volumes.h | 49 ++
16 files changed, 2103 insertions(+), 185 deletions(-)
create mode 100644 csum.c
create mode 100644 kernel-lib/mktables.c
create mode 100644 kernel-lib/raid56.c
create mode 100644 kernel-lib/raid56.h
delete mode 100644 raid56.c
create mode 100644 scrub.c
--
2.11.0
next reply other threads:[~2016-12-26 6:30 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-26 6:29 Qu Wenruo [this message]
2016-12-26 6:29 ` [PATCH v2 01/19] btrfs-progs: raid56: Introduce raid56 header for later recovery usage Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 02/19] btrfs-progs: raid56: Introduce tables for RAID6 recovery Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 03/19] btrfs-progs: raid56: Allow raid6 to recover 2 data stripes Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 04/19] btrfs-progs: raid56: Allow raid6 to recover data and p Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 05/19] btrfs-progs: Introduce wrapper to recover raid56 data Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 06/19] btrfs-progs: Introduce new btrfs_map_block function which returns more unified result Qu Wenruo
2017-02-24 0:37 ` Liu Bo
2017-02-24 0:45 ` Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 07/19] btrfs-progs: Allow __btrfs_map_block_v2 to remove unrelated stripes Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 08/19] btrfs-progs: csum: Introduce function to read out one data csum Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 09/19] btrfs-progs: scrub: Introduce structures to support fsck scrub for RAID56 Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 10/19] btrfs-progs: scrub: Introduce function to scrub mirror based tree block Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 11/19] btrfs-progs: scrub: Introduce function to scrub mirror based data blocks Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 12/19] btrfs-progs: scrub: Introduce function to scrub one extent Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 13/19] btrfs-progs: scrub: Introduce function to scrub one data stripe Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 14/19] btrfs-progs: scrub: Introduce function to verify parities Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 15/19] btrfs-progs: extent-tree: Introduce function to check if there is any extent in given range Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 16/19] btrfs-progs: scrub: Introduce function to recover data parity Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 17/19] btrfs-progs: scrub: Introduce a function to scrub one full stripe Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 18/19] btrfs-progs: scrub: Introduce function to check a whole block group Qu Wenruo
2016-12-26 6:29 ` [PATCH v2 19/19] btrfs-progs: fsck: Introduce offline scrub function Qu Wenruo
2016-12-26 8:42 ` [PATCH v2 00/19] Btrfs offline scrub Qu Wenruo
2016-12-29 18:15 ` [PATCH v2 00/19] Goffredo Baroncelli
2016-12-30 0:40 ` Qu Wenruo
2016-12-30 18:39 ` Goffredo Baroncelli
2017-01-03 0:25 ` Qu Wenruo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161226062939.5841-1-quwenruo@cn.fujitsu.com \
--to=quwenruo@cn.fujitsu.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.