Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ZDB(8)			    System Manager's Manual			ZDB(8)

NAME
       zdb -- display ZFS storage pool debugging and consistency information

SYNOPSIS
       zdb  [-AbcdDFGhikLMNPsTvXYy]  [-e [-V] [-p path]] [-I inflight-I/O-ops]
	   [-o	var=value]  [-t	 txg]  [-U  cache]  [-x	 dumpdir]   [-K	  key]
	   [poolname[/dataset|objset-ID]] [object|range]
       zdb    [-AdiPv]	  [-e	 [-V]	[-p path]]   [-U   cache]   [-K	  key]
	   poolname[/dataset|objset-ID]	[object|range]
       zdb -B [-e [-V]	[-p path]]  [-U	 cache]	 [-K  key]  poolname/objset-ID
	   [backup-flags]
       zdb -C [-A] [-U cache] [poolname]
       zdb -E [-A] word0:word1::word15
       zdb -l [-Aqu] device
       zdb -m [-AFLPXY]	[-e [-V] [-p path]] [-t	txg] [-U cache]	poolname [vdev
	   [metaslab]]
       zdb -O [-K key] dataset path
       zdb -r [-K key] dataset path destination
       zdb    -R    [-A]    [-e	   [-V]	  [-p path]]   [-U   cache]   poolname
	   vdev:offset:[lsize/]psize[:flags]
       zdb -S [-AP] [-e	[-V] [-p path]]	[-U cache] poolname

DESCRIPTION
       The zdb utility displays	information about a ZFS	pool useful for	debug-
       ging and	performs some amount of	consistency checking.  It is a	not  a
       general	purpose	 tool  and options (and	facilities) may	change.	 It is
       not a fsck(8) utility.

       The output of this command in general reflects the on-disk structure of
       a ZFS pool, and is inherently unstable.	The precise output of most in-
       vocations is not	documented, a knowledge	of ZFS internals is assumed.

       If the dataset argument does not	contain	any "/"	or "@" characters,  it
       is  interpreted	as  a pool name.  The root dataset can be specified as
       "pool/".

       zdb is an "offline" tool; it accesses the block devices underneath  the
       pools directly from userspace and does not care if the pool is imported
       or datasets are mounted (or even	if the system understands ZFS at all).
       When  operating	on  an imported	and active pool	it is possible,	though
       unlikely, that zdb may interpret	inconsistent pool data and behave  er-
       ratically.

