На протяжении многих лет было несколько вариантов «FAT16» с разными ограничениями, но давайте рассмотрим версию, которая сохранилась от «compaq DOS 3.31» до windows 95.
Объемы FAT разделены на кластеры. Каждый кластер состоит из двух секторов. Количество секторов на кластер в FAT16 сохраняется как 8-битное число со знаком. Таким образом, максимально возможные сектора на кластер - 64.
Номера кластеров были сохранены как 16-битное значение без знака. Ограничение общего количества кластеров до 65536. Умножьте это на максимальное число секторов на кластеры, и вы получите ограничение в 4194304 сектора.
(Логический) размер сектора жестких дисков составляет 512 байт. Умножьте это на ограничение на число секторов, упомянутых выше, и вы получите свой лимит 2 ГБ. В принципе, среда с большими размерами сектора может поддерживать больший объем FAT16, но я не думаю, что это произошло на практике.
Windows NT изменила интерпретацию поля «секторы на кластер» на 8-битный без знака. Это позволило разделить 4GiB FAT16 с секторами 512 байт (и теоретически больше на дисках с большими секторами). В AIUI windows 98 добавлена поддержка чтения и записи таких разделов, но он не мог их создать, а дисковые утилиты не могли их починить.
Конечно, было бы возможно сделать относительно небольшие изменения в формате файловой системы для поддержки больших кластеров и, следовательно, больших объемов. Однако MS решила пойти на более радикальный вариант перехода на 32-битный кластерный индекс с Windows 95 OSR2, производящей FAT32.
Я считаю, что причиной перехода на более радикальный вариант была космическая эффективность. Учитывая типичные размеры файлов в то время, кластеры размером 32 кБ уже были довольно расточительными, а более крупные были бы даже такими.