Here is a different twist on your interesting scheme.  First
start with writting 3 blocks and parity in a full stripe.

        Disk0   Disk1   Disk2   Disk3
   
        D0      D1      D2      P0,1,2


Next application modifies D0 -> D0' and also writes other
data D3, D4. Now you have 

        Disk0   Disk1   Disk2   Disk3
   
        D0      D1      D2      P0,1,2
        D0'     D3      D4      P0',3,4

So file update combine with new data into new full stripes.
This is the trivial part. Now the hard part :

We have to deal with D0. D0 is free of data content
(subsided by D0'). However it holds parity information
protecting live data D1, D2. If workload
updates data in D1 and D2 the full stripe becomes free (this 
is the easy part).

But if D1 and D2 stays immutable for long time then we can
run out of pool blocks with D0 held down in an half-freed state.
So as we near full pool capacity, a scrubber would have to walk
the stripes  and look for partially freed ones. Then it
would need to do a scrubbing "read/write" on D1, D2 so that
they become part of a new stripe with some other data
freeing the full initial stripe.


-r

_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to