С логической точки зрения ФС образуется за счёт двух элементов: массива индексных дескрипторов и системы каталогов, связывающих имена файлов с номерами индексных дескрипторов. Индексные дескрипторы хранят метаинформацию файлов и ссылки на блоки данных файлов.  Каталоги объединены в дерево с двунаправленной системой ссылок между узлами.
Дисковое пространство в ext2fs разбивается на логические блоки размером 1, 2 или 4 КБ. Блоки используются под хранение нескольких служебных структур, массива индексных дескрипторов и, собственно, под хранение содержимого файлов.  Для оптимизации времени доступа блоки поделены на группы. По возможности индексный дескриптор файла и его данные размещаются в пределах одной группы, что снижает время на перемещение головок по диску.
В одном из начальных блоков (со смещением 1024 байта от начала раздела) размещается Суперблок – структура данных размером 1024 байта, описывающая основные настраиваемые параметры ФС. В этих параметрах задаётся размер блока, количество индексных дескрипторов, количество блоков, отведенных под хранение данных и т.п. Размер блока влияет на потери дискового пространства в "хвостах" файлов (больше блок – больше потери) и на максимальную длину файла (больше блок – больше максимальная длина). Количество индексных дескрипторов определяет максимальное число объектов, которые могут быть размещены в данной ФС.
Для повышения надёжности Суперблок дублируется в начале каждой группы. За ним следует массив дескрипторов групп, который также дублируется во всех группах. Далее идут битовые карты свободных индексных дескрипторов и свободных блоков данных группы. Эти битовые карты  нужны для быстрого создания файлов и быстрого выделения блоков хранения данных. Далее находятся область хранения индексных дескрипторов и область хранения данных.
Структура группы блоков в ext2fs
  | Суперблок | Массив дескрипторов групп | Карта свободных блоков | Карта свободных индексных дескрипторов | Массив индексных дескрипторов | Блоки данных | 
  | Дублируются во всех группах блоков для надёжности |  | Данные, индивидуальные для каждой группы |  |  |  | 
Суперблок
  | поле | описание | 
  | s_inodes_count | Число индексных дескрипторов во всей ФС | 
  | s_blocks_count | Число блоков, отведённых под ФС | 
  | s_r_blocks_count | Число зарезервированных блоков данных | 
  | s_free_blocks_count | Число свободных блоков данных | 
  | s_free_inodes_count | Число свободных индексных дескрипторов | 
  | s_first_data_block | Адрес первого блока данных | 
  | s_log_block_size | Размер блока | 
  | s_log_frag_size |  | 
  | s_blocks_per_group | Число блоков в группе | 
  | s_frags_per_group |  | 
  | s_inodes_per_group | Число индексных дескрипторов в группе | 
  | s_mtime | Время последнего монтирования | 
  | s_wtime | Время последней записи | 
  | s_mnt_count | Количество монтирований | 
  | s_max_mnt_count | Количество монтирований без проверки на ошибки | 
  | s_magic | Магическое число ex2fs | 
  | s_state | Флаг "чистого" выключения | 
  | .... |  | 
  | s_reserved[235] | дополнение до 1024 байтов | 
Дескриптор группы
  | поле | описание | 
  | bg_block_bitmap | Адрес битовой карты свободных блоков | 
  | bg_inode_bitmap | Адрес битовой карты свободных индексных дескрипторов | 
  | bg_inode_table | Адрес таблицы  индексных дескрипторов | 
  | bg_free_blocks_count | Количество свободных блоков в группе | 
  | bg_free_inodes_count | Количество свободных  индексных дескрипторов в группе | 
  | bg_used_dirs_count | Количество каталогов группе (для fsck, например) | 
  | bg_pad | выравнивание до удобного размера | 
Поля  индексного дескриптора
  | поле | описание | 
  | i_mode | Тип, suid, sgid, sticky, права доступа | 
  | i_uid | Владелец | 
  | i_size | Размер | 
  | i_atime | Access time | 
  | i_ctime | Creation time | 
  | i_mtime | Modification time | 
  | i_dtime | Deletion Time | 
  | i_gid | Группа | 
  | i_links_count | Число имён | 
  | i_blocks | Число занимаемых блоков | 
  | i_flags | Флаги | 
  | i_reserved1 |  | 
  | i_block[15] | Указатели на блоки данных | 
  | i_version | Версия (для NFS) | 
  | i_file_acl | File ACL | 
  | i_dir_acl | Directory ACL | 
  | .... | прочее, дополненное до удобного размера | 
Указатели на блоки данных
  | номер | описание | 
  | 1 | адрес блока или 0 | 
  | ... | ... | 
  | 12 | адрес блока или 0 | 
  | 13 | адрес блока косвенной адресации или 0 | 
  | 14 | адрес блока двойной косвенной адресации или 0 | 
  | 15 | адрес блока тройной косвенной адресации или 0 | 
Блоки адресуются с единицы. Ноль в указателе означает, что блок не выделялся.
Зарезервированные номера  индексных дескрипторов
  | идентификатор | номер | Описание | 
  | EXT2_BAD_INO | 1 | Сбойные блоки | 
  | EXT2_ROOT_INO | 2 | Корневой каталог | 
  | EXT2_ACL_IDX_INO | 3 | ACL (списки доступа) | 
  | EXT2_ACL_DATA_INO | 4 | ACL  (списки доступа) | 
  | EXT2_BOOT_LOADER_INO | 5 | Загрузчик | 
  | EXT2_UNDEL_DIR_INO | 6 | Каталог для восстановления стёртых файлов | 
  | EXT2_FIRST_INO | 11 | Первый нормальный inode. Часто занят каталогом lost+found | 
Запись в каталоге
  | поле | описание | 
  | inode | Номер  индексного дескриптора | 
  | rec_len | Длина записи | 
  | name_len | Длина имени файла | 
  | name | Имя файла (переменной длины до 255 символов) | 
Простая программа для проверки максимальной длины имени
 F=""
 for I in {1..1024};do
      F=${F}Z
      if touch $F; then
          rm $F
      else
          echo "Maximum name length="$((I-1))
          break
      fi
  done  2>/dev/null
Ссылки
http://uranus.chrysocome.net/explore2fs/es2fs.htm