filesystemskernelsquashfs

squashfs filesystem index to disk block mapping


can anybody please tell how the squashfs maps the disk block numbers to file system blocks. Basically i am saying about read_blocklist() in squashfs.

Thanks, Kapil


Solution

  • The squashfs metadata for a regular file looks roughly like this:

    ===== Header
    start_block: Position of the first block in the file
    file_size: Size of the file in bytes
    ...
    ===== Block list
    size0: 32-bit header for the first block
    size1
    size2
    ...
    =====
    

    The block header contains the compressed size of the block. So we can calculate the position of any given block by adding up start_block and the sizes of all preceding blocks.

    Playing around with my pure-ruby squashfs parser might help: https://github.com/vasi/squash.rb