Some random though on this:

Scrub traverses the data in the pool by digging through the metadata
structure starting from the current Uberblock (state at the current
TXG), so by definition (or my guess since I didn't dig through the code
to find out what ZFS does when the scrub reached data that got unlinked
after it was startet) it should't be able to see any new writes.

Thus to implement functionality that depends on on-disk persistence
(pauseable scrub, storage for sorting read lists to do real scrub reads
linear in LBA order when that data wouldn't fit into RAM completely,
...): take the handle to the last TXG as start point for scrub, then
create a dataset to use as a cache/persistance store (which will be out
of the scope of the scrub since it isn't in the metadata tree to be
examined because it'll be created on a newer TXG, if my assumption is
correct).

Should something like this not enable persistent information (or enable
to hold all needed information through mmap'ing a volume/file as kind-of
RAM extension) about the scrub process /without/ the need of a on-disk
format change or new feature? Older systems would just see a valid
dataset ('zfs-scrub-internal-metadata' or something) so one could use a
newer ZFS to fast-scrub an old pool without the need to upgrade it (and
making it unuseable with older versions of ZFS)?

Only downside I currently see is that this would spawn an additional
dataset in the pool that could be included in case you zfs send the
whole pool -R (or similar), or confuse the admin.

Gregor





-------------------------------------------
openzfs-developer
Archives: https://www.listbox.com/member/archive/274414/=now
RSS Feed: https://www.listbox.com/member/archive/rss/274414/28015062-cce53afa
Modify Your Subscription: 
https://www.listbox.com/member/?member_id=28015062&id_secret=28015062-f966d51c
Powered by Listbox: http://www.listbox.com

Reply via email to