def create_memory_overlay(raw_meta, raw_mem, modified_mem, out_delta, print_out=sys.stdout): # get memory delta # raw_meta: meta data path of raw memory, e.g. hash_list+header+footer # raw_mem: raw memory path # modified_mem: modified memory path # out_delta: output path of final delta # Create Base Memory from meta file base = Memory.import_from_metafile(raw_meta, raw_mem) # 1.get modified page print_out.write("[Debug] 1.get modified page list\n") header_delta, footer_delta, original_delta_list = base.get_modified(modified_mem) delta_list = [] for item in original_delta_list: delta_item = DeltaItem(item.offset, item.offset_len, hash_value=item.hash_value, ref_id=item.ref_id, data_len=item.data_len, data=item.data) delta_list.append(delta_item) # 2.find shared with base memory print_out.write("[Debug] 2.get delta from base Memory\n") base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM) # 3.find shared within self print_out.write("[Debug] 3.get delta from itself\n") DeltaList.get_self_delta(delta_list) DeltaList.statistics(delta_list, print_out) DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list, out_delta)
def create_memory_overlay(raw_meta, raw_mem, modified_mem, out_delta, print_out=sys.stdout): # get memory delta # raw_meta: meta data path of raw memory, e.g. hash_list+header+footer # raw_mem: raw memory path # modified_mem: modified memory path # out_delta: output path of final delta # Create Base Memory from meta file base = Memory.import_from_metafile(raw_meta, raw_mem) # 1.get modified page print_out.write("[Debug] 1.get modified page list\n") header_delta, footer_delta, original_delta_list = base.get_modified( modified_mem) delta_list = [] for item in original_delta_list: delta_item = DeltaItem(item.offset, item.offset_len, hash_value=item.hash_value, ref_id=item.ref_id, data_len=item.data_len, data=item.data) delta_list.append(delta_item) # 2.find shared with base memory print_out.write("[Debug] 2.get delta from base Memory\n") base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM) # 3.find shared within self print_out.write("[Debug] 3.get delta from itself\n") DeltaList.get_self_delta(delta_list) DeltaList.statistics(delta_list, print_out) DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list, out_delta)
hash_value=item.hash_value, ref_id=item.ref_id, data_len=item.data_len, data=item.data) delta_list.append(delta_item) # 2.find shared with base memory print "[Debug] get delta from base Memory" base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM) # 3.find shared within self print "[Debug] get delta from itself" DeltaList.get_self_delta(delta_list) DeltaList.statistics(delta_list) DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list, out_path) elif command == "recover": if (not settings.base_file) or (not settings.delta_file): sys.stderr.write("Error, Cannot find base/delta file. See help\n") sys.exit(1) base_path = settings.base_file delta_path = settings.delta_file raw_path = settings.base_file + EXT_RAW meta_path = settings.base_file + EXT_META # Create Base Memory from meta file base = Memory.import_from_metafile(meta_path, raw_path) header_delta, footer_delta, delta_list = DeltaList.fromfile_with_footer( delta_path)
hash_value=item.hash_value, ref_id=item.ref_id, data_len=item.data_len, data=item.data) delta_list.append(delta_item) # 2.find shared with base memory print "[Debug] get delta from base Memory" base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM) # 3.find shared within self print "[Debug] get delta from itself" DeltaList.get_self_delta(delta_list) DeltaList.statistics(delta_list) DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list, out_path) elif command == "recover": if (not settings.base_file) or (not settings.delta_file): sys.stderr.write("Error, Cannot find base/delta file. See help\n") sys.exit(1) base_path = settings.base_file delta_path = settings.delta_file raw_path = settings.base_file + EXT_RAW meta_path = settings.base_file + EXT_META # Create Base Memory from meta file base = Memory.import_from_metafile(meta_path, raw_path) header_delta, footer_delta, delta_list = DeltaList.fromfile_with_footer(delta_path) header = tool.merge_data(base.header_data, header_delta, 1024*1024)