Example #1
0
File: spa.py Project: fhriley/zfspy
 def __init__(self, data = None):
     if data:
         self.dva = []
         dva_size = 16 
         for dva in split_records(data[0 : dva_size * 3], dva_size):
             self.dva.append(self._parse_dva(dva))
         su = StreamUnpacker(data[dva_size * 3 :])
         i = su.uint64()
         #see lib/libzfscommon/include/sys/spa.h
         self.lsize = (get_bits(i, 0, 16) + 1) << SPA_MINBLOCKSHIFT
         self.psize = (get_bits(i, 16, 16) + 1) << SPA_MINBLOCKSHIFT
         self.comp = get_bits(i, 32, 8)
         self.cksum = get_bits(i, 40, 8)
         self.type = get_bits(i, 48, 8)
         self.level = get_bits(i, 56, 5)
         if get_bits(i, 63, 1):
             self.endian = '<' # little endian
         else:
             self.endian = '>' # big
         self.cksum = ['unknown', 'on', 'off', 'label', 'gang header', 'zilog', 'fletcher2', 'fletcher4', 'SHA-256'][self.cksum]
         self.comp = ['unknown', 'on', 'off', 'lzjb'][self.comp]
         self.type = self.type
         su.rewind(-24) # skip 24b paddings
         self.birth_txg, self.fill_count = su.repeat('uint64', 2)
         self.checksum = []
         for i in range(4):
             self.checksum.append(su.uint64())
Example #2
0
 def __init__(self, data=None):
     if data:
         self.dva = []
         dva_size = 16
         for dva in split_records(data[0:dva_size * 3], dva_size):
             self.dva.append(self._parse_dva(dva))
         su = StreamUnpacker(data[dva_size * 3:])
         i = su.uint64()
         #see lib/libzfscommon/include/sys/spa.h
         self.lsize = (get_bits(i, 0, 16) + 1) << SPA_MINBLOCKSHIFT
         self.psize = (get_bits(i, 16, 16) + 1) << SPA_MINBLOCKSHIFT
         self.comp = get_bits(i, 32, 8)
         self.cksum = get_bits(i, 40, 8)
         self.type = get_bits(i, 48, 8)
         self.level = get_bits(i, 56, 5)
         if get_bits(i, 63, 1):
             self.endian = '<'  # little endian
         else:
             self.endian = '>'  # big
         self.cksum = [
             'unknown', 'on', 'off', 'label', 'gang header', 'zilog',
             'fletcher2', 'fletcher4', 'SHA-256'
         ][self.cksum]
         self.comp = ['unknown', 'on', 'off', 'lzjb'][self.comp]
         self.type = self.type
         su.rewind(-24)  # skip 24b paddings
         self.birth_txg, self.fill_count = su.repeat('uint64', 2)
         self.checksum = []
         for i in range(4):
             self.checksum.append(su.uint64())
Example #3
0
File: dmu.py Project: fhriley/zfspy
    def __init__(self, vdev, data):
        if not data:
            return
        self.vdev = vdev
        su = StreamUnpacker(data)
        self.type, self.indblkshift, self.nlevels, self.nblkptr, self.bonustype, \
                   self.checksum, self.compress, pad = su.repeat('uint8', 8)
        self.type = DMU_OBJTYPE[self.type]
        self.datablkszsec, self.bonuslen = su.repeat('uint16', 2)
        su.rewind(-4)
        self.maxblkid, self.secphys, pad = su.repeat('uint64', 3)
        bonus_offset = DNODE_CORE_SIZE + BlockPtr_SIZE * self.nblkptr
        self.blkptr = []
        for blk in split_records(data[DNODE_CORE_SIZE : bonus_offset], BlockPtr_SIZE):
            bp = BlockPtr(blk)
            if not bp.is_hole():
                self.blkptr.append(bp)
        self.bonus = data[bonus_offset : bonus_offset + self.bonuslen]

        debug('dnode type=%s nlevels=%s nblkptr=%s bonustype=%s maxblkid=%s' %  \
                (self.type, self.nlevels, self.nblkptr, self.bonustype, self.maxblkid))
Example #4
0
    def __init__(self, vdev, data):
        if not data:
            return
        self.vdev = vdev
        su = StreamUnpacker(data)
        self.type, self.indblkshift, self.nlevels, self.nblkptr, self.bonustype, \
                   self.checksum, self.compress, pad = su.repeat('uint8', 8)
        self.type = DMU_OBJTYPE[self.type]
        self.datablkszsec, self.bonuslen = su.repeat('uint16', 2)
        su.rewind(-4)
        self.maxblkid, self.secphys, pad = su.repeat('uint64', 3)
        bonus_offset = DNODE_CORE_SIZE + BlockPtr_SIZE * self.nblkptr
        self.blkptr = []
        for blk in split_records(data[DNODE_CORE_SIZE:bonus_offset],
                                 BlockPtr_SIZE):
            bp = BlockPtr(blk)
            if not bp.is_hole():
                self.blkptr.append(bp)
        self.bonus = data[bonus_offset:bonus_offset + self.bonuslen]

        debug('dnode type=%s nlevels=%s nblkptr=%s bonustype=%s maxblkid=%s' %  \
                (self.type, self.nlevels, self.nblkptr, self.bonustype, self.maxblkid))