linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
To: Stefan Behrens <sbehrens@giantdisaster.de>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 00/26] Btrfs: Add device replace code
Date: Wed, 07 Nov 2012 11:14:36 +0900	[thread overview]
Message-ID: <5099C40C.6030003@jp.fujitsu.com> (raw)
In-Reply-To: <cover.1352214751.git.sbehrens@giantdisaster.de>

(2012/11/07 1:38), Stefan Behrens wrote:
> This patch series adds support for replacing disks at runtime.
> 
> It replaces the following steps in case a disk was lost:
>      mount ... -o degraded
>      btrfs device add new_disk
>      btrfs device delete missing
> 
> Or in case a disk just needs to be replaced because the error rate
> is increasing:
>      btrfs device add new_disk
>      btrfs device delete old_disk
> 
> Instead just run:
>      btrfs replace mountpoint old_disk new_disk
> 
> The device replace operation takes place at runtime on a live
> filesystem, you don't need to unmount it or stop active tasks.
> It is safe to crash or lose power during the operation, the
> process resumes with the next mount.
> 
> The copy usually takes place at 90% of the available platter
> speed if no additional disk I/O is ongoing during the copy
> operation, thus the degraded state without redundancy can be
> left quickly.
> 
> The copy process is started manually. It is a different project
> to react on an increased device I/O error rate with an automatic
> start of this procedure.
> 
> The patch series is based on btrfs-next and also available here:
> git://btrfs.giantdisaster.de/git/btrfs device-replace
> 
> The user mode part is the top commit of
> git://btrfs.giantdisaster.de/git/btrfs-progs master
> 
> 
> replace start [-Bfr] <path> <srcdev>|<devid> <targetdev>

I think that
 "btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>"
of the same synopsis as other subcommands is better.

- Tsutomu

