python3 -c " import struct import binascii CHUNK = 128*512 LV_START = 5120000*512 BSIZE = 4096 GDT_ENTRY = 64 BPG = 32768 NUM_GROUPS = 35728 def raw_read(virt_offset, length): result = bytearray(length) pos = virt_offset remaining = length with open('/dev/md0','rb') as f: while remaining > 0: group = pos // (5*CHUNK) in_group = pos % (5*CHUNK) chunk_idx = in_group // CHUNK intra = in_group % CHUNK seg_len = min(CHUNK-intra, remaining) dst_off = pos - virt_offset if chunk_idx != 4: phys = LV_START + group*4*CHUNK + chunk_idx*CHUNK + intra f.seek(phys) data = f.read(seg_len) result[dst_off:dst_off+len(data)] = data pos += seg_len remaining -= seg_len return bytes(result) # Read UUID and checksum seed from superblock sb = raw_read(1024, 1024) uuid = sb[104:120] csum_seed = struct.unpack_from('