Диск компьютера делится на логические сектора, то есть, физически их нет.
Каждый сектор занимает какое-то количество байт. Это количество можно посмотреть с помощью команды:
blockdev --getpbsz /dev/sdb
Также нужно знать, что в этом случае используется разметка разделов (или стиль раздела) 2-х типов. Их ещё называют форматами.
Формат задаётся при форматировании диска.
Первый, это MBR (Master Boot Record — главная загрузочная записьы). При этом максимальный размер диска это 2 терабайта.
Второй, это GPT (GUID Partition Table). А в этом формате уже максимальный размер диска будет 1 зеттабайт 512 байт. Этот формат создан для замены MBR и является частью UEFI, который пришел на замену BIOS.
Файловая система лежит, если опустить какие-либо ещё моменты о структуре компьютеров, поверх всех секторов диска, которая в свою очередь делиться тоже на сектора, но они никак не связаны с секторами диска, то есть, могут иметь совершенно другой размер. Чтобы узнать размеры и другие параметры секторов файловой системы, нужно ввести команду (Block size это как раз будет размер одного блока файловой системы):
tune2fs -l /dev/sdb1
Когда нам нужно найти какой-то файл, как узнать какой сектор или сектора он занимает, чтобы его найти?
Вот здесь как раз и пооможет inode.
Inode — это как раз один блок файловой системы. Один файл — один inode.
В системах типа ext2 у нас табличная система. Саму “таблицу” можно посмотреть через утилиту tune2fs, которая упомянута выше.
В выводе команды, использованной выше, можно увидеть параметр Inode count. Это будет количество доступных разделов файловой системы.
По каким причинам может возникнуть ошибка записи на диск?
Например, из-за того, что нехватит блоков в файловой системе, как раз этих самых inode.
Что можно сделать с программной стороны?
В системах Ext2, Ext3, Ext4 есть такая опция как Reserved block count, которую можно увидеть в выводе в консоль утилиты tune2fs (упомянутая выше). Это как раз блоки файловой системы, которые доступны пользователю root, но другим пользователям недоступны все эти блоки. Для временного решения проблемы сбоев можно сделать их доступными всех пользователям. Пример команды для этой цели:
tune2fs -m 0 /dev/foo
Пользователям не root не доступно для записи 5% дискового пространства.
Затем есть другая причина почему может быть ошибка, это inode закончились, а пространство осталось. Например, очень много файлов на диске, которые меньше блока файловой системы.
Чтобы просто посмотреть или проанализировать, берём утилиту df и делаем две команды:
df -hi
df -h
Полезные утилиты для работы с диском:
- debugfs
