mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-12-01 09:32:08 +03:00
This patch adds a new top-level vdev type called dRAID, which stands
for Distributed parity RAID. This pool configuration allows all dRAID
vdevs to participate when rebuilding to a distributed hot spare device.
This can substantially reduce the total time required to restore full
parity to pool with a failed device.
A dRAID pool can be created using the new top-level `draid` type.
Like `raidz`, the desired redundancy is specified after the type:
`draid[1,2,3]`. No additional information is required to create the
pool and reasonable default values will be chosen based on the number
of child vdevs in the dRAID vdev.
zpool create <pool> draid[1,2,3] <vdevs...>
Unlike raidz, additional optional dRAID configuration values can be
provided as part of the draid type as colon separated values. This
allows administrators to fully specify a layout for either performance
or capacity reasons. The supported options include:
zpool create <pool> \
draid[<parity>][:<data>d][:<children>c][:<spares>s] \
<vdevs...>
- draid[parity] - Parity level (default 1)
- draid[:<data>d] - Data devices per group (default 8)
- draid[:<children>c] - Expected number of child vdevs
- draid[:<spares>s] - Distributed hot spares (default 0)
Abbreviated example `zpool status` output for a 68 disk dRAID pool
with two distributed spares using special allocation classes.
```
pool: tank
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
slag7 ONLINE 0 0 0
draid2:8d:68c:2s-0 ONLINE 0 0 0
L0 ONLINE 0 0 0
L1 ONLINE 0 0 0
...
U25 ONLINE 0 0 0
U26 ONLINE 0 0 0
spare-53 ONLINE 0 0 0
U27 ONLINE 0 0 0
draid2-0-0 ONLINE 0 0 0
U28 ONLINE 0 0 0
U29 ONLINE 0 0 0
...
U42 ONLINE 0 0 0
U43 ONLINE 0 0 0
special
mirror-1 ONLINE 0 0 0
L5 ONLINE 0 0 0
U5 ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
L6 ONLINE 0 0 0
U6 ONLINE 0 0 0
spares
draid2-0-0 INUSE currently in use
draid2-0-1 AVAIL
```
When adding test coverage for the new dRAID vdev type the following
options were added to the ztest command. These options are leverages
by zloop.sh to test a wide range of dRAID configurations.
-K draid|raidz|random - kind of RAID to test
-D <value> - dRAID data drives per group
-S <value> - dRAID distributed hot spares
-R <value> - RAID parity (raidz or dRAID)
The zpool_create, zpool_import, redundancy, replacement and fault
test groups have all been updated provide test coverage for the
dRAID feature.
Co-authored-by: Isaac Huang <he.huang@intel.com>
Co-authored-by: Mark Maybee <mmaybee@cray.com>
Co-authored-by: Don Brady <don.brady@delphix.com>
Co-authored-by: Matthew Ahrens <mahrens@delphix.com>
Co-authored-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Mark Maybee <mmaybee@cray.com>
Reviewed-by: Matt Ahrens <matt@delphix.com>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #10102
79 lines
2.3 KiB
Makefile
79 lines
2.3 KiB
Makefile
pkgdatadir = $(datadir)/@PACKAGE@
|
|
|
|
dist_pkgdata_SCRIPTS = \
|
|
zimport.sh \
|
|
zfs.sh \
|
|
zfs-tests.sh \
|
|
zloop.sh \
|
|
zfs-helpers.sh
|
|
|
|
EXTRA_DIST = \
|
|
commitcheck.sh \
|
|
common.sh.in \
|
|
cstyle.pl \
|
|
dkms.mkconf \
|
|
dkms.postbuild \
|
|
enum-extract.pl \
|
|
kmodtool \
|
|
make_gitrev.sh \
|
|
man-dates.sh \
|
|
paxcheck.sh \
|
|
zfs2zol-patch.sed \
|
|
zol2zfs-patch.sed
|
|
|
|
define EXTRA_ENVIRONMENT
|
|
|
|
# Only required for in-tree use
|
|
export INTREE="yes"
|
|
export GDB="libtool --mode=execute gdb"
|
|
export LDMOD=/sbin/insmod
|
|
|
|
export CMD_DIR=@abs_top_builddir@/cmd
|
|
export UDEV_RULE_DIR=@abs_top_builddir@/udev/rules.d
|
|
export ZEDLET_ETC_DIR=$$CMD_DIR/zed/zed.d
|
|
export ZEDLET_LIBEXEC_DIR=$$CMD_DIR/zed/zed.d
|
|
export ZPOOL_SCRIPT_DIR=$$CMD_DIR/zpool/zpool.d
|
|
export ZPOOL_SCRIPTS_PATH=$$CMD_DIR/zpool/zpool.d
|
|
export CONTRIB_DIR=@abs_top_builddir@/contrib
|
|
export LIB_DIR=@abs_top_builddir@/lib
|
|
export SYSCONF_DIR=@abs_top_builddir@/etc
|
|
|
|
export INSTALL_UDEV_DIR=@udevdir@
|
|
export INSTALL_UDEV_RULE_DIR=@udevruledir@
|
|
export INSTALL_MOUNT_HELPER_DIR=@mounthelperdir@
|
|
export INSTALL_SYSCONF_DIR=@sysconfdir@
|
|
export INSTALL_PYTHON_DIR=@pythonsitedir@
|
|
|
|
export KMOD_SPL=@abs_top_builddir@/module/spl/spl.ko
|
|
export KMOD_ZAVL=@abs_top_builddir@/module/avl/zavl.ko
|
|
export KMOD_ZNVPAIR=@abs_top_builddir@/module/nvpair/znvpair.ko
|
|
export KMOD_ZUNICODE=@abs_top_builddir@/module/unicode/zunicode.ko
|
|
export KMOD_ZCOMMON=@abs_top_builddir@/module/zcommon/zcommon.ko
|
|
export KMOD_ZLUA=@abs_top_builddir@/module/lua/zlua.ko
|
|
export KMOD_ICP=@abs_top_builddir@/module/icp/icp.ko
|
|
export KMOD_ZFS=@abs_top_builddir@/module/zfs/zfs.ko
|
|
export KMOD_FREEBSD=@abs_top_builddir@/module/openzfs.ko
|
|
export KMOD_ZZSTD=@abs_top_builddir@/module/zstd/zzstd.ko
|
|
endef
|
|
|
|
export EXTRA_ENVIRONMENT
|
|
|
|
all-local:
|
|
-$(SED) -e '\|^export BIN_DIR=|s|$$|@abs_top_builddir@/bin|' \
|
|
-e '\|^export SBIN_DIR=|s|$$|@abs_top_builddir@/bin|' \
|
|
-e '\|^export ZTS_DIR=|s|$$|@abs_top_srcdir@/tests|' \
|
|
-e '\|^export SCRIPT_DIR=|s|$$|@abs_top_srcdir@/scripts|' \
|
|
$(abs_top_srcdir)/scripts/common.sh.in >common.sh
|
|
-echo "$$EXTRA_ENVIRONMENT" >>common.sh
|
|
|
|
clean-local:
|
|
-$(RM) common.sh
|
|
|
|
install-data-hook:
|
|
-$(SED) -e '\|^export BIN_DIR=|s|$$|@bindir@|' \
|
|
-e '\|^export SBIN_DIR=|s|$$|@sbindir@|' \
|
|
-e '\|^export ZTS_DIR=|s|$$|@datadir@/@PACKAGE@|' \
|
|
-e '\|^export SCRIPT_DIR=|s|$$|@datadir@/@PACKAGE@|' \
|
|
$(abs_top_srcdir)/scripts/common.sh.in \
|
|
>$(DESTDIR)$(datadir)/@PACKAGE@/common.sh
|