def recover_memory(base_path, delta_path, raw_meta, raw_mem, out_path): # Recover modified memory snapshot # base_path: base memory snapshot, delta pages will be applied over it # delta_path: memory overlay # raw_meta: meta(header/footer/hash list) information of the raw memory # raw_mem: raw memory of the base memory snapshot # out_path: path to recovered modified memory snapshot # Create Base Memory from meta file base = Memory.import_from_metafile(raw_meta, raw_mem) header_delta, footer_delta, delta_list = DeltaList.fromfile_with_footer(delta_path) header = tool.merge_data(base.header_data, header_delta, 1024*1024) footer = tool.merge_data(base.footer_data, footer_delta, 1024*1024*10) _recover_modified_list(delta_list, raw_mem) _recover_memory(base_path, delta_list, header, footer, out_path)
def recover_memory(base_path, delta_path, raw_meta, raw_mem, out_path): # Recover modified memory snapshot # base_path: base memory snapshot, delta pages will be applied over it # delta_path: memory overlay # raw_meta: meta(header/footer/hash list) information of the raw memory # raw_mem: raw memory of the base memory snapshot # out_path: path to recovered modified memory snapshot # Create Base Memory from meta file base = Memory.import_from_metafile(raw_meta, raw_mem) header_delta, footer_delta, delta_list = DeltaList.fromfile_with_footer( delta_path) header = tool.merge_data(base.header_data, header_delta, 1024 * 1024) footer = tool.merge_data(base.footer_data, footer_delta, 1024 * 1024 * 10) _recover_modified_list(delta_list, raw_mem) _recover_memory(base_path, delta_list, header, footer, out_path)
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) footer = tool.merge_data(base.footer_data, footer_delta, 1024 * 1024 * 10) _recover_modified_list(delta_list, raw_path) out_path = base_path + ".recover" _recover_memory(delta_list, header, footer, out_path)
# 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) footer = tool.merge_data(base.footer_data, footer_delta, 1024*1024*10) _recover_modified_list(delta_list, raw_path) out_path = base_path+".recover" _recover_memory(delta_list, header, footer, out_path)