zdb.c revision 3ad6c7f96bc462dcbd2a112df698038f6764eabc
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
f65e61c04bc28ffd6bda04619c84330b420450b5ahrens * Common Development and Distribution License (the "License").
f65e61c04bc28ffd6bda04619c84330b420450b5ahrens * You may not use this file except in compliance with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
47cb52daa729f19e298c85a84e8df069365c5232Jeff Bonwick * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
bf16b11e8deb633dd6c4296d46e92399d1582df4Matthew Ahrens * Use is subject to license terms.
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwicktypedef void object_viewer_t(objset_t *, uint64_t, void *data, size_t size);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * These libumem hooks provide a reasonable set of defaults for the allocator's
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * debugging facilities.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwconst char *
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick return ("default,verbose"); /* $UMEM_DEBUG setting */
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick return ("fail,contents"); /* $UMEM_LOGGING setting */
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "Usage: %s [-CumdibcsvhL] [-S user:cksumalg] "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "poolname [object...]\n"
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens " %s [-div] dataset [object...]\n"
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens " %s -C [pool]\n"
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens " %s -l dev\n"
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens " %s -R pool:vdev:offset:size:flags\n\n",
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens cmdname, cmdname, cmdname, cmdname, cmdname);
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " Dataset name must include at least one "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "separator character '/' or '@'\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " If dataset name is specified, only that "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "dataset is dumped\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " If object numbers are specified, only "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "those objects are dumped\n\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " Options to control amount of output:\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -C cached pool configuration\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -h pool history\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -b block statistics\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -c checksum all metadata (twice for "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "all data) blocks\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -s report stats on zdb's I/O\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -S <user|all>:<cksum_alg|all> -- "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "dump blkptr signatures\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -v verbose (applies to all others)\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -l dump label contents\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -L disable leak tracking (do not "
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens "load spacemaps)\n");
486ae710326c477d7237ab803b67abb9119c0799Matthew Ahrens (void) fprintf(stderr, " -R read and display block from a "
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick "device\n\n");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) fprintf(stderr, " Below options are intended for use "
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick "with other options (except -l):\n");
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) fprintf(stderr, " -U <cachefile_path> -- use alternate "
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick "cachefile\n");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) fprintf(stderr, " -e pool is exported/destroyed/"
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "has altroot/not in a cachefile\n");
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) fprintf(stderr, " -p <path> -- use one or more with "
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "-e to specify path to vdev dir\n");
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) fprintf(stderr, " -t <txg> -- highest txg to use when "
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "searching for uberblocks\n");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) fprintf(stderr, "Specify an option more than once (e.g. -bb) "
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "to make only that option verbose\n");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) fprintf(stderr, "Default is to dump everything non-verbosely\n");
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * Called for usage errors that are discovered after a call to spa_open(),
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * dmu_bonus_hold(), or pool_match(). abort() is called for other errors.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwstatic void
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/* ARGSUSED */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwstatic void
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwdump_packed_nvlist(objset_t *os, uint64_t object, void *data, size_t size)
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick char *packed = umem_alloc(nvsize, UMEM_NOFAIL);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw VERIFY(0 == dmu_read(os, object, 0, nvsize, packed, DMU_READ_PREFETCH));
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwconst char dump_zap_stars[] = "****************************************";
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwickconst int dump_zap_width = sizeof (dump_zap_stars) - 1;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwstatic void
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick for (i = 0; i < ZAP_HISTOGRAM_SIZE; i++) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) printf("\t\t\t%u: %6llu %s\n", i, (u_longlong_t)histo[i],
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw &dump_zap_stars[(max - histo[i]) * dump_zap_width / max]);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) printf("\tmicrozap: %llu bytes, %llu entries\n",
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_none(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_uint8(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
3f9d6ad73e45c6823b409f93b0c8d4f62861d2d5Lin Lingdump_uint64(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwdump_zap(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens umem_free(prop, attr.za_num_integers * attr.za_integer_length);
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_zpldir(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *typenames[] = {
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_spacemap(objset_t *os, space_map_obj_t *smo, space_map_t *sm)
fa9e4066f08beec538e775443c5be79dd423fcabahrens char *ddata[] = { "ALLOC", "FREE", "CONDENSE", "INVALID",
02525cd08fb3730fff3a69cb5376443d481f7839Chunwei Chen * Print out the freelist entries in both encoded and decoded form.
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (offset = 0; offset < smo->smo_objsize; offset += sizeof (entry)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\t\t[%4llu] %s: txg %llu, pass %llu\n",
fa9e4066f08beec538e775443c5be79dd423fcabahrens " %08llx-%08llx size: %06llx\n",
c1379625401dfbe1c39b79136dd384a571d47fdeJustin T. Gibbs mapshift) + mapstart + (SM_RUN_DECODE(entry) <<
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) printf("space_map_object alloc (%llu) INCONSISTENT "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "with space map summary (%llu)\n",
f65e61c04bc28ffd6bda04619c84330b420450b5ahrens nicenum(msp->ms_map.sm_size - smo->smo_alloc, freebuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens "\tvdev %5llu offset %12llx spacemap %6llu free %5s\n",
02525cd08fb3730fff3a69cb5376443d481f7839Chunwei Chen (u_longlong_t)vd->vdev_id, (u_longlong_t)msp->ms_map.sm_start,
02525cd08fb3730fff3a69cb5376443d481f7839Chunwei Chen VERIFY(space_map_load(&msp->ms_map, zfs_metaslab_ops,
02525cd08fb3730fff3a69cb5376443d481f7839Chunwei Chen SM_FREE, &msp->ms_smo, spa->spa_meta_objset) == 0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens ASSERT(msp->ms_map.sm_size == (1ULL << vd->vdev_ms_shift));
fa9e4066f08beec538e775443c5be79dd423fcabahrens dump_spacemap(spa->spa_meta_objset, smo, &msp->ms_map);
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_dtl_seg(space_map_t *sm, uint64_t start, uint64_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens char *name[DTL_TYPES] = { "missing", "partial", "scrub", "outage" };
fa9e4066f08beec538e775443c5be79dd423fcabahrens vd->vdev_parent ? vd->vdev_ops->vdev_op_type : spa_name(spa),
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (int t = 0; t < DTL_TYPES; t++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((error = spa_history_get(spa, &off, &len, buf)) != 0) {
be3e2ab906b80af79c7b22885f279e45ad8fb995Brian Behlendorf if (zpool_history_unpack(buf, len, &resid, &events, &num) != 0)
fa9e4066f08beec538e775443c5be79dd423fcabahrens } while (len != 0);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw for (int i = 0; i < num; i++) {
ad860c82b2a8ffe69f42630da73ded0c92a7a36ebonwick "[internal %s txg:%lld] %s",
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_dnode(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrensblkid2offset(const dnode_phys_t *dnp, int level, uint64_t blkid)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return ((blkid << (level * (dnp->dn_indblkshift - SPA_BLKPTRSHIFT))) *
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwicksprintf_blkptr_compact(char *blkbuf, blkptr_t *bp, int alldvas)
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; i < ndvas; i++)
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) sprintf(blkbuf + strlen(blkbuf), "%llu:%llx:%llx ",
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) sprintf(blkbuf + strlen(blkbuf), "%llxL/%llxP F=%llu B=%llu",
fa9e4066f08beec538e775443c5be79dd423fcabahrens (u_longlong_t)blkid2offset(dnp, zb->zb_level, zb->zb_blkid));
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick sprintf_blkptr_compact(blkbuf, bp, dump_opt['d'] > 5 ? 1 : 0);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick#define SET_BOOKMARK(zb, objset, object, level, blkid) \
b515258426fed6c7311fd3f1dea697cfbd4085c6Matthew Ahrensvisit_indirect(spa_t *spa, const dnode_phys_t *dnp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens err = arc_read_nolock(NULL, spa, bp, arc_getbuf_func, &buf,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, zb);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* recursively visit blocks below this */
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) visit_indirect(dmu_objset_spa(dn->dn_objset), dnp,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*ARGSUSED*/
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwstatic void
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwdump_dsl_dir(objset_t *os, uint64_t object, void *data, size_t size)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) printf("\t\tcreation_time = %s", ctime(&crtime));
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw nicenum(dd->dd_used_breakdown[DD_USED_ ## which], nice); \
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) printf("\t\tused_breakdown[" #which "] = %s\n", nice)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*ARGSUSED*/
c5f9e43110e1fb316fc4297c2d150b3518b80bbeahrensdump_dsl_dataset(objset_t *os, uint64_t object, void *data, size_t size)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw char used[6], compressed[6], uncompressed[6], unique[6];
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\t\tcreation_time = %s", ctime(&crtime));
c7cd242109c82107ec2e50013369e92be9d77702George Wilson (void) printf("\t\tcompressed_bytes = %s\n", compressed);
c7cd242109c82107ec2e50013369e92be9d77702George Wilson (void) printf("\t\tuncompressed_bytes = %s\n", uncompressed);
c7cd242109c82107ec2e50013369e92be9d77702George Wilsondump_bplist(objset_t *mos, uint64_t object, char *name)
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick mutex_init(&bpl.bpl_lock, NULL, MUTEX_DEFAULT, NULL);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick if (bpl.bpl_dbuf->db_size == sizeof (bplist_phys_t)) {
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) printf("\n %s: %llu entries, %s (%s/%s comp)\n",
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick name, (u_longlong_t)bpl.bpl_phys->bpl_entries, bytes);
fa9e4066f08beec538e775443c5be79dd423fcabahrens sprintf_blkptr_compact(blkbuf, bp, dump_opt['d'] > 5 ? 1 : 0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * print uid or gid information.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * For normal POSIX id just the id is printed in decimal format.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * For CIFS files with FUID the fuid is printed in hex followed by
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * the doman-rid string.
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick domain = zfs_fuid_idx_domain(&idx_tree, FUID_INDEX(id));
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) printf("\t%s %llu\n", id_type, (u_longlong_t)id);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick /* Load domain table, if not already loaded */
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick if (!fuid_table_loaded && (uid_idx || gid_idx)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* first find the fuid object. It lives in the master node */
fa9e4066f08beec538e775443c5be79dd423fcabahrens VERIFY(zap_lookup(os, MASTER_NODE_OBJ, ZFS_FUID_TABLES,
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwdump_znode(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens char path[MAXPATHLEN * 2]; /* allow for xattr and failure prefix */
fa9e4066f08beec538e775443c5be79dd423fcabahrens error = zfs_obj_to_path(os, object, path, sizeof (path));
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) snprintf(path, sizeof (path), "\?\?\?<object#%llu>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\tgen %llu\n", (u_longlong_t)zp->zp_gen);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\tmode %llo\n", (u_longlong_t)zp->zp_mode);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\tsize %llu\n", (u_longlong_t)zp->zp_size);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\tparent %llu\n", (u_longlong_t)zp->zp_parent);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\tlinks %llu\n", (u_longlong_t)zp->zp_links);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) printf("\txattr %llu\n", (u_longlong_t)zp->zp_xattr);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("\trdev 0x%016llx\n", (u_longlong_t)zp->zp_rdev);
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwdump_acl(objset_t *os, uint64_t object, void *data, size_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*ARGSUSED*/
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwstatic void
ad860c82b2a8ffe69f42630da73ded0c92a7a36ebonwickdump_dmu_objset(objset_t *os, uint64_t object, void *data, size_t size)
ad860c82b2a8ffe69f42630da73ded0c92a7a36ebonwickstatic object_viewer_t *object_viewer[DMU_OT_NUMTYPES] = {
fa9e4066f08beec538e775443c5be79dd423fcabahrensdump_object(objset_t *os, uint64_t object, int verbosity, int *print_header)
fa9e4066f08beec538e775443c5be79dd423fcabahrens char iblk[6], dblk[6], lsize[6], asize[6], bonus_size[6], segsize[6];
3f9d6ad73e45c6823b409f93b0c8d4f62861d2d5Lin Ling " asize type\n");
c5f9e43110e1fb316fc4297c2d150b3518b80bbeahrens if (object == 0) {
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick nicenum(doi.doi_data_block_size * (doi.doi_max_block_offset + 1),
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (doi.doi_checksum != ZIO_CHECKSUM_INHERIT || verbosity >= 6) {
3f9d6ad73e45c6823b409f93b0c8d4f62861d2d5Lin Ling (void) snprintf(aux + strlen(aux), sizeof (aux), " (K=%s)",
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (doi.doi_compress != ZIO_COMPRESS_INHERIT || verbosity >= 6) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) snprintf(aux + strlen(aux), sizeof (aux), " (Z=%s)",
455d5089097abbf7ee4538a03c4df823497b6e68ahrens (u_longlong_t)object, doi.doi_indirection, iblk, dblk, lsize,
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick if (doi.doi_bonus_type != DMU_OT_NONE && verbosity > 3) {
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (dn->dn_phys->dn_flags & DNODE_FLAG_USED_BYTES) ?
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (dn->dn_phys->dn_flags & DNODE_FLAG_USERUSED_ACCOUNTED) ?
be6fd75a69ae679453d9cda5bff3326111e6d1caMatthew Ahrens object_viewer[doi.doi_bonus_type](os, object, bonus, bsize);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick object_viewer[doi.doi_type](os, object, NULL, 0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Report the list of segments that comprise the object.
be6fd75a69ae679453d9cda5bff3326111e6d1caMatthew Ahrens (void) printf("\t\tsegment [%016llx, %016llx)"
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick dmu_objset_space(os, &refdbytes, &scratch, &usedobjs, &scratch);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("Dataset %s [%s], ID %llu, cr_txg %llu, "
87e5029a3226958edab1512d6182bc74d8d80c9aahrens "%s, %llu objects%s\n",
87e5029a3226958edab1512d6182bc74d8d80c9aahrens dmu_objset_ds(os)->ds_phys->ds_deadlist_obj, "Deadlist");
87e5029a3226958edab1512d6182bc74d8d80c9aahrens for (i = 0; i < zopt_objects; i++)
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick dump_object(os, DMU_USERUSED_OBJECT, verbosity, &print_header);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick dump_object(os, DMU_GROUPUSED_OBJECT, verbosity, &print_header);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick while ((error = dmu_object_next(os, &object, B_FALSE, 0)) == 0) {
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick dump_object(os, object, verbosity, &print_header);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "dmu_object_next() = %d\n", error);
87e5029a3226958edab1512d6182bc74d8d80c9aahrens (void) printf("\tmagic = %016llx\n", (u_longlong_t)ub->ub_magic);
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick (void) printf("\tversion = %llu\n", (u_longlong_t)ub->ub_version);
87e5029a3226958edab1512d6182bc74d8d80c9aahrens (void) printf("\ttxg = %llu\n", (u_longlong_t)ub->ub_txg);
c5f9e43110e1fb316fc4297c2d150b3518b80bbeahrens (void) printf("\tguid_sum = %llu\n", (u_longlong_t)ub->ub_guid_sum);
87e5029a3226958edab1512d6182bc74d8d80c9aahrens (u_longlong_t)ub->ub_timestamp, asctime(localtime(×tamp)));
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick sprintf_blkptr(blkbuf, BP_SPRINTF_LEN, &ub->ub_rootbp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (pool == NULL || strcmp(pool, spa_name(spa)) == 0)
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) printf("failed to stat '%s': %s\n", cachefile,
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "failed to allocate %llu bytes\n",
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (read(fd, buf, statbuf.st_size) != statbuf.st_size) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "failed to read %llu bytes\n",
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (nvlist_unpack(buf, statbuf.st_size, &config, 0) != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens size_t buflen = sizeof (label.vl_vdev_phys.vp_nvlist);
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi (void) printf("cannot open '%s': %s\n", dev, strerror(errno));
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi (void) printf("failed to stat '%s': %s\n", dev,
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi psize = P2ALIGN(psize, (uint64_t)sizeof (vdev_label_t));
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi for (l = 0; l < VDEV_LABELS; l++) {
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi (void) printf("--------------------------------------------\n");
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi (void) printf("--------------------------------------------\n");
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi vdev_label_offset(psize, l, 0)) != sizeof (label)) {
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi (void) printf("failed to read label %d\n", l);
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi if (nvlist_unpack(buf, buflen, &config, 0) != 0) {
3d6926289465757c3da780cea696825b0d730283Sanjeev Bagewadi (void) printf("failed to unpack label %d\n", l);
720d1aa11ffe42c822fb6151fb4ae83194389942Sanjeev Bagewadi error = dmu_objset_own(dsname, DMU_OST_ANY, B_TRUE, FTAG, &os);
720d1aa11ffe42c822fb6151fb4ae83194389942Sanjeev Bagewadi (void) printf("Could not open %s\n", dsname);
720d1aa11ffe42c822fb6151fb4ae83194389942Sanjeev Bagewadizdb_leak(space_map_t *sm, uint64_t start, uint64_t size)
b515258426fed6c7311fd3f1dea697cfbd4085c6Matthew Ahrens (void) printf("leaked space: vdev %llu, offset 0x%llx, size %llu\n",
720d1aa11ffe42c822fb6151fb4ae83194389942Sanjeev Bagewadi (u_longlong_t)vd->vdev_id, (u_longlong_t)start, (u_longlong_t)size);
720d1aa11ffe42c822fb6151fb4ae83194389942Sanjeev Bagewadi/* ARGSUSED */
typedef struct zdb_blkstats {
typedef struct zdb_cb {
int zcb_readfails;
int zcb_haderrors;
} zdb_cb_t;
if (print_sig) {
void *data;
blkbuf);
blkbuf);
int leaks = 0;
logalloc = 0;
int l, t, level;
for (t = 0; t <= DMU_OT_NUMTYPES; t++) {
char *typename;
typename);
if (leaks)
int rc = 0;
if (rc != 0)
for (i = 0; i < nbps; i++)
char *hdr, *c;
if (do_bswap)
static vdev_t *
return (NULL);
goto name;
return (NULL);
return (vdev);
name:
return (vc);
return (vc);
return (vc);
return (vc);
return (NULL);
int flags = 0;
void *buf;
s = NULL;
if (size == 0)
for (i = 0; flagstr[i]; i++) {
if (bit == 0) {
flagstr[i]);
ZDB_FLAG_PRINT_BLKPTR)) == 0)
if (spa)
if (error)
if (error) {
goto out;
flags);
out:
static boolean_t
if (guid != 0) {
return (v == guid);
return (B_FALSE);
char sep;
int count = 0;
count++;
if (sepp)
return (name);
char *endstr;
int verbose = 0;
int error;
int nsearch = 0;
char *target;
dump_opt[c]++;
dump_all = 0;
dump_opt[c]++;
verbose++;
sizeof (char *), UMEM_NOFAIL);
nsearch * sizeof (char *));
dump_opt[c]++;
dump_all = 0;
usage();
usage();
usage();
usage();
usage();
if (dump_opt[c])
usage();
while (argv[0]) {
argv++;
argc--;
if (spa)
error = 0;
if (name) {
if (error == 0) {
if (error) {
error = 0;
if (!error)
if (error)
argv++;
if (--argc > 0) {
for (i = 0; i < zopt_objects; i++) {
errno = 0;
kernel_fini();