Advertisement
Guest User

dm-era sample setup

a guest
Sep 22nd, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # the big device holding data
  4. DATA_DEV=/dev/sdc
  5.  
  6. # the smaller device which will hold metadata
  7. # (apparently has to be a different _physical_ device than the one holding data!)
  8. ERA_DEV=/dev/sdb
  9.  
  10.  
  11. LOGICAL_BLOCKSIZE_DATA=`blockdev --getbsz ${DATA_DEV}`
  12. PHYS_BLOCKSIZE_DATA=`blockdev --getpbsz ${DATA_DEV}` # sector size, usually 512
  13. PHYS_BLOCKSIZE_ERA=`blockdev --getpbsz ${ERA_DEV}` # sector size, usually 512
  14.  
  15. NUM_SECTORS_DATA=`blockdev --getsz ${DATA_DEV}`
  16.  
  17. # from the offical dm-era doc:
  18. # memory_usage for era = (4 * nr_blocks) bytes + buffers
  19. #
  20. # (we assume that 'nr_blocks' references to logical blocks here)
  21. # ('blockdev --getsz' however returns number of sectors, i.e. 512 byte blocks)
  22. # -> we need to calculate the number of logical blocks from the given values
  23. #
  24. # FULL_SIZE_DATA = NUM_SECTORS_DATA * PHYS_BLOCKSIZE_DATA
  25. FULL_SIZE_DATA=`echo "scale=0;$NUM_SECTORS_DATA * $PHYS_BLOCKSIZE_DATA" | bc -l`
  26. # LOGICAL_BLOCKS_DATA = FULL_SIZE_DATA / LOGICAL_BLOCKSIZE_DATA
  27. LOGICAL_BLOCKS_DATA=`echo "scale=0;$FULL_SIZE_DATA / $LOGICAL_BLOCKSIZE_DATA" | bc -l`
  28. #
  29. # now calculate formula like in the doc: memory_usage = (4 * nr_blocks) bytes + buffers
  30. BUF_SIZE=5 # amount of 4k buffers included in the metadata device
  31. NUM_SECTORS_ERA=`echo "scale=0;( (4 * $LOGICAL_BLOCKS_DATA) + (4096 * $BUF_SIZE) ) / $PHYS_BLOCKSIZE_ERA" | bc -l`
  32.  
  33. # part of /dev/sdb for (era) metadata
  34. dmsetup create metadev-era --table "0 ${NUM_SECTORS_ERA} linear ${ERA_DEV} 0"
  35.  
  36. # whole /dev/sdc for data (linear mapping)
  37. dmsetup create metadev-data --table "0 ${NUM_SECTORS_DATA} linear ${DATA_DEV} 0"
  38.  
  39. # era device layer above the linear /dev/sdc mapping to track changed blocks within /dev/sdc
  40. dmsetup create era --table "0 ${NUM_SECTORS_ERA} era /dev/mapper/metadev-era /dev/mapper/metadev-data ${LOGICAL_BLOCKSIZE_DATA}"
  41.  
  42. # snapshot device for the metadata (you can't access /dev/mapper/era-dev-sdc directly!)
  43. dmsetup create era-access --table "0 ${NUM_SECTORS_ERA} linear /dev/mapper/metadev-era 0"
  44.  
  45. # write layer for the data mapping (since the era device locks down our initial linear mapping)
  46. dmsetup create metadev-data-access --table "0 ${NUM_SECTORS_DATA} linear /dev/mapper/metadev-data 0"
  47.  
  48. # mount
  49. mkdir -p /media/sdc-data
  50. mount /dev/mapper/metadev-data-access /media/sdc-data
  51.  
  52.  
  53. ## PLAYING AROUND
  54.  
  55. # taking a metadata snapshot (before accessing it)
  56. # dmsetup message era 0 take_metadata_snap
  57.  
  58. # reading the metadata
  59. # era_dump /dev/mapper/era-access
  60.  
  61. # get changed blocks since specific era <ERA>
  62. # era_invalidate --written-since <ERA> /dev/mapper/era-access
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement