xref: /freebsd/tools/diag/prtblknos/README (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
116c0c8eeSKirk McKusick
216c0c8eeSKirk McKusickThis is a little C-program that can be used to print out the list
316c0c8eeSKirk McKusickof blocks used by a requested list of inodes.
416c0c8eeSKirk McKusick
516c0c8eeSKirk McKusickFor example, to list the blocks referenced by your kernel:
616c0c8eeSKirk McKusick
716c0c8eeSKirk McKusickguest_12 % df /
816c0c8eeSKirk McKusickFilesystem      1K-blocks     Used   Avail Capacity  Mounted on
916c0c8eeSKirk McKusick/dev/gpt/rootfs  20307196 10707336 7975288    57%    /
1016c0c8eeSKirk McKusick
1116c0c8eeSKirk McKusickguest_12 % ls -i /boot/kernel/kernel
1216c0c8eeSKirk McKusick160603 /boot/kernel/kernel
1316c0c8eeSKirk McKusick
1416c0c8eeSKirk McKusickguest_12 % ./prtblknos /dev/gpt/rootfs 160603
1516c0c8eeSKirk McKusick160603:	lbn 0-7 blkno 3217584-3217647
1616c0c8eeSKirk McKusick	lbn 8-11 blkno 3217864-3217895 distance 216
1716c0c8eeSKirk McKusickFirst-level indirect, blkno 3217896-3217903 distance 0
1816c0c8eeSKirk McKusick	lbn 12-19 blkno 3217904-3217967 distance 8
1916c0c8eeSKirk McKusick	lbn 20-75 blkno 3251816-3252263 distance 33848
2016c0c8eeSKirk McKusick	lbn 76-83 blkno 3252368-3252431 distance 104
2116c0c8eeSKirk McKusick	lbn 84-91 blkno 3252464-3252527 distance 32
2216c0c8eeSKirk McKusick	lbn 92-852 blkno 3252896-3258983 distance 368
2316c0c8eeSKirk McKusick
2416c0c8eeSKirk McKusickEach contiguous range of blocks is printed on a line.
2516c0c8eeSKirk McKusickThe distance metric is the size of the gap from the end of the
2616c0c8eeSKirk McKusickprevious set of blocks to the beginning of the next set of blocks.
2716c0c8eeSKirk McKusickShort distances are desirable.
2816c0c8eeSKirk McKusick
29*c97f1d3fSKirk McKusickThe logical block numbers (lbn above) describe filesystem-block
30*c97f1d3fSKirk McKusicksize blocks which by today's default is 32Kb.
31*c97f1d3fSKirk McKusick
32*c97f1d3fSKirk McKusickThe physical block numbers (blkno above) describe the smallest piece
33*c97f1d3fSKirk McKusickof disk space that an inode can reference which is a filesystem
34*c97f1d3fSKirk McKusickfragment. Since the default size for fragments today is 4Kb, the
35*c97f1d3fSKirk McKusickphysical block numbers reference 4Kb blocks. The distances listed
36*c97f1d3fSKirk McKusickabove are also in physical block size units. Thus a distance of 8
37*c97f1d3fSKirk McKusickmeans a separation of just one 32Kb block. For example lbn 11, ends
38*c97f1d3fSKirk McKusickat 3217895, the 32Kb first level indirect immediately follows it at
39*c97f1d3fSKirk McKusick3217896-3217903, and lbn 12 starts distance 8 after lbn 11 immediately
40*c97f1d3fSKirk McKusickafter the indirect block at 3217904.
41*c97f1d3fSKirk McKusick
42*c97f1d3fSKirk McKusickIf you were to create a filesystem with the fragment size equal to
43*c97f1d3fSKirk McKusickhalf the block size (say 32Kb blocks with 16Kb fragments) then the
44*c97f1d3fSKirk McKusickphysical block numbers listed would be 16Kb in size.
45*c97f1d3fSKirk McKusick
4616c0c8eeSKirk McKusick	Marshall Kirk McKusick
4716c0c8eeSKirk McKusick	January 19, 2018
48