mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
3c9e0d673e
For zdb -l, detect when the configuration nvlist in some label l (l>0) is the same as a configuration already dumped. If so, do not dump it. Make a similar check when dumping Uberblocks for zdb -lu. Check whether a label already dumped contains an identical Uberblock. If so, do not dump the Uberblock. When dumping a configuration or Uberblock, state which labels it is found in (0-3), for example: labels = 1 2 3 Detecting redundant uberblocks or configurations is accomplished by calculating checksums of the uberblocks and the packed nvlists containing the configuration. If there is nothing unique to be dumped for a label (ie the configuration and uberblocks have checksums matching those already dumped) print nothing for that label. With additional l's or u's, increase verbosity as follows: -l Dump each unique configuration only once. Indicate which labels it appears in. -ll In addition, dump label space usage stats. -lll Dump every configuration, unique or not. -u Dump each unique, valid, uberblock only once. Indicate which labels it appears in. -uu In addition, state which slots are invalid. -uuu Dump every uberblock, unique or not. -uuuu Dump the uberblock blockpointer (used to be -uuu) Make exit values conform to the manual page. Failing to unpack a configuration nvlist is considered an error, as well as failing to open or read from the device. Add three tests, zdb_00{3,4,5}_pos to verify the above functionality. An example of the output: ------------------------------------ LABEL 0 ------------------------------------ version: 5000 name: 'pool' state: 1 txg: 880 < ... redacted ... > features_for_read: com.delphix:hole_birth com.delphix:embedded_data labels = 0 Uberblock[0] magic = 0000000000bab10c version = 5000 txg = 0 guid_sum = 3038694082047428541 timestamp = 1487715500 UTC = Tue Feb 21 14:18:20 2017 labels = 0 1 2 3 Uberblock[4] magic = 0000000000bab10c version = 5000 txg = 772 guid_sum = 9045970794941528051 timestamp = 1487727291 UTC = Tue Feb 21 17:34:51 2017 labels = 0 < ... redacted ... > ------------------------------------ LABEL 1 ------------------------------------ version: 5000 name: 'pool' state: 1 txg: 14 < ... redacted ... > com.delphix:embedded_data labels = 1 2 3 Uberblock[4] magic = 0000000000bab10c version = 5000 txg = 4 guid_sum = 7793930272573252584 timestamp = 1487727521 UTC = Tue Feb 21 17:38:41 2017 labels = 1 2 3 < ... redacted ... > Reviewed-by: Tim Chase <tim@chase2k.com> Reviewed-by: Don Brady <don.brady@intel.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Olaf Faaland <faaland1@llnl.gov> Closes #5738
587 lines
12 KiB
Groff
587 lines
12 KiB
Groff
'\" t
|
|
.\"
|
|
.\" 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 2012, Richard Lowe.
|
|
.\" Copyright (c) 2012, 2016 by Delphix. All rights reserved.
|
|
.\" Copyright 2016 Nexenta Systems, Inc.
|
|
.\"
|
|
.TH "ZDB" "8" "April 9, 2016" "" ""
|
|
|
|
.SH "NAME"
|
|
\fBzdb\fR - Display zpool debugging and consistency information
|
|
|
|
.SH "SYNOPSIS"
|
|
\fBzdb\fR [-CumdibcsDvhLMXFPAG] [-e [-p \fIpath\fR...]] [-t \fItxg\fR]
|
|
[-U \fIcache\fR] [-I \fIinflight I/Os\fR] [-x \fIdumpdir\fR]
|
|
[-o \fIvar\fR=\fIvalue\fR] ... [\fIpoolname\fR [\fIobject\fR ...]]
|
|
|
|
.P
|
|
\fBzdb\fR [-divPA] [-e [-p \fIpath\fR...]] [-U \fIcache\fR]
|
|
\fIdataset\fR [\fIobject\fR ...]
|
|
|
|
.P
|
|
\fBzdb\fR -m [-MLXFPA] [-t \fItxg\fR] [-e [-p \fIpath\fR...]] [-U \fIcache\fR]
|
|
\fIpoolname\fR [\fIvdev\fR [\fImetaslab\fR ...]]
|
|
|
|
.P
|
|
\fBzdb\fR -R [-A] [-e [-p \fIpath\fR...]] [-U \fIcache\fR] \fIpoolname\fR
|
|
\fIvdev\fR:\fIoffset\fR:\fIsize\fR[:\fIflags\fR]
|
|
|
|
.P
|
|
\fBzdb\fR -S [-AP] [-e [-p \fIpath\fR...]] [-U \fIcache\fR] \fIpoolname\fR
|
|
|
|
.P
|
|
\fBzdb\fR -l [-Aqu] \fIdevice\fR
|
|
|
|
.P
|
|
\fBzdb\fR -C [-A] [-U \fIcache\fR]
|
|
|
|
.SH "DESCRIPTION"
|
|
The \fBzdb\fR utility displays information about a ZFS pool useful for
|
|
debugging and performs some amount of consistency checking. It is a not a
|
|
general purpose tool and options (and facilities) may change. This is neither
|
|
a fsck(8) nor an fsdb(8) utility.
|
|
|
|
.P
|
|
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 invocations is
|
|
not documented, a knowledge of ZFS internals is assumed.
|
|
|
|
.P
|
|
If the \fIdataset\fR argument does not contain any \fB/\fR or \fB@\fR
|
|
characters, it is interpreted as a pool name. The root dataset can be
|
|
specified as \fIpool\fB/\fR (pool name followed by a slash).
|
|
|
|
.P
|
|
When operating on an imported and active pool it is possible, though unlikely,
|
|
that zdb may interpret inconsistent pool data and behave erratically.
|
|
|
|
.SH "OPTIONS"
|
|
Display options:
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-b\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display statistics regarding the number, size (logical, physical and
|
|
allocated) and deduplication of blocks.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-c\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Verify the checksum of all metadata blocks while printing block statistics
|
|
(see \fB-b\fR).
|
|
.sp
|
|
If specified multiple times, verify the checksums of all blocks.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-C\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display information about the configuration. If specified with no other
|
|
options, instead display information about the cache file
|
|
(\fB/etc/zfs/zpool.cache\fR). To specify the cache file to display, see
|
|
\fB-U\fR.
|
|
.P
|
|
If specified multiple times, and a pool name is also specified display both
|
|
the cached configuration and the on-disk configuration. If specified multiple
|
|
times with \fB-e\fR also display the configuration that would be used were the
|
|
pool to be imported.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-d\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display information about datasets. Specified once, displays basic dataset
|
|
information: ID, create transaction, size, and object count.
|
|
.sp
|
|
If specified multiple times provides greater and greater verbosity.
|
|
.sp
|
|
If object IDs are specified, display information about those specific objects only.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-D\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display deduplication statistics, including the deduplication ratio (dedup),
|
|
compression ratio (compress), inflation due to the zfs copies property
|
|
(copies), and an overall effective ratio (dedup * compress / copies).
|
|
.sp
|
|
If specified twice, 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.
|
|
.sp
|
|
If specified a third time, display the statistics independently for each deduplication table.
|
|
.sp
|
|
If specified a fourth time, dump the contents of the deduplication tables describing duplicate blocks.
|
|
.sp
|
|
If specified a fifth time, also dump the contents of the deduplication tables describing unique blocks.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-h\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display pool history similar to \fBzpool history\fR, but include internal
|
|
changes, transaction, and dataset information.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-i\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display information about intent log (ZIL) entries relating to each
|
|
dataset. If specified multiple times, display counts of each intent log
|
|
transaction type.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-l\fR \fIdevice\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Read the vdev labels from the specified device and dump the unique
|
|
configuration nvlist(s). \fBzdb -l\fR will return 1 if an error occured, 2 if
|
|
no configuration nvlist could be unpacked (errors or not), and 0 otherwise.
|
|
Specify multiple times to increase verbosity.
|
|
.P
|
|
If the \fB-u\fR option is also specified, also display the uberblocks on this
|
|
device. Specify multiple times to increase verbosity.
|
|
.P
|
|
If the \fB-q\fR option is also specified, don't dump the configurations or the
|
|
uberblocks.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-L\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Disable leak tracing and the loading of space maps. By default, \fBzdb\fR
|
|
verifies that all non-free blocks are referenced, which can be very expensive.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-m\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display the offset, spacemap, and free space of each metaslab.
|
|
When specified twice, also display information about the on-disk free
|
|
space histogram associated with each metaslab. When specified three time,
|
|
display the maximum contiguous free space, the in-core free space histogram,
|
|
and the percentage of free space in each space map. When specified
|
|
four times display every spacemap record.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-M\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display the offset, spacemap, and free space of each metaslab.
|
|
When specified twice, also display information about the maximum contiguous
|
|
free space and the percentage of free space in each space map. When specified
|
|
three times display every spacemap record.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-R\fR \fIpoolname\fR \fIvdev\fR:\fIoffset\fR:\fIsize\fR[:\fIflags\fR]
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
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.
|
|
.sp
|
|
The block is specified in terms of a colon-separated tuple \fIvdev\fR (an
|
|
integer vdev identifier) \fIoffset\fR (the offset within the vdev) \fIsize\fR
|
|
(the size of the block to read) and, optionally, \fIflags\fR (a set of flags,
|
|
described below).
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fBb\fR \fIoffset\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Print block pointer
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fBd\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Decompress the block
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fBe\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Byte swap the block
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fBg\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Dump gang block header
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fBi\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Dump indirect block
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fBr\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Dump raw uninterpreted block data
|
|
.RE
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-s\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Report statistics on \fBzdb\fR\'s I/O. Display operation counts, bandwidth,
|
|
and error counts of I/O to the pool from \fBzdb\fR.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-S\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Simulate the effects of deduplication, constructing a DDT and then display
|
|
that DDT as with \fB-DD\fR.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-u\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Display the current uberblock.
|
|
.RE
|
|
|
|
.P
|
|
Other options:
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-A\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Do not abort should any assertion fail.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-AA\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Enable panic recovery, certain errors which would otherwise be fatal are
|
|
demoted to warnings.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-AAA\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Do not abort if asserts fail and also enable panic recovery.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-e\fR [-p \fIpath\fR]...
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Operate on an exported pool, not present in \fB/etc/zfs/zpool.cache\fR. The
|
|
\fB-p\fR flag specifies the path under which devices are to be searched.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-x\fR \fIdumpdir\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
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 \fB-bbc\fR flags are sufficient to access (and thus copy)
|
|
all metadata on the pool.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-F\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Attempt to make an unreadable pool readable by trying progressively older
|
|
transactions.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-G\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Dump the contents of the zfs_dbgmsg buffer before exiting zdb. zfs_dbgmsg is
|
|
a buffer used by ZFS to dump advanced debug information.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-I \fIinflight I/Os\fR \fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Limit the number of outstanding checksum I/Os to the specified value. The
|
|
default value is 200. This option affects the performance of the \fB-c\fR
|
|
option.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-o \fIvar\fR=\fIvalue\fR ... \fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Set the given global libzpool variable to the provided value. The value must
|
|
be an unsigned 32-bit integer. Currently only little-endian systems are
|
|
supported to avoid accidentally setting the high 32 bits of 64-bit variables.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-P\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Print numbers in an unscaled form more amenable to parsing, eg. 1000000 rather
|
|
than 1M.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-t\fR \fItransaction\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Specify the highest transaction to use when searching for uberblocks. See also
|
|
the \fB-u\fR and \fB-l\fR options for a means to see the available uberblocks
|
|
and their associated transaction numbers.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-U\fR \fIcachefile\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Use a cache file other than \fB/etc/zfs/zpool.cache\fR.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-v\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Enable verbosity. Specify multiple times for increased verbosity.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-X\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Attempt \'extreme\' transaction rewind, that is attempt the same recovery as
|
|
\fB-F\fR but read transactions otherwise deemed too old.
|
|
.RE
|
|
|
|
.sp
|
|
.ne 2
|
|
.na
|
|
\fB-V\fR
|
|
.ad
|
|
.sp .6
|
|
.RS 4n
|
|
Attempt a verbatim import. This mimics the behavior of the kernel when loading
|
|
a pool from a cachefile.
|
|
.RE
|
|
|
|
.P
|
|
Specifying a display option more than once enables verbosity for only that
|
|
option, with more occurrences enabling more verbosity.
|
|
.P
|
|
If no options are specified, all information about the named pool will be
|
|
displayed at default verbosity.
|
|
|
|
.SH "EXAMPLES"
|
|
.LP
|
|
\fBExample 1 \fRDisplay the configuration of imported pool 'rpool'
|
|
.sp
|
|
.in +2
|
|
.nf
|
|
# zdb -C rpool
|
|
|
|
MOS Configuration:
|
|
version: 28
|
|
name: 'rpool'
|
|
...
|
|
.fi
|
|
.in -2
|
|
.sp
|
|
|
|
.LP
|
|
\fBExample 2 \fRDisplay basic dataset information about 'rpool'
|
|
.sp
|
|
.in +2
|
|
.nf
|
|
# 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
|
|
...
|
|
.fi
|
|
.in -2
|
|
.sp
|
|
|
|
.LP
|
|
\fBExample 3 \fRDisplay basic information about object 0
|
|
in 'rpool/export/home'
|
|
.sp
|
|
.in +2
|
|
.nf
|
|
# 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
|
|
.fi
|
|
.in -2
|
|
.sp
|
|
|
|
.LP
|
|
\fBExample 4 \fRDisplay the predicted effect of enabling deduplication on 'rpool'
|
|
.sp
|
|
.in +2
|
|
.nf
|
|
# 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
|
|
.fi
|
|
.in -2
|
|
.sp
|
|
|
|
.SH "ENVIRONMENT VARIABLES"
|
|
.TP
|
|
.B "SPA_CONFIG_PATH"
|
|
Override the default \fBspa_config_path\fR (\fI/etc/zfs/zpool.cache\fR) setting. If \fB-U\fR flag is specified it will override this environment variable settings once again.
|
|
|
|
.SH "SEE ALSO"
|
|
zfs(8), zpool(8)
|