mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Add "compatibility" property for zpool feature sets
Property to allow sets of features to be specified; for compatibility with specific versions / releases / external systems. Influences the behavior of 'zpool upgrade' and 'zpool create'. Initial man page changes and test cases included. Brief synopsis: zpool create -o compatibility=off|legacy|file[,file...] pool vdev... compatibility = off : disable compatibility mode (enable all features) compatibility = legacy : request that no features be enabled compatibility = file[,file...] : read features from specified files. Only features present in *all* files will be enabled on the resulting pool. Filenames may be absolute, or relative to /etc/zfs/compatibility.d or /usr/share/zfs/compatibility.d (/etc checked first). Only affects zpool create, zpool upgrade and zpool status. ABI changes in libzfs: * New function "zpool_load_compat" to load and parse compat sets. * Add "zpool_compat_status_t" typedef for compatibility parse status. * Add ZPOOL_PROP_COMPATIBILITY to the pool properties enum * Add ZPOOL_STATUS_COMPATIBILITY_ERR to the pool status enum An initial set of base compatibility sets are included in cmd/zpool/compatibility.d, and the Makefile for cmd/zpool is modified to install these in $pkgdatadir/compatibility.d and to create symbolic links to a reasonable set of aliases. Reviewed-by: ericloewe Reviewed-by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Richard Laager <rlaager@wiktel.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Colm Buckley <colm@tuatha.org> Closes #11468
This commit is contained in:
+17
-2
@@ -27,10 +27,10 @@
|
||||
* Copyright (c) 2014 Integros [integros.com]
|
||||
* Copyright (c) 2017, Intel Corporation.
|
||||
* Copyright (c) 2019 Datto Inc.
|
||||
* Portions Copyright 2010 Robert Milkowski
|
||||
* Copyright (c) 2021, Colm Buckley <colm@tuatha.org>
|
||||
*/
|
||||
|
||||
/* Portions Copyright 2010 Robert Milkowski */
|
||||
|
||||
#ifndef _SYS_FS_ZFS_H
|
||||
#define _SYS_FS_ZFS_H
|
||||
|
||||
@@ -246,6 +246,7 @@ typedef enum {
|
||||
ZPOOL_PROP_CHECKPOINT,
|
||||
ZPOOL_PROP_LOAD_GUID,
|
||||
ZPOOL_PROP_AUTOTRIM,
|
||||
ZPOOL_PROP_COMPATIBILITY,
|
||||
ZPOOL_NUM_PROPS
|
||||
} zpool_prop_t;
|
||||
|
||||
@@ -733,6 +734,7 @@ typedef struct zpool_load_policy {
|
||||
#define ZPOOL_CONFIG_ALLOCATION_BIAS "alloc_bias" /* not stored on disk */
|
||||
#define ZPOOL_CONFIG_EXPANSION_TIME "expansion_time" /* not stored */
|
||||
#define ZPOOL_CONFIG_REBUILD_STATS "org.openzfs:rebuild_stats"
|
||||
#define ZPOOL_CONFIG_COMPATIBILITY "compatibility"
|
||||
|
||||
/*
|
||||
* The persistent vdev state is stored as separate values rather than a single
|
||||
@@ -845,6 +847,19 @@ typedef struct zpool_load_policy {
|
||||
*/
|
||||
#define ZPOOL_CACHE_BOOT "/boot/zfs/zpool.cache"
|
||||
#define ZPOOL_CACHE "/etc/zfs/zpool.cache"
|
||||
/*
|
||||
* Settings for zpool compatibility features files
|
||||
*/
|
||||
#define ZPOOL_SYSCONF_COMPAT_D SYSCONFDIR "/zfs/compatibility.d"
|
||||
#define ZPOOL_DATA_COMPAT_D PKGDATADIR "/compatibility.d"
|
||||
#define ZPOOL_COMPAT_MAXSIZE 16384
|
||||
|
||||
/*
|
||||
* Hard-wired compatibility settings
|
||||
*/
|
||||
#define ZPOOL_COMPAT_LEGACY "legacy"
|
||||
#define ZPOOL_COMPAT_OFF "off"
|
||||
|
||||
/*
|
||||
* vdev states are ordered from least to most healthy.
|
||||
* A vdev that's CANT_OPEN or below is considered unusable.
|
||||
|
||||
Reference in New Issue
Block a user