OPTIONS
       Display options:

       -b, --block-stats
	       Display	 statistics   regarding	 the  number,  size  (logical,
	       physical	and allocated) and deduplication of blocks.

       -B, --backup
	       Generate	a backup stream, similar to zfs	send, but for the  nu-
	       meric  objset ID, and without opening the dataset.  This	can be
	       useful in recovery scenarios if	dataset	 metadata  has	become
	       corrupted  but  the  dataset  itself is readable.  The optional
	       flags argument is a string of one or more of the	letters	e,  L,
	       c, and w, which correspond to the same flags in zfs-send(8).

       -c, --checksum
	       Verify the checksum of all metadata blocks while	printing block
	       statistics (see -b).

	       If  specified  multiple	times,	verify	the  checksums	of all
	       blocks.

       -C, --config
	       Display information about the configuration.  If	specified with
	       no other	options, instead display information about  the	 cache
	       file (/etc/zfs/zpool.cache).  To	specify	the cache file to dis-
	       play, see -U.

	       If  specified multiple times, and a pool	name is	also specified
	       display both the	cached configuration and the on-disk  configu-
	       ration.	 If  specified multiple	times with -e also display the
	       configuration that would	be used	were the pool to be imported.

       -d, --datasets
	       Display information about datasets.  Specified  once,  displays
	       basic  dataset  information:  ID, create	transaction, size, and
	       object	 count.	     See     -N	    for	    determining	    if
	       poolname[/dataset|objset-ID]    is   to	 use   the   specified
	       dataset|objset-ID as a string (dataset name) or a  number  (ob-
	       jset ID)	when datasets have numeric names.

	       If  specified  multiple times provides greater and greater ver-
	       bosity.

	       If object IDs or	object ID ranges are specified,	display	infor-
	       mation about those specific objects or ranges only.

	       An object ID range is specified in terms	of  a  colon-separated
	       tuple  of  the  form <start>:<end>[:<flags>].  The fields start
	       and end are integer object identifiers that  denote  the	 upper
	       and  lower bounds of the	range.	An end value of	-1 specifies a
	       range with no upper bound.  The flags field  optionally	speci-
	       fies a set of flags, described below, that control which	object
	       types  are dumped.  By default, all object types	are dumped.  A
	       minus sign (-) negates the effect of the	flag that  follows  it
	       and  has	no effect unless preceded by the A flag.  For example,
	       the range 0:-1:A-d will dump all	object types except for	direc-
	       tories.

	       A       Dump all	objects	(this is the default)
	       d       Dump ZFS	directory objects
	       f       Dump ZFS	plain file objects
	       m       Dump SPA	space map objects
	       z       Dump ZAP	objects
	       -       Negate the effect of next flag

       -D, --dedup-stats
	       Display deduplication statistics, including  the	 deduplication
	       ratio  (dedup),	compression ratio (compress), inflation	due to
	       the zfs copies property (copies), and an	overall	effective  ra-
	       tio (dedup x compress / copies).

       -DD     Display	a  histogram  of deduplication statistics, showing the
	       allocated  (physically  present	 on   disk)   and   referenced
	       (logically  referenced  in  the pool) block counts and sizes by
	       reference count.

       -DDD    Display the statistics independently for	each deduplication ta-
	       ble.

       -DDDD   Dump the	contents of the	deduplication tables describing	dupli-
	       cate blocks.

       -DDDDD  Also dump the contents of the deduplication  tables  describing
	       unique blocks.

       -E, --embedded-block-pointer=word0:word1::word15
	       Decode  and display block from an embedded block	pointer	speci-
	       fied by the word	arguments.

       -h, --history
	       Display pool history similar to zpool history, but include  in-
	       ternal changes, transaction, and	dataset	information.

       -i, --intent-logs
	       Display	information about intent log (ZIL) entries relating to
	       each dataset.  If specified multiple times, display  counts  of
	       each intent log transaction type.

       -k, --checkpointed-state
	       Examine	the checkpointed state of the pool.  Note, the on disk
	       format of the pool is not reverted to the checkpointed state.

       -l, --label=device
	       Read the	vdev labels and	L2ARC header from  the	specified  de-
	       vice.   zdb -l will return 0 if valid label was found, 1	if er-
	       ror occurred, and 2 if no valid labels were found.   The	 pres-
	       ence  of	 L2ARC	header	is  indicated  by  a specific sequence
	       (L2ARC_DEV_HDR_MAGIC).  If there	is an accounting error in  the
	       size  or	 the  number of	L2ARC log blocks zdb -l	will return 1.
	       Each unique configuration is displayed only once.

       -ll device
	       In addition display label space usage stats.  If	a valid	 L2ARC
	       header was found	also display the properties of log blocks used
	       for restoring L2ARC contents (persistent	L2ARC).

       -lll device
	       Display	every  configuration, unique or	not.  If a valid L2ARC
	       header was found	also display the properties of log entries  in
	       log  blocks  used  for  restoring  L2ARC	 contents  (persistent
	       L2ARC).

	       If the -q option	is also	specified, don't print the  labels  or
	       the L2ARC header.

	       If the -u option	is also	specified, also	display	the uberblocks
	       on this device.	Specify	multiple times to increase verbosity.

       -L, --disable-leak-tracking
	       Disable	leak  detection	and the	loading	of space maps.	By de-
	       fault, zdb verifies that	all non-free  blocks  are  referenced,
	       which can be very expensive.

       -m, --metaslabs
	       Display	the offset, spacemap, free space of each metaslab, all
	       the log spacemaps and their obsolete entry statistics.

       -mm     Also display information	about the on-disk free space histogram
	       associated with each metaslab.

       -mmm    Display the maximum contiguous free  space,  the	 in-core  free
	       space histogram,	and the	percentage of free space in each space
	       map.

       -mmmm   Display every spacemap record.

       -M, --metaslab-groups
	       Display all "normal" vdev metaslab group	information - per-vdev
	       metaslab	 count,	 fragmentation,	 and  free space histogram, as
	       well as overall pool fragmentation and histogram.

       -MM     "Special" vdevs are added to -M's normal	output.	 Also  display
	       information  about  the	maximum	 contiguous free space and the
	       percentage of free space	in each	space map.

       -MMM    Display every spacemap record.

       -N      Same as -d but force zdb	to interpret  the  [dataset|objset-ID]
	       in [poolname[/dataset|objset-ID]] as a numeric objset ID.

       -O, --object-lookups=dataset path
	       Look  up	 the  specified	path inside of the dataset and display
	       its metadata and	indirect blocks.  Specified path must be rela-
	       tive to the root	of dataset.  This option can be	combined  with
	       -v for increasing verbosity.

       -r, --copy-object=dataset path destination
	       Copy  the specified path	inside of the dataset to the specified
	       destination.  Specified path must be relative to	 the  root  of
	       dataset.	  This	option	can be combined	with -v	for increasing
	       verbosity.

       -R, --read-block=poolname vdev:offset:[lsize/]psize[:flags]
	       Read and	display	a block	from the specified device.  By default
	       the block is displayed as a hex dump, but see  the  description
	       of the r	flag, below.

	       The block is specified in terms of a colon-separated tuple vdev
	       (an  integer  vdev  identifier)	offset	(the offset within the
	       vdev) size (the physical	size, or logical size /	physical size)
	       of the block to read and, optionally, flags (a  set  of	flags,
	       described below).

	       b offset	 Print block pointer at	hex offset
	       c	 Calculate and display checksums
	       d	 Decompress   the  block.   Set	 environment  variable
			 ZDB_NO_ZLE to skip zle	when guessing.
	       e	 Byte swap the block
	       g	 Dump gang block header
	       i	 Dump indirect block
	       r	 Dump raw uninterpreted	block data
	       v	 Verbose output	for guessing compression algorithm

       -s, --io-stats
	       Report statistics on zdb	I/O.  Display operation	counts,	 band-
	       width, and error	counts of I/O to the pool from zdb.

       -S, --simulate-dedup
	       Simulate	 the  effects of deduplication,	constructing a DDT and
	       then display that DDT as	with -DD.

       -T, --brt-stats
	       Display block reference table (BRT) statistics,	including  the
	       size  of	uniques	blocks cloned, the space saving	as a result of
	       cloning,	and the	saving ratio.

       -TT     Display the per-vdev BRT	 statistics,  including	 total	refer-
	       ences.

       -TTT    Display histograms of per-vdev BRT refcounts.

       -TTTT   Dump the	contents of the	block reference	tables.

       -u, --uberblock
	       Display the current uberblock.

       Other options:

       -A, --ignore-assertions
	       Do not abort should any assertion fail.

       -AA     Enable  panic recovery, certain errors which would otherwise be
	       fatal are demoted to warnings.

       -AAA    Do not abort if asserts fail and	also enable panic recovery.

       -e, --exported=[-p path]
	       Operate	 on    an    exported	 pool,	  not	 present    in
	       /etc/zfs/zpool.cache.   The  -p	flag  specifies	the path under
	       which devices are to be searched.

       -x, --dump-blocks=dumpdir
	       All blocks accessed will	be copied to files  in	the  specified
	       directory.   The	 blocks	 will  be placed in sparse files whose
	       name is the same	as that	of the file or device read.   zdb  can
	       be  then	 run on	the generated files.  Note that	the -bbc flags
	       are sufficient to access	(and thus copy)	all  metadata  on  the
	       pool.

       -F, --automatic-rewind
	       Attempt	to make	an unreadable pool readable by trying progres-
	       sively older transactions.

       -G, --dump-debug-msg
	       Dump the	contents of the	zfs_dbgmsg buffer before exiting  zdb.
	       zfs_dbgmsg  is  a buffer	used by	ZFS to dump advanced debug in-
	       formation.

       -I, --inflight=inflight-I/O-ops
	       Limit the number	of outstanding checksum	I/O operations to  the
	       specified  value.   The	default	value is 200.  This option af-
	       fects the performance of	the -c option.

       -K, --key=key
	       Decryption key needed to	access	an  encrypted  dataset.	  This
	       will  cause  zdb	to attempt to unlock the dataset using the en-
	       cryption	root, key format and other  encryption	parameters  on
	       the  given  dataset.   zdb  can	still inspect pool and dataset
	       structures on encrypted datasets	without	 unlocking  them,  but
	       will not	be able	to access file names and attributes and	object
	       contents.  WARNING:  The	 raw  decryption key and any decrypted
	       data will be in user memory while zdb is	running.   Other  user
	       programs	 may  be  able	to  extract it by inspecting zdb as it
	       runs.  Exercise extreme	caution	 when  using  this  option  in
	       shared or uncontrolled environments.

       -o, --option=var=value
	       Set the given tunable to	the provided value.

       -o, --option=var
	       Show the	value of the given tunable.

       -o, --option=show
	       Show all	tunables and their values.

       -o, --option=info=value
	       Show  info  about a tunable, including their name, type and de-
	       scription.

       -o, --option=info
	       Show info about all tunables.

       -P, --parseable
	       Print numbers in	an unscaled form  more	amenable  to  parsing,
	       e.g. 1000000 rather than	1M.

       -t, --txg=transaction
	       Specify	the  highest  transaction  to  use  when searching for
	       uberblocks.  See	also the -u and	-l options for a means to  see
	       the  available uberblocks and their associated transaction num-
	       bers.

       -U, --cachefile=cachefile
	       Use a cache file	other than /etc/zfs/zpool.cache.

       -v, --verbose
	       Enable verbosity.  Specify multiple times  for  increased  ver-
	       bosity.

       -V, --verbatim
	       Attempt	verbatim import.  This mimics the behavior of the ker-
	       nel when	loading	a pool from a cachefile.  Only usable with -e.

       -X, --extreme-rewind
	       Attempt "extreme" transaction rewind, that is attempt the  same
	       recovery	as -F but read transactions otherwise deemed too old.

       -Y, --all-reconstruction
	       Attempt	all possible combinations when reconstructing indirect
	       split blocks.  This flag	disables the  individual  I/O  deadman
	       timer  in  order	 to allow as much time as required for the at-
	       tempted reconstruction.

       -y, --livelist
	       Perform validation for livelists	that are being deleted.	 Scans
	       through the livelist and	metaslabs, checking for	duplicate  en-
	       tries  and  compares  the  two,	checking  for potential	double
	       frees.  If it encounters	issues,	warnings will be printed,  but
	       the command will	not necessarily	fail.

       Specifying  a  display option more than once enables verbosity for only
       that option, with more occurrences enabling more	verbosity.

       If no options are specified, all	information about the named pool  will
       be displayed at default verbosity.

