mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
5405be0365
Currently, additional/extra copies are created for metadata in addition to the redundancy provided by the pool(mirror/raidz/draid), due to this 2 times more space is utilized per inode and this decreases the total number of inodes that can be created in the filesystem. By setting redundant_metadata to none, no additional copies of metadata are created, hence can reduce the space consumed by the additional metadata copies and increase the total number of inodes that can be created in the filesystem. Additionally, this can improve file create performance due to the reduced amount of metadata which needs to be written. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Dipak Ghosh <dipak.ghosh@hpe.com> Signed-off-by: Akash B <akash-b@hpe.com> Closes #13680
131 lines
3.5 KiB
Plaintext
131 lines
3.5 KiB
Plaintext
#
|
|
# This file and its contents are supplied under the terms of the
|
|
# Common Development and Distribution License ("CDDL"), version 1.0.
|
|
# You may only use this file in accordance with the terms of version
|
|
# 1.0 of the CDDL.
|
|
#
|
|
# A full copy of the text of the CDDL should have accompanied this
|
|
# source. A copy of the CDDL is also available via the Internet at
|
|
# http://www.illumos.org/license/CDDL.
|
|
#
|
|
|
|
#
|
|
# Copyright (c) 2012, 2016, Delphix. All rights reserved.
|
|
# Copyright (c) 2022 Hewlett Packard Enterprise Development LP.
|
|
#
|
|
|
|
. $STF_SUITE/include/libtest.shlib
|
|
|
|
typeset -a compress_prop_vals=('off' 'lzjb' 'lz4' 'gzip' 'zle' 'zstd')
|
|
typeset -a checksum_prop_vals=('on' 'off' 'fletcher2' 'fletcher4' 'sha256'
|
|
'noparity' 'sha512' 'skein' 'blake3')
|
|
if ! is_freebsd; then
|
|
checksum_prop_vals+=('edonr')
|
|
fi
|
|
typeset -a recsize_prop_vals=('512' '1024' '2048' '4096' '8192' '16384'
|
|
'32768' '65536' '131072' '262144' '524288' '1048576')
|
|
typeset -a canmount_prop_vals=('on' 'off' 'noauto')
|
|
typeset -a copies_prop_vals=('1' '2' '3')
|
|
typeset -a logbias_prop_vals=('latency' 'throughput')
|
|
typeset -a primarycache_prop_vals=('all' 'none' 'metadata')
|
|
typeset -a redundant_metadata_prop_vals=('all' 'most' 'some' 'none')
|
|
typeset -a secondarycache_prop_vals=('all' 'none' 'metadata')
|
|
typeset -a snapdir_prop_vals=('hidden' 'visible')
|
|
typeset -a sync_prop_vals=('standard' 'always' 'disabled')
|
|
|
|
typeset -a fs_props=('compress' 'checksum' 'recsize'
|
|
'canmount' 'copies' 'logbias' 'primarycache' 'redundant_metadata'
|
|
'secondarycache' 'snapdir' 'sync')
|
|
typeset -a vol_props=('compress' 'checksum' 'copies' 'logbias' 'primarycache'
|
|
'secondarycache' 'redundant_metadata' 'sync')
|
|
|
|
#
|
|
# Given the 'prop' passed in, return 'num_vals' elements of the corresponding
|
|
# values array to the user, excluding any elements below 'first.' This allows
|
|
# us to exclude 'off' and 'on' which can be either unwanted, or a duplicate of
|
|
# another property respectively.
|
|
#
|
|
function get_rand_prop_vals
|
|
{
|
|
typeset prop=$1
|
|
typeset -i num_vals=$2
|
|
typeset -i first=$3
|
|
|
|
[[ -z $prop || -z $num_vals || -z $first ]] && \
|
|
log_fail "get_rand_prop_vals: bad arguments"
|
|
|
|
typeset retstr=""
|
|
|
|
typeset prop_vals_var=${prop}_prop_vals
|
|
typeset -a prop_vals=($(eval echo \${${prop_vals_var}[@]}))
|
|
|
|
[[ -z $prop_vals ]] && \
|
|
log_fail "get_rand_prop_vals: bad prop $prop"
|
|
|
|
typeset -i last=$((${#prop_vals[@]} - 1))
|
|
typeset -i i
|
|
for i in $(range_shuffle $first $last | head -n $num_vals); do
|
|
retstr="${prop_vals[$i]} $retstr"
|
|
done
|
|
echo $retstr
|
|
}
|
|
|
|
#
|
|
# Functions to toggle on/off properties
|
|
#
|
|
typeset -a binary_props=('atime' 'devices' 'exec' 'readonly' 'setuid' 'xattr')
|
|
|
|
if is_freebsd; then
|
|
binary_props+=('jailed')
|
|
else
|
|
binary_props+=('zoned')
|
|
fi
|
|
|
|
# Newer Linuxes dropped non-blocking mandatory locks
|
|
if ! is_linux || [ $(linux_version) -lt $(linux_version "4.4") ]; then
|
|
binary_props+=('nbmand')
|
|
fi
|
|
|
|
function toggle_prop
|
|
{
|
|
typeset ds=$1
|
|
typeset prop=$2
|
|
|
|
typeset val=$(get_prop $prop $ds)
|
|
typeset newval='off'
|
|
|
|
[[ $val = $newval ]] && newval='on'
|
|
log_must zfs set $prop=$newval $ds
|
|
}
|
|
|
|
function toggle_binary_props
|
|
{
|
|
typeset ds=$1
|
|
typeset prop
|
|
|
|
for prop in "${binary_props[@]}"; do
|
|
toggle_prop $ds $prop
|
|
done
|
|
}
|
|
|
|
function randomize_ds_props
|
|
{
|
|
typeset ds=$1
|
|
typeset prop proplist val
|
|
|
|
if ds_is_volume $ds; then
|
|
toggle_prop $ds readonly
|
|
proplist="${vol_props[@]}"
|
|
elif ds_is_filesystem $ds; then
|
|
toggle_binary_props $ds
|
|
proplist="${fs_props[@]}"
|
|
else
|
|
log_fail "$ds is neither a volume nor a file system"
|
|
fi
|
|
|
|
for prop in $proplist; do
|
|
typeset val=$(get_rand_prop_vals $prop 1 0)
|
|
log_must zfs set $prop=$val $ds
|
|
done
|
|
}
|