Многие такие ограничения исходят из структур данных, содержащих поля фиксированного размера, в которых будет храниться счетчик (байтов, секторов и т.д.).
Например, таблица разделов MBR (как ее используют современные операционные системы) имеет 32-битные поля для подсчета секторов. Это четыре байта, "удобный" размер для процессоров. (Более поздний формат разделения GPT использует 64-битные значения.)
Наибольшее число, которое может уместиться в 32 двоичных разрядах, равно 2 32 -1, или 4294967295 в десятичном виде. Для дисков с 512-байтовыми секторами это означает 2199023255040 байт - всего лишь сектор, не превышающий 2 ТиБ.
Вы можете найти похожие проблемы везде - файловая система FAT32 может иметь только до 2 32 -1 кластеров (хотя кластер в FAT может различаться по размеру; это "единица выделения", которую вы видите при форматировании) и хранить файлы до 2 32 -1 байт (4 ГиБ) из-за того же предела размера поля.
В то время, когда создавались различные файловые системы, их максимальный предел, скорее всего, казался совершенно нелепым и "маловероятным", и было бы совершенно неэффективно работать с 64-битными или, возможно, даже с 32-битными числами в работающей системе. MS-DOS. (Ранние версии MS-DOS даже не поддерживали папки!)
В настоящее время файловые системы используют 64-битные счетчики, что опять-таки "вряд ли является проблемой" (2 64 - это много).
Но кроме того, современные файловые системы сильно изменились. Вместо статических таблиц inode или линейных записей каталога они теперь растут по мере необходимости и используют такие структуры, как деревья B+. (Я говорю о NTFS, ZFS, возможно XFS ...)