Работа с файловой системой.

Видео отсутствует

Файловая система

Структура диска.

Жесткий диск, флешка, ssd это все имеет блочную органицацию данных.

LBA (англ. Logical block addressing) — стандартизованный механизм адресации и доступа к блоку данных.

При котором системному контроллеру нет необходимости учитывать специфику накопителя (например, геометрию жёсткого диска — количество цилиндров, головок, секторов на дорожке).

Жесткий диск не умеет адресовать свое пространство побайтно, условно оно разбито на блоки.

В LBA каждому адресуемому блоку назначается уникальный номер — целое число, начиная с нуля.

Размер блока в обычных дисках = 512 байт

start page

Как видно из рисунка, блоки LBA обозначен как уровень HDD.

Просмотреть размер блока.

sudo blockdev --getpbsz /dev/sdb

Уровнем выше размечен раздел, один на весь диск (для простоты).

Чаще всего используют разметку разделов двух типов: msdos и gpt. Соответственно msdos — старый формат, поддерживающий диски до 2Tb, gpt — новый формат, способный адресовать до 1 зеттабайта 512 байтных блоков. В нашем случае имеем раздел типа msdos, как видно из рисунка, раздел при этом начинается с блока №1, нулевой же используется для MBR.

sudo tune2fs -l /dev/sdb6

В первом разделе создана файловая система ext4

Посмотреть размер блока файловой системы можно так:

tune2fs -l /dev/sdb6

start page

Файл состоит из одного или нескольких блоков файловой системы, в которых хранятся его данные. Зная имя файла, как его найти? Какие блоки читать?

Вот тут нам и пригождаются inode. В файловой системе ext2fs есть «таблица», в которой содержится информация по всем inode. Количество inode в случае с ext2fs задается при создании файловой системы.

В inode содержится нужная нам информация: список блоков файловой системы для искомого файла. Как найти номер inode для указанного файла?

Соответствие имени и номера inode содержится в директории, а директория в ext2fs — это файл особого типа, т.е. тоже имеет свой номер inode. Чтоб разорвать этот порочный круг, для корневой директории назначили «фиксированный» номер inode «2».

Смотрим содержимое inode за номером 2:

sudo debugfs /dev/sdb6
debugfs:  stat <2>

start page

Как видно нужная нам директория сидит в блоке под номером 9293.

В ней мы найдем номер нода для папки home, и так далее по цепочке, пока не увидим номер нода для запрошенного файла.

Задать вопрос, прокомментировать.