Shell
user@debian:~$ touch file_ext2
user@debian:~$ sudo mke2fs -t ext2 -F -b 4096 file_ext2 1024
mke2fs 1.42.5 (29-Jul-2012)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1024 inodes, 1024 blocks
51 blocks (4.98%) reserved for the super user
First data block=0
1 block group
32768 blocks per group, 32768 fragments per group
1024 inodes per group
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
user@debian:~$
Файл исследовать не будем, а то мало ли чего, а присоединим его к блочному устройству и исследуем уже его. Найдём первой свободное устройство, которое loop*
Shell
user@debian:~$ sudo losetup -f
/dev/loop0
user@debian:~$
И к нему присоединим наш файл с файловой системой
Shell
user@debian:~$ sudo losetup /dev/loop0 file_ext2
user@debian:~$
Посмотрим, что у нас получилось. Обращаем внимание на размер блока (4096) и на количество (1) групп блоков
Shell
user@debian:~$ sudo dumpe2fs /dev/loop0
dumpe2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 0140f6df-0c40-46a7-956a-cc6de61db173
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 1024
Block count: 1024
Reserved block count: 51
Free blocks: 982
Free inodes: 1013
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 1024
Inode blocks per group: 32
Filesystem created: Wed Jan 8 15:10:18 2020
Last mount time: n/a
Last write time: Wed Jan 8 15:10:18 2020
Mount count: 0
Maximum mount count: -1
Last checked: Wed Jan 8 15:10:18 2020
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Default directory hash: half_md4
Directory Hash Seed: 065aa46a-87e4-40e2-af77-604143ee9e14
Group 0: (Blocks 0-1023)
Primary superblock at 0, Group descriptors at 1-1
Block bitmap at 2 (+2), Inode bitmap at 3 (+3)
Inode table at 4-35 (+4)
982 free blocks, 1013 free inodes, 2 directories
Free blocks: 42-1023
Free inodes: 12-1024
user@debian:~$
Теперь собственно ищем дамп таблицы дескрипторов групп блоков на утройстве /dev/loop0
Обратимся к официальной документации
http://www.nongnu.org/ext2-doc/ext2.html
И посмотрим там, где находится таблица дескрипторов групп блоков
http://www.nongnu.org/ext2-doc/ext2.html#block-group-descriptor-table
Ну то есть берём первый блок, который сразу же за суперблоком и ищем там таблицу. Размер суперблока, как и любого другого блока 4096 (см. выше). Есть ли что-нибудь на устройстве перед суперблоком?"The block group descriptor table starts on the first block following the superblock."
http://www.nongnu.org/ext2-doc/ext2.html#superblock
То есть в нашем случае на нашем устройстве /dev/loop0 есть первые 1024 байта, предназначеные для загрузчика. Потом идёт супеблок длиной 4096 байт (не элемент типа struct ext2_super_block, который по определению меньше или равен супеблоку, чтобы влезть в него, а сам суперблок!) и потом нужная нам таблица дескрипторов групп. Как-то так:"The superblock is always located at byte offset 1024 from the beginning of the file, block device or partition formatted with Ext2 and later variants (Ext3, Ext4)"
hexdump -s 5120 -n 1024 /dev/loop0
То есть пропускаем на устройстве /dev/loop0 первые 5120 байт и получаем таблицу дескрипторов групп. (Поскольку у нас группа одна, а дескриптор таблицы структура, занимающая 32 байта, можно было прочесть всего 32 байта.)
Shell
user@debian:~$ sudo hexdump -s 5120 -n 1024 /dev/loop0
0001400 0000 0000 0000 0000 0000 0000 0000 0000
*
0001800
user@debian:~$
То есть там, где должна быть структурка ext2_group_desc, описывающая одну (и единственную в нашем случае) группу блоков, там одни ноли. Я и больше групп делал, всё равно одни ноли. Грустно всё это. Почему же так? Спасибо, кто откликнется. Debian 7