I'm reading the "ZFS On-disk Format" PDF (dated 2006 -
are there newer releases?), and have some questions
regarding whether it is outdated:
1) On page 16 it has the following phrase (which I think
is in general invalid):
The value stored in offset is the offset in terms of
sectors (512 byte blocks). To find the physical block
byte offset from the beginning of a slice, the value
inside offset must be shifted over (<<) by 9 (2^9=512)
and this value must be added to 0x400000 (size of two
vdev_labels and boot block).
Does this calculation really go on in hard-coded 2^9
values, or in VDEV-dependant ashift values (i.e. 2^12
for 4k disks, 2^10 for default raidz, etc.)?
2) Likewise, in Section 2.6 (block size entries) the
values of lsize/psize/asize are said to be represented
by the number of 512-byte sectors. Does this statement
hold true for ashift!=9 VDEVs/pools as well?
3) In Section 1.3 they discuss the format of VDEV labels.
As I'm researching this with the intent of repairing my
pool's label (core problem posted yesterday in thread
"Doublefree/doubledelete"), I wondered if the labels
are protected by any checksums. The document does not
state anything about it, so I guess the labels are only
protected by 4-way redundancy - that's it?..
4) As I asked today in thread "How many rollback TXGs
in a ring for 4k drives?", there was an understanding
by our Linux-ZFS comrades that each uberblock takes up
some amount of disk blocks, with minimal allocation
based on ashift value; thus on ashift=12 pools there
are only 32 rollback TXGs.
The PDF spec (section 1.3 overview) states that each
UB entry size is 1KB as part of the label structure;
does this mean that for ashift=12 pools there are 128
entries as well? If this is the case, I think the
Linux guys should be informed, to avoid incompatible
5) The label contains an NVList of "related" VDEVs...
does this factually limit the amount of devices which
can comprise a (top-level) VDEV?
I have seen some blog entry (Eric Schrock's, I think)
where the author discussed the initial graph-based
VDEV indexation, with each VDEV referring to about
3 neighbors; during import/scan it was possible to
either find all devices or deduce that some (and which)
are missing. But due to some drawbacks of that ASCII
based implementation they moved to NVLists.
I wonder if such required-device interpolation is
done now, or there can be as many VDEVs as can fit
into the 112KB of NVList size?
That's about all I can ask for teh first 10 pages
of spec text ;)
zfs-discuss mailing list