FreeBSD src
Go to file
Alexander Motin 24433f00ea MFV r329502: 7614 zfs device evacuation/removal
illumos/illumos-gate@5cabbc6b49

https://www.illumos.org/issues/7614:
This project allows top-level vdevs to be removed from the storage pool with
“zpool remove”, reducing the total amount of storage in the pool. This
operation copies all allocated regions of the device to be removed onto other
devices, recording the mapping from old to new location. After the removal is
complete, read and free operations to the removed (now “indirect”) vdev must
be remapped and performed at the new location on disk. The indirect mapping
table is kept in memory whenever the pool is loaded, so there is minimal
performance overhead when doing operations on the indirect vdev.

The size of the in-memory mapping table will be reduced when its entries
become “obsolete” because they are no longer used by any block pointers in
the pool. An entry becomes obsolete when all the blocks that use it are
freed. An entry can also become obsolete when all the snapshots that
reference it are deleted, and the block pointers that reference it have been
“remapped” in all filesystems/zvols (and clones). Whenever an indirect block
is written, all the block pointers in it will be “remapped” to their new
(concrete) locations if possible. This process can be accelerated by using
the “zfs remap” command to proactively rewrite all indirect blocks that
reference indirect (removed) vdevs.

Note that when a device is removed, we do not verify the checksum of the data
that is copied. This makes the process much faster, but if it were used on
redundant vdevs (i.e. mirror or raidz vdevs), it would be possible to copy
the wrong data, when we have the correct data on e.g. the other side of the
mirror. Therefore, mirror and raidz devices can not be removed.

Reviewed by: Alex Reece <alex@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: John Kennedy <john.kennedy@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Richard Laager <rlaager@wiktel.com>
Reviewed by: Tim Chase <tim@chase2k.com>
Approved by: Garrett D'Amore <garrett@damore.org>
Author: Prashanth Sreenivasa <pks@delphix.com>
2018-02-21 16:51:02 +00:00
bin Capsicumize uuidgen. 2018-02-17 12:32:53 +00:00
cddl MFV r329502: 7614 zfs device evacuation/removal 2018-02-21 16:51:02 +00:00
contrib MFV r329552: less v530. 2018-02-19 05:10:22 +00:00
crypto Add declaration of SSL_get_selected_srtp_profile() for OpenSSL. 2018-01-25 23:38:05 +00:00
etc Fix handling of "one_nomatch" shell variable to preserve its contents 2018-02-17 13:32:29 +00:00
gnu Remove libreadline from the source tree, all consumers but gdb 2018-02-06 12:22:42 +00:00
include We don't support gcc < 4.2.1, so varargs.h now is just #error 2018-02-12 14:48:14 +00:00
kerberos5 various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
lib 8520 7198 lzc_rollback_to should support rolling back to origin 2018-02-21 15:10:33 +00:00
libexec Build getty(8) with WARNS=6. 2018-02-21 15:57:24 +00:00
release Put the pine64 root filesystem on teh correct partition. 2018-02-16 16:22:54 +00:00
rescue Avoid referencing private lib names directly. 2017-11-10 07:53:02 +00:00
sbin More verbose output. 2018-02-20 05:35:00 +00:00
secure Remove c_rehash(1) to not confuse users. We do not install the Perl script. 2018-02-08 19:55:03 +00:00
share style.lua(9): Drop notes about semicolons 2018-02-21 01:37:22 +00:00
stand lualoader: Add boot environment support 2018-02-21 16:50:41 +00:00
sys MFV r329502: 7614 zfs device evacuation/removal 2018-02-21 16:51:02 +00:00
targets Remove libreadline from the source tree, all consumers but gdb 2018-02-06 12:22:42 +00:00
tests gpart: append partition name to the underlying provider's physical path 2018-02-14 20:26:09 +00:00
tools tools/80211: correct array index 2018-02-19 19:01:46 +00:00
usr.bin ministat: disallow negative variance / nan Stddev 2018-02-21 15:54:23 +00:00
usr.sbin mountd: Return proper errno values in a few error paths 2018-02-21 00:19:02 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.gitattributes .git*: add gitattributes and gitignore 2017-12-25 21:07:54 +00:00
.gitignore .git*: add gitattributes and gitignore 2017-12-25 21:07:54 +00:00
COPYRIGHT Happy New Year 2018 my friends! 2017-12-31 16:48:04 +00:00
LOCKS Explicitly require Security Officer's approval for kernel PRNG bits. 2013-09-17 14:19:05 +00:00
MAINTAINERS list myself in the MAINTAINERS file for Xen bits 2018-02-13 16:25:43 +00:00
Makefile Add a note about why we have the conditional before including 2018-02-07 16:28:26 +00:00
Makefile.inc1 Properly lookup values if they were empty. 2018-02-20 22:03:08 +00:00
Makefile.libcompat X_COMPILER_* may not be defined. 2018-01-24 18:08:37 +00:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc Move devmatch to sbin from usr/sbin. 2018-02-12 14:44:21 +00:00
README Vendor import of less v530. 2018-02-19 04:47:31 +00:00
README.md Document the sys/boot -> stand move in hier.7 and the top-level README. 2017-12-03 20:36:36 +00:00
UPDATING Add Lua as a scripting langauge to /boot/loader 2018-02-12 15:31:53 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

For copyright information, please see the file COPYRIGHT in this directory (additional copyright information also exists for some sources in this tree - please see the specific source directories for more information).

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7) and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html for more information, including setting make(1) variables.

The buildkernel and installkernel targets build and install the kernel and the modules (see below). Please see the top of the Makefile in this directory for more information on the standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process. See build(7), config(8), and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information.

Note: If you want to build and install the kernel with the buildkernel and installkernel targets, you might need to build world before. More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf sub-directory. GENERIC is the default configuration used in release builds. NOTES contains entries and documentation for all possible devices, not just those commonly used.

Source Roadmap:

bin				System/user commands.

cddl			Various commands and libraries under the Common Development  
				and Distribution License.

contrib			Packages contributed by 3rd parties.

crypto			Cryptography stuff (see crypto/README).

etc				Template files for /etc.

gnu				Various commands and libraries under the GNU Public License.  
				Please see gnu/COPYING* for more information.

include			System include files.

kerberos5		Kerberos5 (Heimdal) package.

lib				System libraries.

libexec			System daemons.

release			Release building Makefile & associated tools.

rescue			Build system for statically linked /rescue utilities.

sbin			System commands.

secure			Cryptographic libraries and commands.

share			Shared resources.

stand			Boot loader sources.

sys				Kernel sources.

tests			Regression tests which can be run by Kyua.  See tests/README
				for additional information.

tools			Utilities for regression testing and miscellaneous tasks.

usr.bin			User commands.

usr.sbin		System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html