Skip to content
Snippets Groups Projects
  • Vladimir Sementsov-Ogievskiy's avatar
    1c14eaab
    block: introduce snapshot-access block driver · 1c14eaab
    Vladimir Sementsov-Ogievskiy authored
    
    The new block driver simply utilizes snapshot-access API of underlying
    block node.
    
    In further patches we want to use it like this:
    
    [guest]                   [NBD export]
       |                            |
       | root                       | root
       v                 file       v
    [copy-before-write]<------[snapshot-access]
       |           |
       | file      | target
       v           v
    [active-disk] [temp.img]
    
    This way, NBD client will be able to read snapshotted state of active
    disk, when active disk is continued to be written by guest. This is
    known as "fleecing", and currently uses another scheme based on qcow2
    temporary image which backing file is active-disk. New scheme comes
    with benefits - see next commit.
    
    The other possible application is exporting internal snapshots of
    qcow2, like this:
    
    [guest]          [NBD export]
       |                  |
       | root             | root
       v       file       v
    [qcow2]<---------[snapshot-access]
    
    For this, we'll need to implement snapshot-access API handlers in
    qcow2 driver, and improve snapshot-access block driver (and API) to
    make it possible to select snapshot by name. Another thing to improve
    is size of snapshot. Now for simplicity we just use size of bs->file,
    which is OK for backup, but for qcow2 snapshots export we'll need to
    imporve snapshot-access API to get size of snapshot.
    
    Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    Message-Id: <20220303194349.2304213-12-vsementsov@virtuozzo.com>
    [hreitz: Rebased on block GS/IO split]
    Signed-off-by: default avatarHanna Reitz <hreitz@redhat.com>
    1c14eaab
    History
    block: introduce snapshot-access block driver
    Vladimir Sementsov-Ogievskiy authored
    
    The new block driver simply utilizes snapshot-access API of underlying
    block node.
    
    In further patches we want to use it like this:
    
    [guest]                   [NBD export]
       |                            |
       | root                       | root
       v                 file       v
    [copy-before-write]<------[snapshot-access]
       |           |
       | file      | target
       v           v
    [active-disk] [temp.img]
    
    This way, NBD client will be able to read snapshotted state of active
    disk, when active disk is continued to be written by guest. This is
    known as "fleecing", and currently uses another scheme based on qcow2
    temporary image which backing file is active-disk. New scheme comes
    with benefits - see next commit.
    
    The other possible application is exporting internal snapshots of
    qcow2, like this:
    
    [guest]          [NBD export]
       |                  |
       | root             | root
       v       file       v
    [qcow2]<---------[snapshot-access]
    
    For this, we'll need to implement snapshot-access API handlers in
    qcow2 driver, and improve snapshot-access block driver (and API) to
    make it possible to select snapshot by name. Another thing to improve
    is size of snapshot. Now for simplicity we just use size of bs->file,
    which is OK for backup, but for qcow2 snapshots export we'll need to
    imporve snapshot-access API to get size of snapshot.
    
    Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    Message-Id: <20220303194349.2304213-12-vsementsov@virtuozzo.com>
    [hreitz: Rebased on block GS/IO split]
    Signed-off-by: default avatarHanna Reitz <hreitz@redhat.com>