(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