Class: Lvm2Thin::MetadataSpaceMap

Inherits:
Object
  • Object
show all
Defined in:
lib/VolumeManager/LVM/thin/space_maps.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(superblock, struct) ⇒ MetadataSpaceMap

Returns a new instance of MetadataSpaceMap.



53
54
55
56
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 53

def initialize(superblock, struct)
  @superblock = superblock
  @struct     = struct
end

Instance Attribute Details

#structObject

Returns the value of attribute struct.



51
52
53
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 51

def struct
  @struct
end

Instance Method Details

#bitmapsObject



44
45
46
47
48
49
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 44

def bitmaps
  @bitmaps ||= index_entries.collect do |index_entry|
    @superblock.seek @superblock.md_block_address(index_entry['blocknr'])
    @superblock.read_struct BITMAP_HEADER
  end
end

#index_entriesObject



35
36
37
38
39
40
41
42
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 35

def index_entries
  @index_entries ||=
    0.upto(indices-1).collect do |i|
      address =  + METADATA_INDEX.size + i * INDEX_ENTRY.size
      @superblock.seek address
      @superblock.read_struct INDEX_ENTRY
    end
end

#indicesObject



31
32
33
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 31

def indices
  @metadata_indices ||= (struct['nr_blocks'].to_f / @superblock.entries_per_block).ceil
end

#metadata_root_addressObject



20
21
22
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 20

def 
  @metadata_root_address ||= @superblock.md_block_address(struct['bitmap_root'])
end

#rootObject



24
25
26
27
28
29
# File 'lib/VolumeManager/LVM/thin/space_maps.rb', line 24

def root
  @metadata_root ||= begin
    @superblock.seek 
    @superblock.read_struct METADATA_INDEX
  end
end