forked from Imagelibrary/littlefs
Added scripts/dbglfs.py for debugging the filesystem tree
Currently this can show:
- The filesystem tree:
$ ./scripts/dbglfs.py disk -B4096
littlefs v2.0 0x{0,1}.bd4, rev 1, weight 41
mdir ids name type
{00ce,00cf}: 0.1 dir0000 dir 0x1070c73
{0090,0091}: 2.30 |-> child0000 dir 0x8ec7fb2
{0042,0043}: 24.35 | |-> grandchild0000 dir 0x32d990b
{0009,000a}: 25.0 | |-> grandchild0001 dir 0x1461a08
25.1 | |-> grandchild0002 dir 0x216e9fc
25.2 | |-> grandchild0003 dir 0x7d6aff
25.3 | |-> grandchild0004 dir 0x4b70e14
25.4 | |-> grandchild0005 dir 0x6dc8d17
25.5 | |-> grandchild0006 dir 0x58c7ee3
25.6 | '-> grandchild0007 dir 0x7e7fde0
{0090,0091}: 2.31 |-> child0001 dir 0xa87fcb1
{0077,0078}: 29.1 | |-> grandchild0000 dir 0x12194f5
29.2 | |-> grandchild0001 dir 0x34a17f6
...
- The on-disk filesystem config:
$ ./scripts/dbglfs.py disk -B4096 -c
littlefs v2.0 0x{0,1}.bd4, rev 1, weight 41
mdir ids tag data (truncated)
config: major_version 2 02 .
minor_version 0 00 .
csum_type 2 02 .
flags 0 00 .
block_size 4096 80 20 .
block_count 256 80 02 ..
...
- Any global-state on-disk:
$ ./scripts/dbglfs.py disk -B4096 -g -d
littlefs v2.0 0x{0,1}.bd4, rev 1, weight 41
mdir ids tag data (truncated)
gstate: grm none 00 00 00 cc 05 57 ff 7f .....W..
{0000,0001}: -1 grm 8 01 03 24 cc 05 57 ff 7f ..$..W..
{00ce,00cf}: 0 grm 3 00 2f 1b ./.
{00d0,00d1}: 1 grm 3 01 04 01 ...
Note this already reveals a bug, since grm none should be all zeros.
Also made some other minor tweaks to dbg scripts for consistency.
This commit is contained in:
@@ -209,15 +209,15 @@ class Rbyd:
|
||||
self.off = off
|
||||
self.trunk = trunk
|
||||
self.weight = weight
|
||||
self.other_blocks = []
|
||||
self.redund_blocks = []
|
||||
|
||||
def addr(self):
|
||||
if not self.other_blocks:
|
||||
if not self.redund_blocks:
|
||||
return '0x%x.%x' % (self.block, self.trunk)
|
||||
else:
|
||||
return '0x{%x,%s}.%x' % (
|
||||
self.block,
|
||||
','.join('%x' % block for block in self.other_blocks),
|
||||
','.join('%x' % block for block in self.redund_blocks),
|
||||
self.trunk)
|
||||
|
||||
@classmethod
|
||||
@@ -240,7 +240,7 @@ class Rbyd:
|
||||
i = i_
|
||||
# keep track of the other blocks
|
||||
rbyd = rbyds[i]
|
||||
rbyd.other_blocks = [rbyds[(i+1+j) % len(rbyds)].block
|
||||
rbyd.redund_blocks = [rbyds[(i+1+j) % len(rbyds)].block
|
||||
for j in range(len(rbyds)-1)]
|
||||
return rbyd
|
||||
else:
|
||||
@@ -1293,7 +1293,7 @@ def main(disk, mroots=None, *,
|
||||
print('%12s %s%-57s' % (
|
||||
'{%s}:' % ','.join('%04x' % block
|
||||
for block in it.chain([mdir.block],
|
||||
mdir.other_blocks))
|
||||
mdir.redund_blocks))
|
||||
if i == 0 else '',
|
||||
treerepr(mid, 1, md, 0, rid, tag)
|
||||
if args.get('tree') or args.get('btree') else '',
|
||||
@@ -1393,6 +1393,8 @@ def main(disk, mroots=None, *,
|
||||
line))
|
||||
|
||||
|
||||
#### actual debugging begins here
|
||||
|
||||
# print some information about the mtree
|
||||
print('mtree %s, rev %d, weight %d' % (
|
||||
mroot.addr(), mroot.rev, mweight))
|
||||
@@ -1421,7 +1423,7 @@ def main(disk, mroots=None, *,
|
||||
print('{%s}: %s%s%s' % (
|
||||
','.join('%04x' % block
|
||||
for block in it.chain([mroot.block],
|
||||
mroot.other_blocks)),
|
||||
mroot.redund_blocks)),
|
||||
'\x1b[31m' if color else '',
|
||||
'(corrupted mroot %s)' % mroot.addr(),
|
||||
'\x1b[m' if color else ''))
|
||||
@@ -1456,7 +1458,7 @@ def main(disk, mroots=None, *,
|
||||
print('{%s}: %s%s%s' % (
|
||||
','.join('%04x' % block
|
||||
for block in it.chain([mdir.block],
|
||||
mdir.other_blocks)),
|
||||
mdir.redund_blocks)),
|
||||
'\x1b[31m' if color else '',
|
||||
'(corrupted mdir %s)' % mdir.addr(),
|
||||
'\x1b[m' if color else ''))
|
||||
@@ -1553,7 +1555,7 @@ def main(disk, mroots=None, *,
|
||||
print('{%s}: %*s%s%s%s' % (
|
||||
','.join('%04x' % block
|
||||
for block in it.chain([mdir_.block],
|
||||
mdir_.other_blocks)),
|
||||
mdir_.redund_blocks)),
|
||||
t_width, '',
|
||||
'\x1b[31m' if color else '',
|
||||
'(corrupted mdir %s)' % mdir_.addr(),
|
||||
@@ -1619,7 +1621,9 @@ if __name__ == "__main__":
|
||||
help="Show the underlying B-tree.")
|
||||
parser.add_argument(
|
||||
'-Z', '--depth',
|
||||
nargs='?',
|
||||
type=lambda x: int(x, 0),
|
||||
const=0,
|
||||
help="Depth of tree to show.")
|
||||
parser.add_argument(
|
||||
'-e', '--error-on-corrupt',
|
||||
|
||||
Reference in New Issue
Block a user