mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-11-19 11:25:28 +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
|
||
|---|---|---|
| .. | ||
| crypto | ||
| fm | ||
| fs | ||
| lua | ||
| sysevent | ||
| zstd | ||
| abd_impl.h | ||
| abd.h | ||
| aggsum.h | ||
| arc_impl.h | ||
| arc.h | ||
| avl_impl.h | ||
| avl.h | ||
| bitops.h | ||
| blkptr.h | ||
| bplist.h | ||
| bpobj.h | ||
| bptree.h | ||
| bqueue.h | ||
| btree.h | ||
| dataset_kstats.h | ||
| dbuf.h | ||
| ddt.h | ||
| dmu_impl.h | ||
| dmu_objset.h | ||
| dmu_recv.h | ||
| dmu_redact.h | ||
| dmu_send.h | ||
| dmu_traverse.h | ||
| dmu_tx.h | ||
| dmu_zfetch.h | ||
| dmu.h | ||
| dnode.h | ||
| dsl_bookmark.h | ||
| dsl_crypt.h | ||
| dsl_dataset.h | ||
| dsl_deadlist.h | ||
| dsl_deleg.h | ||
| dsl_destroy.h | ||
| dsl_dir.h | ||
| dsl_pool.h | ||
| dsl_prop.h | ||
| dsl_scan.h | ||
| dsl_synctask.h | ||
| dsl_userhold.h | ||
| edonr.h | ||
| efi_partition.h | ||
| frame.h | ||
| hkdf.h | ||
| Makefile.am | ||
| metaslab_impl.h | ||
| metaslab.h | ||
| mmp.h | ||
| mntent.h | ||
| mod.h | ||
| multilist.h | ||
| note.h | ||
| nvpair_impl.h | ||
| nvpair.h | ||
| objlist.h | ||
| pathname.h | ||
| qat.h | ||
| range_tree.h | ||
| rrwlock.h | ||
| sa_impl.h | ||
| sa.h | ||
| skein.h | ||
| spa_boot.h | ||
| spa_checkpoint.h | ||
| spa_checksum.h | ||
| spa_impl.h | ||
| spa_log_spacemap.h | ||
| spa.h | ||
| space_map.h | ||
| space_reftree.h | ||
| sysevent.h | ||
| txg_impl.h | ||
| txg.h | ||
| u8_textprep_data.h | ||
| u8_textprep.h | ||
| uberblock_impl.h | ||
| uberblock.h | ||
| uio_impl.h | ||
| unique.h | ||
| uuid.h | ||
| vdev_disk.h | ||
| vdev_draid.h | ||
| vdev_file.h | ||
| vdev_impl.h | ||
| vdev_indirect_births.h | ||
| vdev_indirect_mapping.h | ||
| vdev_initialize.h | ||
| vdev_raidz_impl.h | ||
| vdev_raidz.h | ||
| vdev_rebuild.h | ||
| vdev_removal.h | ||
| vdev_trim.h | ||
| vdev.h | ||
| xvattr.h | ||
| zap_impl.h | ||
| zap_leaf.h | ||
| zap.h | ||
| zcp_global.h | ||
| zcp_iter.h | ||
| zcp_prop.h | ||
| zcp_set.h | ||
| zcp.h | ||
| zfeature.h | ||
| zfs_acl.h | ||
| zfs_bootenv.h | ||
| zfs_context.h | ||
| zfs_debug.h | ||
| zfs_delay.h | ||
| zfs_file.h | ||
| zfs_fuid.h | ||
| zfs_ioctl_impl.h | ||
| zfs_ioctl.h | ||
| zfs_onexit.h | ||
| zfs_project.h | ||
| zfs_quota.h | ||
| zfs_ratelimit.h | ||
| zfs_refcount.h | ||
| zfs_rlock.h | ||
| zfs_sa.h | ||
| zfs_stat.h | ||
| zfs_sysfs.h | ||
| zfs_vfsops.h | ||
| zfs_vnops.h | ||
| zfs_znode.h | ||
| zil_impl.h | ||
| zil.h | ||
| zio_checksum.h | ||
| zio_compress.h | ||
| zio_crypt.h | ||
| zio_impl.h | ||
| zio_priority.h | ||
| zio.h | ||
| zrlock.h | ||
| zthr.h | ||
| zvol_impl.h | ||
| zvol.h | ||