Solution (source code)

= Solution

In the traditional <Unix> <file system> model, a regular <file> consists of <file metadata> in an <inode> and an ordered sequence of <bytes> stored in <file data blocks>. The <inode> records the type, owner, permissions, length, timestamps and <hard link> count, together with the information locating its <file data blocks>. A small <file> can use direct <file data block> addresses; a larger <file> can additionally use <indirect block pointers>, whose blocks contain further addresses rather than user data. The final <file data block> need not be completely occupied.

An <inode number> identifies an entry in the <inode table> of this <file system>; it identifies the <file>, rather than a particular piece of its contents. A <disk block number> identifies a fixed-size storage region on the volume. Resolving an <inode number> first obtains the <inode>; following its direct or <indirect block pointers> then finds the required <file data block>. The two numbers belong to different address spaces, even though the <inode table> itself occupies disk blocks.
$$
\boxed{\text{inode number: file identity; block number: storage location.}}
$$