On Wed, Jul 25, 2007 at 08:19:07PM +0200, Mark Furner wrote:
> Many thanks for the quick reply, Eric. ZFS is quite awesome, but also
> awesomely complicated.
>
> What did you mean with
>
> >For *filesystems*, you can consult the per-pool history.
>
> Is this the vdev label uberblock / MOS thing?
Yes, the history is stored in the MOS.
> > It is part of the MOS (meta object set), which is the root of all
> > pool-wide metadata.
>
> I'm still trying to work out where the MOS can be found on disk. The
> uberblock
> points to it, but is it outside the vdev label? The diagram on p. 32 of
> the "ZFS On-Disk Specification" is a bit ambiguous here. Where does the
> file-system metadata end and the files / file metadata / directories begin?
The uberblock points the MOS:
struct uberblock {
uint64_t ub_magic; /* UBERBLOCK_MAGIC */
uint64_t ub_version; /* SPA_VERSION */
uint64_t ub_txg; /* txg of last sync */
uint64_t ub_guid_sum; /* sum of all vdev guids */
uint64_t ub_timestamp; /* UTC time of last sync */
blkptr_t ub_rootbp; /* MOS objset_phys_t */
};
The 'ub_rootbp' points to the MOS, from which all pool data and metadata
can be discovered. It is a normal block pointer, which means it can be
stored on any of the vdevs (several of them, thanks to ditto blocks).
Only the vdev label (including the uberblock) has a fixed location,
everything is derived from that.
For what's contained in the MOS, check out the definition for
DMU_POOL_DIRECTORY_OBJECT:
/*
* The names of zap entries in the DIRECTORY_OBJECT of the MOS.
*/
#define DMU_POOL_DIRECTORY_OBJECT 1
#define DMU_POOL_CONFIG "config"
#define DMU_POOL_ROOT_DATASET "root_dataset"
#define DMU_POOL_SYNC_BPLIST "sync_bplist"
#define DMU_POOL_ERRLOG_SCRUB "errlog_scrub"
#define DMU_POOL_ERRLOG_LAST "errlog_last"
#define DMU_POOL_SPARES "spares"
#define DMU_POOL_DEFLATE "deflate"
#define DMU_POOL_HISTORY "history"
#define DMU_POOL_PROPS "pool_props"
Most of this is pool-wide metadata, but the 'root_dataset' is the link
into the DSL (dataset and snapshot layer) which has a list of all the
filesystems (among other things). Each filesystem has its own data
structure that is the root of the actual filesystem data.
Hope that helps,
- Eric
--
Eric Schrock, Solaris Kernel Development http://blogs.sun.com/eschrock