Initial remote commit
This commit is contained in:
50
misc_tools/test_corruption.py
Normal file
50
misc_tools/test_corruption.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import struct
|
||||
|
||||
# Group 0 inode table at block 1070
|
||||
# Virtual byte: 1070 * 4096 = 4,382,720
|
||||
# Physical byte via chunk translation:
|
||||
CHUNK = 128*512
|
||||
LV_START = 5120000*512
|
||||
BSIZE = 4096
|
||||
|
||||
it_virt = 1070 * BSIZE
|
||||
group = it_virt // (5*CHUNK)
|
||||
in_group = it_virt % (5*CHUNK)
|
||||
chunk_idx = in_group // CHUNK
|
||||
intra = in_group % CHUNK
|
||||
|
||||
print(f'Group 0 inode table:')
|
||||
print(f' Virtual byte: {it_virt}')
|
||||
print(f' Chunk group: {group}')
|
||||
print(f' Chunk index: {chunk_idx} (4=metadata)')
|
||||
print(f' Is metadata: {chunk_idx == 4}')
|
||||
|
||||
if chunk_idx != 4:
|
||||
phys = LV_START + group*4*CHUNK + chunk_idx*CHUNK + intra
|
||||
print(f' Physical byte: {phys}')
|
||||
with open('/dev/sda','rb') as f:
|
||||
f.seek(phys)
|
||||
data = f.read(256)
|
||||
nonzero = sum(1 for b in data if b != 0)
|
||||
print(f' First inode nonzero bytes: {nonzero}/256')
|
||||
print(f' First 32 bytes: {data[:32].hex()}')
|
||||
else:
|
||||
print(f' In PERC metadata chunk - reads as zeros')
|
||||
|
||||
# Check groups 0-15
|
||||
print()
|
||||
print('Checking which groups have inode tables in metadata chunks:')
|
||||
for g in range(20):
|
||||
it_block = 1070 + g*512
|
||||
it_virt = it_block * BSIZE
|
||||
in_group = it_virt % (5*CHUNK)
|
||||
chunk_idx = in_group // CHUNK
|
||||
if chunk_idx == 4:
|
||||
print(f' Group {g:2d}: inode table in METADATA CHUNK (reads as zeros)')
|
||||
else:
|
||||
phys = LV_START + (it_virt//(5*CHUNK))*4*CHUNK + chunk_idx*CHUNK + (it_virt%CHUNK)
|
||||
with open('/dev/sda','rb') as f:
|
||||
f.seek(phys)
|
||||
data = f.read(256)
|
||||
nonzero = sum(1 for b in data if b != 0)
|
||||
print(f' Group {g:2d}: DATA chunk, nonzero={nonzero}/256')
|
||||
Reference in New Issue
Block a user