zfs/man/man8
Matthew Ahrens c618f87cd2
Add `zstream redup` command to convert deduplicated send streams
Deduplicated send and receive is deprecated.  To ease migration to the
new dedup-send-less world, the commit adds a `zstream redup` utility to
convert deduplicated send streams to normal streams, so that they can
continue to be received indefinitely.

The new `zstream` command also replaces the functionality of
`zstreamdump`, by way of the `zstream dump` subcommand.  The
`zstreamdump` command is replaced by a shell script which invokes
`zstream dump`.

The way that `zstream redup` works under the hood is that as we read the
send stream, we build up a hash table which maps from `<GUID, object,
offset> -> <file_offset>`.

Whenever we see a WRITE record, we add a new entry to the hash table,
which indicates where in the stream file to find the WRITE record for
this block. (The key is `drr_toguid, drr_object, drr_offset`.)

For entries other than WRITE_BYREF, we pass them through unchanged
(except for the running checksum, which is recalculated).

For WRITE_BYREF records, we change them to WRITE records.  We find the
referenced WRITE record by looking in the hash table (for the record
with key `drr_refguid, drr_refobject, drr_refoffset`), and then reading
the record header and payload from the specified offset in the stream
file.  This is why the stream can not be a pipe.  The found WRITE record
replaces the WRITE_BYREF record, with its `drr_toguid`, `drr_object`,
and `drr_offset` fields changed to be the same as the WRITE_BYREF's
(i.e. we are writing the same logical block, but with the data supplied
by the previous WRITE record).

This algorithm requires memory proportional to the number of WRITE
records (same as `zfs send -D`), but the size per WRITE record is
relatively low (40 bytes, vs. 72 for `zfs send -D`).  A 1TB send stream
with 8KB blocks (`recordsize=8k`) would use around 5GB of RAM to
"redup".

Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Paul Dagnelie <pcd@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #10124 
Closes #10156
2020-04-10 10:39:55 -07:00
..
.gitignore Ignore *.o.ur-safe build artifacts 2018-05-13 18:59:02 -07:00
Makefile.am Add `zstream redup` command to convert deduplicated send streams 2020-04-10 10:39:55 -07:00
fsck.zfs.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
mount.zfs.8 zfs.8 & mount.zfs.8: fix a few typos 2016-05-16 12:26:31 -07:00
vdev_id.8 vdev_id support for device link aliases 2012-12-03 14:04:47 -08:00
zdb.8 Persistent L2ARC 2020-04-10 10:33:35 -07:00
zed.8.in Change http://zfsonlinux.org links to https://zfsonlinux.org 2020-01-13 16:43:59 -08:00
zfs-allow.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-bookmark.8 Implement bookmark copying 2020-02-11 13:19:12 -08:00
zfs-change-key.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-clone.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-create.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-destroy.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-diff.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08: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 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-inherit.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-jail.8 Add FreeBSD jail support hooks 2019-12-11 11:58:37 -08:00
zfs-list.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-load-key.8 Document zfs change-key caveats 2020-01-14 10:11:07 -08:00
zfs-mount-generator.8.in Systemd mount generator: Generate noauto units; add control properties 2020-02-14 15:32:55 -08:00
zfs-mount.8 Add notice that forcefully unmount is not supported on Linux 2020-02-18 13:36:23 -08:00
zfs-program.8 Support setting user properties in a channel program 2020-02-14 13:41:42 -08:00
zfs-project.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-projectspace.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-promote.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-receive.8 Deprecate deduplicated send streams 2020-03-18 13:31: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 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-rollback.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-send.8 Deprecate deduplicated send streams 2020-03-18 13:31:10 -07:00
zfs-set.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-share.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-snapshot.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -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-upgrade.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-userspace.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfs-wait.8 Add 'zfs wait' command 2020-04-01 10:02:06 -07:00
zfs.8 Add 'zfs wait' command 2020-04-01 10:02:06 -07:00
zfsconcepts.8 Reorganize zfs(8) man page into sections 2019-11-12 11:17:40 -08:00
zfsprops.8 Change default to overlay=on 2020-03-06 09:28:19 -08:00
zgenhostid.8 Correct man page dates 2019-05-08 10:59:32 -07:00
zinject.8 Multiple DVA Scrubbing Fix 2019-03-15 14:14:31 -07:00
zpool-add.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-attach.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-checkpoint.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-clear.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-create.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-destroy.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-detach.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-events.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-export.8 Add notice that forcefully unmount is not supported on Linux 2020-02-18 13:36:23 -08:00
zpool-get.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-history.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-import.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-initialize.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-iostat.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-labelclear.8 Persistent L2ARC 2020-04-10 10:33:35 -07:00
zpool-list.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-offline.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-online.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-reguid.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-remove.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-reopen.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-replace.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-resilver.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-scrub.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-set.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-split.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-status.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-sync.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-trim.8 Add trim support to zpool wait 2020-03-04 15:07:11 -08:00
zpool-upgrade.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zpool-wait.8 Add trim support to zpool wait 2020-03-04 15:07:11 -08:00
zpool.8 Fix ZPOOL_VDEV_NAME_PATH option description 2020-01-06 10:43:32 -08:00
zpoolconcepts.8 Persistent L2ARC 2020-04-10 10:33:35 -07:00
zpoolprops.8 Reorganize zpool(8) man page into sections 2019-11-13 09:21:07 -08:00
zstream.8 Add `zstream redup` command to convert deduplicated send streams 2020-04-10 10:39:55 -07:00
zstreamdump.8 Eliminate useless double-bolding in man pages 2019-04-24 17:04:35 -07:00