import struct CHUNK = 128*512 LV_START = 5120000*512 BSIZE = 4096 IPG = 8192 INODE_SZ = 256 def phys_from_virt(virt): grp = virt//(5*CHUNK) in_group = virt%(5*CHUNK) chunk_idx= in_group//CHUNK intra = in_group%CHUNK if chunk_idx == 4: return None return LV_START + grp*4*CHUNK + chunk_idx*CHUNK + intra def read_inode(inode_num): group = (inode_num-1)//IPG idx = (inode_num-1)%IPG it_block = 1070 + group*512 virt = it_block*BSIZE + idx*INODE_SZ print(f' inode {inode_num}: group={group} idx={idx}') print(f' inode table block: {it_block}') print(f' virtual byte: {virt}') phys = phys_from_virt(virt) print(f' physical byte: {phys}') if phys is None: print(f' IN METADATA CHUNK') return None with open('/dev/sda','rb') as f: f.seek(phys) return f.read(INODE_SZ) # Check known good inode - volumes directory print('=== Inode 1585918 (volumes dir) ===') data = read_inode(1585918) if data: mode = struct.unpack_from('