>         Replace device of a btrfs filesystem.   On  a  live  filesystem,
>         duplicate  the  data  to  the  target  device which is currently
>         stored on the source device. If the source device is not  avail-
>         able anymore, or if the -r option is set, the data is built only
>         using the RAID redundancy mechanisms. After  completion  of  the
>         operation, the source device is removed from the filesystem.  If
>         the srcdev is a numerical value, it is assumed to be the  device
>         id  of the filesystem which is mounted at mount_point, otherwise
>         is is the path to the source device. If  the  source  device  is
>         disconnected, from the system, you have to use the devid parame-
>         ter format.  The targetdev needs to be same size or larger  than
>         the srcdev.
> 
>         Options
> 
>         -r     only  read  from  srcdev  if  no other zero-defect mirror
>                exists (enable this  if  your  drive  has  lots  of  read
>                errors, the access would be very slow)
> 
>         -f     force  using  and  overwriting targetdev even if it looks
>                like  containing  a  valid  btrfs  filesystem.  A   valid
>                filesystem  is  assumed  if  a  btrfs superblock is found
>                which contains a correct checksum. Devices which are cur-
>                rently  mounted  are never allowed to be used as the tar-
>                getdev
> 
>         -B     do not background
> 
> 
> replace status [-1] <path>
>         Print status  and  progress  information  of  a  running  device
>         replace operation.
> 
>         Options
> 
>         -1     print once instead of print continously until the replace
>                operation finishes (or is canceled)
> 
> 
> replace cancel <path>
>         Cancel a running device replace operation.
> 
> 
> Stefan Behrens (26):
>    Btrfs: rename the scrub context structure
>    Btrfs: remove the block device pointer from the scrub context struct
>    Btrfs: make the scrub page array dynamically allocated
>    Btrfs: in scrub repair code, optimize the reading of mirrors
>    Btrfs: in scrub repair code, simplify alloc error handling
>    Btrfs: cleanup scrub bio and worker wait code
>    Btrfs: add two more find_device() methods
>    Btrfs: Pass fs_info to btrfs_num_copies() instead of mapping_tree
>    Btrfs: pass fs_info to btrfs_map_block() instead of mapping_tree
>    Btrfs: add btrfs_scratch_superblock() function
>    Btrfs: pass fs_info instead of root
>    Btrfs: avoid risk of a deadlock in btrfs_handle_error
>    Btrfs: enhance btrfs structures for device replace support
>    Btrfs: introduce a btrfs_dev_replace_item type
>    Btrfs: add a new source file with device replace code
>    Btrfs: disallow mutually exclusiv admin operations from user mode
>    Btrfs: disallow some operations on the device replace target device
>    Btrfs: handle errors from btrfs_map_bio() everywhere
>    Btrfs: add code to scrub to copy read data to another disk
>    Btrfs: change core code of btrfs to support the device replace
>      operations
>    Btrfs: introduce GET_READ_MIRRORS functionality for btrfs_map_block()
>    Btrfs: changes to live filesystem are also written to replacement
>      disk
>    Btrfs: optionally avoid reads from device replace source drive
>    Btrfs: increase BTRFS_MAX_MIRRORS by one for dev replace
>    Btrfs: allow repair code to include target disk when searching
>      mirrors
>    Btrfs: add support for device replace ioctls
> 
>   fs/btrfs/Makefile          |    2 +-
>   fs/btrfs/check-integrity.c |   29 +-
>   fs/btrfs/compression.c     |    6 +-
>   fs/btrfs/ctree.h           |  127 ++-
>   fs/btrfs/dev-replace.c     |  843 ++++++++++++++++++++
>   fs/btrfs/dev-replace.h     |   44 ++
>   fs/btrfs/disk-io.c         |   79 +-
>   fs/btrfs/extent-tree.c     |    5 +-
>   fs/btrfs/extent_io.c       |   28 +-
>   fs/btrfs/extent_io.h       |    4 +-
>   fs/btrfs/inode.c           |   39 +-
>   fs/btrfs/ioctl.c           |  117 ++-
>   fs/btrfs/ioctl.h           |   45 ++
>   fs/btrfs/print-tree.c      |    3 +
>   fs/btrfs/reada.c           |   31 +-
>   fs/btrfs/scrub.c           | 1822 ++++++++++++++++++++++++++++++++------------
>   fs/btrfs/super.c           |   30 +-
>   fs/btrfs/transaction.c     |    7 +-
>   fs/btrfs/volumes.c         |  624 +++++++++++++--
>   fs/btrfs/volumes.h         |   26 +-
>   20 files changed, 3244 insertions(+), 667 deletions(-)
>   create mode 100644 fs/btrfs/dev-replace.c
>   create mode 100644 fs/btrfs/dev-replace.h
> 



  parent reply	other threads:[~2012-11-07  2:14 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-06 16:38 [PATCH 00/26] Btrfs: Add device replace code Stefan Behrens
2012-11-06 16:38 ` [PATCH 01/26] Btrfs: rename the scrub context structure Stefan Behrens
2012-11-06 16:38 ` [PATCH 02/26] Btrfs: remove the block device pointer from the scrub context struct Stefan Behrens
2012-11-06 16:38 ` [PATCH 03/26] Btrfs: make the scrub page array dynamically allocated Stefan Behrens
2012-11-06 16:38 ` [PATCH 04/26] Btrfs: in scrub repair code, optimize the reading of mirrors Stefan Behrens
2012-11-06 16:38 ` [PATCH 05/26] Btrfs: in scrub repair code, simplify alloc error handling Stefan Behrens
2012-11-06 16:38 ` [PATCH 06/26] Btrfs: cleanup scrub bio and worker wait code Stefan Behrens
2012-11-06 16:38 ` [PATCH 07/26] Btrfs: add two more find_device() methods Stefan Behrens
2012-11-08 14:24   ` Liu Bo
2012-11-12 16:50     ` Stefan Behrens
2012-11-06 16:38 ` [PATCH 08/26] Btrfs: Pass fs_info to btrfs_num_copies() instead of mapping_tree Stefan Behrens
2012-11-06 16:38 ` [PATCH 09/26] Btrfs: pass fs_info to btrfs_map_block() " Stefan Behrens
2012-11-06 16:38 ` [PATCH 10/26] Btrfs: add btrfs_scratch_superblock() function Stefan Behrens
2012-11-06 16:38 ` [PATCH 11/26] Btrfs: pass fs_info instead of root Stefan Behrens
2012-11-06 16:38 ` [PATCH 12/26] Btrfs: avoid risk of a deadlock in btrfs_handle_error Stefan Behrens
2012-11-06 16:38 ` [PATCH 13/26] Btrfs: enhance btrfs structures for device replace support Stefan Behrens
2012-11-06 16:38 ` [PATCH 14/26] Btrfs: introduce a btrfs_dev_replace_item type Stefan Behrens
2012-11-06 16:38 ` [PATCH 15/26] Btrfs: add a new source file with device replace code Stefan Behrens
2012-11-08 14:50   ` Liu Bo
2012-11-08 17:24     ` Stefan Behrens
2012-11-09  0:44       ` Liu Bo
2012-11-09 10:19         ` Stefan Behrens
2012-11-09 14:45           ` Liu Bo
2012-11-12 17:21             ` Stefan Behrens
2012-11-06 16:38 ` [PATCH 16/26] Btrfs: disallow mutually exclusiv admin operations from user mode Stefan Behrens
2012-11-06 16:38 ` [PATCH 17/26] Btrfs: disallow some operations on the device replace target device Stefan Behrens
2012-11-06 16:38 ` [PATCH 18/26] Btrfs: handle errors from btrfs_map_bio() everywhere Stefan Behrens
2012-11-06 16:38 ` [PATCH 19/26] Btrfs: add code to scrub to copy read data to another disk Stefan Behrens
2012-11-07  0:30   ` Tsutomu Itoh
2012-11-07 10:30     ` Stefan Behrens
2012-11-06 16:38 ` [PATCH 20/26] Btrfs: change core code of btrfs to support the device replace operations Stefan Behrens
2012-11-06 16:38 ` [PATCH 21/26] Btrfs: introduce GET_READ_MIRRORS functionality for btrfs_map_block() Stefan Behrens
2012-11-06 16:38 ` [PATCH 22/26] Btrfs: changes to live filesystem are also written to replacement disk Stefan Behrens
2012-11-06 16:38 ` [PATCH 23/26] Btrfs: optionally avoid reads from device replace source drive Stefan Behrens
2012-11-06 16:38 ` [PATCH 24/26] Btrfs: increase BTRFS_MAX_MIRRORS by one for dev replace Stefan Behrens
2012-11-09 10:47   ` David Pottage
2012-11-09 11:23     ` Stefan Behrens
2012-11-06 16:38 ` [PATCH 25/26] Btrfs: allow repair code to include target disk when searching mirrors Stefan Behrens
2012-11-06 16:38 ` [PATCH 26/26] Btrfs: add support for device replace ioctls Stefan Behrens
     [not found] ` <CAGy7UtjR+kZoBYWaeg=-jHbJHQh4pe3Jt5cwX-rTQEBHFkQ-YQ@mail.gmail.com>
2012-11-06 18:57   ` [PATCH 00/26] Btrfs: Add device replace code Stefan Behrens
2012-11-06 19:20     ` Hugo Mills
2012-11-06 22:48       ` Zach Brown
2012-11-07 10:29         ` Stefan Behrens
2012-11-07  2:14 ` Tsutomu Itoh [this message]
2012-11-07 13:12   ` Stefan Behrens
2012-11-08 12:50     ` Goffredo Baroncelli
2012-11-08 17:31       ` Stefan Behrens
2012-11-08 18:41         ` Goffredo Baroncelli
2012-11-09 10:02         ` Michael Kjörling
2012-11-13 16:25           ` Bart Noordervliet
2012-11-14 11:42             ` Stefan Behrens
2012-11-08  0:59 ` Chris Mason

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=5099C40C.6030003@jp.fujitsu.com \
    --to=t-itoh@jp.fujitsu.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=sbehrens@giantdisaster.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).