python3 -c " import struct with open('/dev/nbd0','rb') as f: f.seek(1024) sb = f.read(1024) # Print all key superblock fields fields = [ ('inodes_count', 0, 'I'), ('blocks_count_lo', 4, 'I'), ('free_blocks_lo', 12, 'I'), ('free_inodes', 16, 'I'), ('first_data_block', 20, 'I'), ('log_block_size', 24, 'I'), # bsize = 1024 << log_block_size ('blocks_per_group', 32, 'I'), # NOTE: offset 32 not 40 ('inodes_per_group', 40, 'I'), # NOTE: offset 40 ('magic', 56, 'H'), ('state', 58, 'H'), ('inode_size', 88, 'H'), ('block_group_nr', 90, 'H'), ('feat_compat', 92, 'I'), ('feat_incompat', 96, 'I'), ('feat_ro_compat', 100, 'I'), ('journal_inum', 180, 'I'), ('blocks_per_group_2', 32, 'I'), ('desc_size', 254, 'H'), # GDT entry size ('blocks_count_hi', 336, 'I'), ] print('Superblock fields:') for name, off, fmt in fields: size = struct.calcsize('<'+fmt) val = struct.unpack_from('<'+fmt, sb, off)[0] print(f' {name:25s} @ offset {off:3d}: {val}') # Recalculate key values log_bsize = struct.unpack_from('