Friday, July 4, 2014

Remove Big RBD Image [feedly]



----
Remove Big RBD Image
// Ceph

Create a disk with an insane size can be fun, but a little hard to remove.

Here's a little trick (use with caution!) to remove a too big image for rm rbd (if image is not initialized, or not fully).

Image format 1 :

$ rbd info rbdbigsize  rbd image 'rbdbigsize':      size 1862 PB in 500000000000 objects      order 22 (4096 kB objects)      block_name_prefix: rb.0.47aa.74b0dc51      format: 1  

Remove the header file :

$ rados -p rbd rm rbdbigsize.rbd  

Remove all rbd data : (This may take some time depending on the space already used on the blockdevice.)

$ rados -p rbd ls | grep '^rb.0.47aa.74b0dc51' | xargs -n 200  rados -p rbd rm  

Finally, remove from rbd list :

$ rbd rm rbdbigsize  2014-06-12 16:27:20.838596 7fd86dff3760 -1 librbd::ImageCtx: error finding header: (2) No such file or directory  Removing image: 100% complete...done.  

Image format 2 :

$  rbd info rbdbigsize  rbd image 'rbdbigsize':          size 1024 TB in 268435456 objects          order 22 (4096 kB objects)          block_name_prefix: rbd_data.81d12ae8944a          format: 2          features: layering  

Remove header

$ rados -p rbd rm rbd_id.rbdbigsize   $ rados -p rbd rm rbd_header.81d12ae8944a  

Remove all rbd data :

$ rados -p rbd ls | grep '^rbd_data.81d12ae8944a.' | xargs -n 200  rados -p rbd rm  

Remove from rbd list :

$ rbd rm rbdbigsize  2014-06-12 17:37:24.483587 7f413506c760 -1 librbd::ImageCtx: error finding header: (2) No such file or directory  Removing image: 100% complete...done.  

Time comparison :

Example of delete time for blockdevice of 1PB just formatted.

$ rbd create rbdbigsize --size=1073741824 --image-format=2  $ rbd map rbdbigsize  $ mkfs.xfs /dev/rbd0  $ rbd unmap /dev/rbd0    $ rados -p rbd ls | grep '^rbd_data.81d12ae8944a.' | wc -l  1536  

The block device is composed solely of 1536 block and can be quickly removed via rados rm :

$ time rados -p rbd ls | grep '^rbd_data.81d12ae8944a.' | xargs -n 200  rados -p rbd rm  real    0m10.073s  user    0m1.244s  sys 0m0.228s  

To compare:

$ time rbd rm rbdbigsize  Removing image: 100% complete...done.    real    1123m5.409s  user    686m19.924s  sys     229m56.596s  

Fully initialized image :

Of course, deleting a fully initialized image is faster via "rbd rm". :)

$ rbd create rbdbigsize --size 1048576  $ rbd map rbdbigsize; dd if=/dev/zero of=/dev/rbd0; rbd unmap /dev/rbd0;  $ time (rados -p rbd ls | grep `rbd info rbdbigsize | grep block_name_prefix | grep -o 'rb.*$'` | xargs -n 200  rados -p rbd rm; rados -p rbd rm rbdbigsize.rbd; rbd rm rbdbigsize)    real    143m6.373s  user    2m49.100s  sys     0m22.080s      $ rbd create rbdbigsize --size 1048576  $ rbd map rbdbigsize; dd if=/dev/zero of=/dev/rbd0; rbd unmap /dev/rbd0;  $ time rbd rm rbdbigsize    real   88m44.121s  user    1m5.464s  sys     0m25.244s  


----

Shared via my feedly reader


Sent from my iPhone

No comments:

Post a Comment