Initial remote commit
This commit is contained in:
39
misc_tools/investigate_translation.py
Normal file
39
misc_tools/investigate_translation.py
Normal file
@@ -0,0 +1,39 @@
|
||||
CHUNK = 128*512 # 65536 bytes
|
||||
BSIZE = 4096
|
||||
|
||||
# Working blocks:
|
||||
# 9262 (root dir) -> chunk_idx=3, works
|
||||
# 6300141 (volumes) -> chunk_idx=3, works
|
||||
# 6299897 (ptero) -> chunk_idx=3, works
|
||||
|
||||
# Failing block:
|
||||
# 5251104 (var) -> chunk_idx=4, fails
|
||||
|
||||
# All working blocks have chunk_idx=3
|
||||
# The failing block has chunk_idx=4
|
||||
|
||||
# What if the issue isn't our translation formula
|
||||
# but that block 5251104 was written when the filesystem
|
||||
# was mounted through the PERC, and the PERC stored it
|
||||
# in a way we can't access without the controller?
|
||||
|
||||
# Let's find MORE blocks that work to see if chunk_idx matters:
|
||||
# Check the /boot, /home, /usr directories
|
||||
|
||||
import subprocess, struct
|
||||
|
||||
for path, inode in [('boot',2621441), ('home',2097153), ('usr',5505025),
|
||||
('etc',4456449), ('tmp',786433)]:
|
||||
r = subprocess.run(['istat','/dev/nbd0',str(inode)],
|
||||
capture_output=True, text=True)
|
||||
for line in r.stdout.splitlines():
|
||||
if 'Direct Blocks' in line:
|
||||
pass
|
||||
elif line.strip() and all(c.isdigit() or c==' ' for c in line.strip()):
|
||||
blocks = [int(x) for x in line.split() if x.strip()]
|
||||
for b in blocks:
|
||||
virt = b * BSIZE
|
||||
group = virt // (5*CHUNK)
|
||||
in_group = virt % (5*CHUNK)
|
||||
chunk_idx = in_group // CHUNK
|
||||
print(f'/{path} block={b} chunk_idx={chunk_idx}')
|
||||
Reference in New Issue
Block a user