Muitos desses limites vêm de estruturas de dados contendo campos de tamanho fixo onde uma contagem (de bytes, setores, etc.) seria armazenada.
Por exemplo, a tabela de partições do MBR (o modo como os sistemas operacionais modernos usam) tem campos de 32 bits para contagem do setor. São quatro bytes, um tamanho "conveniente" para CPUs. (O formato de particionamento GPT mais recente usa valores de 64 bits.)
O maior número que pode caber em 32 dígitos binários é 2 32 -1, ou 4294967295 em decimal. Para discos com setores de 512 bytes, isso significa 2199023255040 bytes - apenas um setor com menos de 2 TiB.
Você pode encontrar problemas semelhantes em todos os lugares - o sistema de arquivos FAT32 só pode ter até 2 clusters 32 -1 (embora um cluster no FAT possa variar de tamanho; essa é a "unidade de alocação" ao formatar) e mantenha os arquivos até 2 32 -1 bytes (4 GiB) devido ao mesmo limite de tamanho de campo.
No momento em que vários sistemas de arquivos foram criados, seu limite máximo parecia muito ridículo e "improvável que fosse um problema", e seria bastante ineficiente trabalhar com números de 64 bits ou possivelmente até 32 bits em um sistema executando o MS-DOS. (As versões anteriores do MS-DOS nem sequer suportavam pastas!)
Hoje em dia os sistemas de arquivos usam contagens de 64 bits, o que é "improvável que seja um problema" (2 64 é muito ).
Mas além disso , os sistemas de arquivos modernos mudaram muito. Em vez de tabelas de inodes estáticos ou entradas de diretório linear, elas crescem conforme o necessário e usam estruturas como árvores B +. (Estou falando de NTFS, ZFS, possivelmente XFS ...)