import subprocess, struct CHUNK = 128*512 LV_START = 5120000*512 BSIZE = 4096 # Check istat for volumes dir (inode 1585918) - we know fls works on this r = subprocess.run(['istat', '/dev/nbd0', '1585918'], capture_output=True, text=True) print('istat for volumes (inode 1585918):') print(r.stdout) # Check istat for pterodactyl dir (inode 1574102) r2 = subprocess.run(['istat', '/dev/nbd0', '1574102'], capture_output=True, text=True) print('istat for pterodactyl (inode 1574102):') print(r2.stdout) # Check which chunk each data block falls in def check_block(block_num): virt = block_num * BSIZE group = virt // (5*CHUNK) in_group = virt % (5*CHUNK) chunk_idx = in_group // CHUNK return chunk_idx # Parse direct blocks from istat output for line in r.stdout.splitlines(): if 'Direct Blocks' in line or (line.strip() and line.strip()[0].isdigit()): blocks = [int(x) for x in line.split() if x.isdigit()] for b in blocks: ci = check_block(b) print(f' block {b}: chunk_idx={ci} {"METADATA" if ci==4 else "DATA"}')