All of lore.kernel.org
 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 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.