mirror_zfs/man/man8
Rob Norris 224393a321
feature: large_microzap
In a4b21eadec we added the zap_micro_max_size tuneable to raise the size
at which "micro" (single-block) ZAPs are upgraded to "fat" (multi-block)
ZAPs. Before this, a microZAP was limited to 128KiB, which was the old
largest block size. The side effect of raising the max size past 128KiB
is that it be stored in a large block, requiring the large_blocks
feature.

Unfortunately, this means that a backup stream created without the
--large-block (-L) flag to zfs send would split the microZAP block into
smaller blocks and send those, as is normal behaviour for large blocks.
This would be received correctly, but since microZAPs are limited to the
first block in the object by definition, the entries in the later blocks
would be inaccessible. For directory ZAPs, this gives the appearance of
files being lost.

This commit adds a feature flag, large_microzap, that must be enabled
for microZAPs to grow beyond 128KiB, and which will be activated the
first time that occurs. This feature is later checked when generating
the stream and if active, the send operation will abort unless
--large-block has also been requested.

Changing the limit still requires zap_micro_max_size to be changed. The
state of this flag effectively sets the upper value for this tuneable,
that is, if the feature is disabled, the tuneable will be clamped to
128KiB.

A stream flag is also added to ensure that the receiver also activates
its own feature flag upon receiving the stream. This is not strictly
necessary to _use_ the received microZAP, since it doesn't care how
large its block is, but it is required to send the microZAP object on,
otherwise the original problem occurs again.

Because it's difficult to reliably distinguish a microZAP from a fatZAP
from outside the ZAP code, and because it seems unlikely that most
users are affected (a fairly niche tuneable combined with what should be
an uncommon use of send), and for the sake of expediency, this change
activates the feature the first time a microZAP grows to use a large
block, and is never deactivated after that. This can be improved in the
future.

This commit changes nothing for existing pools that already have large
microZAPs. The feature will not be retroactively applied, but will be
activated the next time a microZAP grows past the limit.

Don't use large_blocks feature for enable/disable tests.  The
large_microzap depends on large_blocks, so it gets enabled as a
dependency, breaking the test. Instead use feature "longname", which has
the exact same feature characteristics.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Allan Jude <allan@klarasystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #16593
2024-10-02 20:47:11 -07:00
..
.gitignore Add zfs_prepare_disk script for disk firmware install 2023-09-21 08:36:26 -07:00
fsck.zfs.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
mount.zfs.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_id.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zdb.8 Fix a mis-merge in the zdb man page (#16304) 2024-06-28 10:38:22 -07:00
zed.8.in Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs_ids_to_path.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_prepare_disk.8.in Add zfs_prepare_disk script for disk firmware install 2023-09-21 08:36:26 -07:00
zfs-allow.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-bookmark.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-change-key.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-clone.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-create.8 zfs-create(8): ZFS for swap: caution, clarity 2023-06-02 11:25:13 -07:00
zfs-destroy.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-diff.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-get.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-groupspace.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-hold.8 Adds the -p option to zfs holds 2022-11-08 10:08:21 -08:00
zfs-inherit.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-jail.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-list.8 JSON output support for zfs list 2024-08-06 12:46:34 -07:00
zfs-load-key.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-mount-generator.8.in Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-mount.8 JSON output support zfs mount 2024-08-06 12:46:40 -07:00
zfs-program.8 Add zfs.sync.snapshot_rename 2022-09-02 13:31:19 -07:00
zfs-project.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-projectspace.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-promote.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-receive.8 Improve tests and update man page for healing recv 2023-03-15 10:34:10 -07:00
zfs-recv.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-redact.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-release.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-rename.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-rollback.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-send.8 feature: large_microzap 2024-10-02 20:47:11 -07:00
zfs-set.8 JSON output support for zfs version and zfs get 2024-08-06 12:45:45 -07:00
zfs-share.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-snapshot.8 Update zfs-snapshot.8 2024-02-08 13:06:12 -08:00
zfs-unallow.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-unjail.8 Add FreeBSD jail support hooks 2019-12-11 11:58:37 -08:00
zfs-unload-key.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-unmount.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-unzone.8 Add Linux namespace delegation support 2022-06-10 09:51:46 -07:00
zfs-upgrade.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-userspace.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zfs-wait.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs-zone.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs.8 JSON output support for zfs version and zfs get 2024-08-06 12:45:45 -07:00
zgenhostid.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zinject.8 Parallel pool import 2024-04-22 09:42:38 -07:00
zpool_influxdb.8 Consistentify miscellaneous style on remaining manpages 2021-06-09 14:35:53 -07:00
zpool-add.8 Add ashift validation when adding devices to a pool 2024-03-29 13:15:56 -06:00
zpool-attach.8 RAID-Z expansion feature 2023-11-08 10:19:41 -08:00
zpool-checkpoint.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-clear.8 vdev probe to slow disk can stall mmp write checker 2024-04-29 14:35:53 -07:00
zpool-create.8 Remove unnecessary commas in zpool-create.8 2023-06-27 16:58:32 -07:00
zpool-ddtprune.8 Add DDT prune command 2024-09-04 14:17:02 -07:00
zpool-destroy.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-detach.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-events.8 Adding Direct IO Support 2024-09-14 13:47:59 -07:00
zpool-export.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zpool-get.8 JSON output support for zpool get 2024-08-06 12:47:00 -07:00
zpool-history.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-import.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-initialize.8 Add the ability to uninitialize 2023-05-18 10:02:20 -07:00
zpool-iostat.8 Update man pages to time(1) from time(2) 2024-01-29 09:44:08 -08:00
zpool-labelclear.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-list.8 JSON output support for zpool list 2024-08-06 12:47:04 -07:00
zpool-offline.8 zpool: Add slot power control, print power status 2023-12-21 10:53:16 -08:00
zpool-online.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-prefetch.8 ddt: add support for prefetching tables into the ARC 2024-07-26 09:16:18 -07:00
zpool-reguid.8 zpool: Provide GUID to zpool-reguid(8) with -g (#16239) 2024-08-26 09:27:24 -07:00
zpool-remove.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zpool-reopen.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-replace.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-resilver.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zpool-scrub.8 Do not report bytes skipped by scan as issued. 2023-06-30 08:47:13 -07:00
zpool-set.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-split.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zpool-status.8 Adding Direct IO Support 2024-09-14 13:47:59 -07:00
zpool-sync.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-trim.8 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool-upgrade.8 Ubuntu 22.04 integration: mancheck 2022-11-18 11:26:41 -08:00
zpool-wait.8 Update man pages to time(1) from time(2) 2024-01-29 09:44:08 -08:00
zpool.8 Add DDT prune command 2024-09-04 14:17:02 -07:00
zstream.8 Add ability to recompress send streams with new compression algorithm 2022-11-10 15:23:46 -08:00
zstreamdump.8 zstreamdump: replace with link to zstream 2021-05-21 10:16:14 -07:00