EXIT STATUS
       The zdb utility exits 0 on success, 1 if	a fatal	error occurs, 2	if in-
       valid  command  line options were specified, or 3 if on-disk corruption
       was detected, but was not fatal.

EXAMPLES
   Example 1: Display the configuration	of imported pool rpool
       # zdb -C	rpool
       MOS Configuration:
	       version:	28
	       name: 'rpool'

   Example 2: Display basic dataset information	about rpool
       # zdb -d	rpool
       Dataset mos [META], ID 0, cr_txg	4, 26.9M, 1051 objects
       Dataset rpool/swap [ZVOL], ID 59, cr_txg	356, 486M, 2 objects

   Example 3: Display basic information	about object 0 in rpool/export/home
       # zdb -d	rpool/export/home 0
       Dataset rpool/export/home [ZPL],	ID 137,	cr_txg 1546, 32K, 8 objects

	   Object  lvl	 iblk	dblk  dsize  lsize   %full  type
		0    7	  16K	 16K  15.0K    16K   25.00  DMU	dnode

   Example 4: Display the predicted effect of enabling deduplication on	rpool
       # zdb -S	rpool
       Simulated DDT histogram:

       bucket		   allocated			   referenced
       ______	______________________________	 ______________________________
       refcnt	blocks	 LSIZE	 PSIZE	 DSIZE	 blocks	  LSIZE	  PSIZE	  DSIZE
       ------	------	 -----	 -----	 -----	 ------	  -----	  -----	  -----
	    1	  694K	 27.1G	 15.0G	 15.0G	   694K	  27.1G	  15.0G	  15.0G
	    2	 35.0K	 1.33G	  699M	  699M	  74.7K	  2.79G	  1.45G	  1.45G

       dedup = 1.11, compress =	1.80, copies = 1.00, dedup * compress /	copies = 2.00

SEE ALSO
       zfs(8), zpool(8)

FreeBSD	16.0-CURRENT		April 23, 2025				ZDB(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=zdb&sektion=8&manpath=FreeBSD+16.0-CURRENT>

home | help