Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # the big device holding data
- DATA_DEV=/dev/sdc
- # the smaller device which will hold metadata
- # (apparently has to be a different _physical_ device than the one holding data!)
- ERA_DEV=/dev/sdb
- LOGICAL_BLOCKSIZE_DATA=`blockdev --getbsz ${DATA_DEV}`
- PHYS_BLOCKSIZE_DATA=`blockdev --getpbsz ${DATA_DEV}` # sector size, usually 512
- PHYS_BLOCKSIZE_ERA=`blockdev --getpbsz ${ERA_DEV}` # sector size, usually 512
- NUM_SECTORS_DATA=`blockdev --getsz ${DATA_DEV}`
- # from the offical dm-era doc:
- # memory_usage for era = (4 * nr_blocks) bytes + buffers
- #
- # (we assume that 'nr_blocks' references to logical blocks here)
- # ('blockdev --getsz' however returns number of sectors, i.e. 512 byte blocks)
- # -> we need to calculate the number of logical blocks from the given values
- #
- # FULL_SIZE_DATA = NUM_SECTORS_DATA * PHYS_BLOCKSIZE_DATA
- FULL_SIZE_DATA=`echo "scale=0;$NUM_SECTORS_DATA * $PHYS_BLOCKSIZE_DATA" | bc -l`
- # LOGICAL_BLOCKS_DATA = FULL_SIZE_DATA / LOGICAL_BLOCKSIZE_DATA
- LOGICAL_BLOCKS_DATA=`echo "scale=0;$FULL_SIZE_DATA / $LOGICAL_BLOCKSIZE_DATA" | bc -l`
- #
- # now calculate formula like in the doc: memory_usage = (4 * nr_blocks) bytes + buffers
- BUF_SIZE=5 # amount of 4k buffers included in the metadata device
- NUM_SECTORS_ERA=`echo "scale=0;( (4 * $LOGICAL_BLOCKS_DATA) + (4096 * $BUF_SIZE) ) / $PHYS_BLOCKSIZE_ERA" | bc -l`
- # part of /dev/sdb for (era) metadata
- dmsetup create metadev-era --table "0 ${NUM_SECTORS_ERA} linear ${ERA_DEV} 0"
- # whole /dev/sdc for data (linear mapping)
- dmsetup create metadev-data --table "0 ${NUM_SECTORS_DATA} linear ${DATA_DEV} 0"
- # era device layer above the linear /dev/sdc mapping to track changed blocks within /dev/sdc
- dmsetup create era --table "0 ${NUM_SECTORS_ERA} era /dev/mapper/metadev-era /dev/mapper/metadev-data ${LOGICAL_BLOCKSIZE_DATA}"
- # snapshot device for the metadata (you can't access /dev/mapper/era-dev-sdc directly!)
- dmsetup create era-access --table "0 ${NUM_SECTORS_ERA} linear /dev/mapper/metadev-era 0"
- # write layer for the data mapping (since the era device locks down our initial linear mapping)
- dmsetup create metadev-data-access --table "0 ${NUM_SECTORS_DATA} linear /dev/mapper/metadev-data 0"
- # mount
- mkdir -p /media/sdc-data
- mount /dev/mapper/metadev-data-access /media/sdc-data
- ## PLAYING AROUND
- # taking a metadata snapshot (before accessing it)
- # dmsetup message era 0 take_metadata_snap
- # reading the metadata
- # era_dump /dev/mapper/era-access
- # get changed blocks since specific era <ERA>
- # era_invalidate --written-since <ERA> /dev/mapper/era-access
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement