(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
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to