Re: RBD image "lightweight snapshots"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Aug 10, 2018 at 4:53 AM, Paweł Sadowsk <ceph@xxxxxxxxx> wrote:
> On 08/09/2018 04:39 PM, Alex Elder wrote:
>> On 08/09/2018 08:15 AM, Sage Weil wrote:
>>> On Thu, 9 Aug 2018, Piotr Dałek wrote:
>>>> Hello,
>>>>
>>>> At OVH we're heavily utilizing snapshots for our backup system. We think
>>>> there's an interesting optimization opportunity regarding snapshots I'd like
>>>> to discuss here.
>>>>
>>>> The idea is to introduce a concept of a "lightweight" snapshots - such
>>>> snapshot would not contain data but only the information about what has
>>>> changed on the image since it was created (so basically only the object map
>>>> part of snapshots).
>>>>
>>>> Our backup solution (which seems to be a pretty common practice) is as
>>>> follows:
>>>>
>>>> 1. Create snapshot of the image we want to backup
>>>> 2. If there's a previous backup snapshot, export diff and apply it on the
>>>> backup image
>>>> 3. If there's no older snapshot, just do a full backup of image
>>>>
>>>> This introduces one big issue: it enforces COW snapshot on image, meaning that
>>>> original image access latencies and consumed space increases. "Lightweight"
>>>> snapshots would remove these inefficiencies - no COW performance and storage
>>>> overhead.
>>>
>>> The snapshot in 1 would be lightweight you mean?  And you'd do the backup
>>> some (short) time later based on a diff with changed extents?
>>>
>>> I'm pretty sure this will export a garbage image.  I mean, it will usually
>>> be non-garbage, but the result won't be crash consistent, and in some
>>> (many?) cases won't be usable.
>>>
>>> Consider:
>>>
>>> - take reference snapshot
>>> - back up this image (assume for now it is perfect)
>>> - write A to location 1
>>> - take lightweight snapshot
>>> - write B to location 1
>>> - backup process copie location 1 (B) to target
>
> The way I (we) see it working is a bit different:
>  - take snapshot (1)
>  - data write might occur, it's ok - CoW kicks in here to preserve data
>  - export data
>  - convert snapshot (1) to a lightweight one (not create new):
>    * from now on just remember which blocks has been modified instead
>      of doing CoW
>    * you can get rid on previously CoW data blocks (they've been
>      exported already)
>  - more writes
>  - take snapshot (2)
>  - export diff - only blocks modified since snap (1)
>  - convert snapshot (2) to a lightweight one
>  - ...
>
>
> That way I don't see a place for data corruption. Of course this has
> some drawbacks - you can't rollback/export data from such lightweight
> snapshot anymore. But on the other hand we are reducing need for CoW -
> and that's the main goal with this idea. Instead of making CoW ~all the
> time it's needed only for the time of exporting image/modified blocks.

What's the advantage of remembering the blocks changed for a
"lightweight snapshot" once the actual data diff is no longer there?
Is there a meaningful difference between this and just immediately
deleting a snapshot after doing the export?
-Greg
_______________________________________________
ceph-users mailing list
ceph-users@xxxxxxxxxxxxxx
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com




[Index of Archives]     [Information on CEPH]     [Linux Filesystem Development]     [Ceph Development]     [Ceph Large]     [Ceph Dev]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [xfs]


  Powered by Linux