Как операционная система узнает, какую файловую систему использует раздел? Другими словами, как FAT16/32, NTFS, ext2/3 и т. д. отличаются друг от друга?
Определить, к какой файловой системе относится раздел
Ответы (7)
Есть несколько способов, в зависимости от типа оборудования.
Жесткие диски имеют Главную загрузочную запись, за которой следует Таблица разделов. PT содержит список разделов на этом диске. Каждая запись в этом списке содержит (среди прочего) числовое поле идентификатор системы. который указывает файловую систему разделов.
Гибкие диски и большинство USB-накопителей не имеют PT. Здесь вы должны заглянуть в сам раздел. Первый сектор раздела (известный как Загрузочный сектор) обычно содержит идентификатор системы < em>в формате, совершенно отличном от идентификатора системы в программируемом терминале. Кроме того, расположение идентификатора внутри сектора может различаться в разных файловых системах.
/etc/fstab
? Его туда записала какая-то программа, которая считывала информацию с упомянутых мною структур.
- person Treb; 25.06.2012
/etc/fstab
вручную в старые времена Linux 2.2, но современные дистрибутивы Linux, как правило, распознают разделы и пишут fstab
за вас.
- person Fred Foo; 28.11.2012
Если вы используете Win32 API в Windows, вы можете вызвать GetVolumeInformation (http://msdn.microsoft.com/en-us/library/aa364993.aspx), чтобы определить тип файловой системы на данном смонтированном томе.
Например, если вы пытаетесь определить файловую систему, присутствующую на диске D:, вы можете вызвать:
WCHAR FSType[512];
if (GetVolumeInformationW(L"D:\\", NULL, 0, NULL, NULL, NULL, FSType, ARRAYSIZE(FSType))) {
wprintf(L"FS type = %s\n", FSType);
}
Однако это будет работать только в том случае, если файловая система «распознается» и «подключается» работающей операционной системой.
Почти каждая файловая система имеет некоторую информацию о заголовке, которая называется «суперблок». Суперблоки содержат магические числа или другую информацию о типе файловой системы.
В таблице разделов MBR также хранится 8-битное значение, представляющее тип раздела.
Прежде всего, в таблице разделов есть байт, определяющий тип раздела. Во-вторых, каждый раздел имеет разные заголовки и структуры, поэтому при небольшом анализе это можно определить довольно точно.
Предположим, у вас есть MBR, тогда сведения о 4 основных разделах находятся по адресу 0x01BE. Один из шестнадцати байтов, описывающих раздел, является идентификатором типа.
Идентификатор 0x06 — это fat16, 0x0B — это FAT32, 0x07 — это NTFS, 0x82 — это раздел Linux.
Кроме того, файловые системы имеют структуры в определенных местах внутри раздела, которые могут быть обнаружены.
Инструменты ОС, которые имеют дело с настройкой файловых систем или их монтированием, будут использовать различные эвристики, чтобы попытаться обнаружить файловую систему, например, искать функции, которые у них есть. Например, когда инструменту «монтирования» не сообщается тип файловой системы раздела, который он предназначен для монтирования, он делает то, что описывает «справочная» страница для него:
If no -t option is given, or if the auto type is specified, mount will
try to guess the desired type. Mount uses the blkid library for guessing
the filesystem type; if that does not turn up anything that looks familiar,
mount will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems. All of the filesystem types listed there
will be tried, except for those that are labeled "nodev" (e.g., devpts,
proc and nfs). If /etc/filesystems ends in a line with a single * only,
mount will read /proc/filesystems afterwards.
Библиотека blkid и инструмент 'disktype', если вы дадите ему дисковое блочное устройство (например, /dev/sda) или блочное устройство раздела (например, /dev/sda1), будут использовать эвристику и обоснованные догадки, чтобы определить, что находится на этом диске. устройство. Очень полезный инструмент, особенно в среде xen, где нет диска, а есть только виртуальные разделы, поэтому вы не можете просто запросить основную загрузочную запись.
При настройке новой системы на базе Linux, такой как Ubuntu, для обнаружения файловых систем используются аналогичные инструменты.
В linux, когда вы монтируете файловую систему, вы можете передать -t ext3/ext3 и т. д. - если вы посмотрите в /etc/fstab (или эквивалент), каждый диск, вероятно, имеет свой тип fs.
Затем для автоматического выполнения этого есть суперблок/эквивалент (думаю, что типы Windows называют это чем-то другим)...
Посмотри это:
Суперблок
Каждая файловая система отличается, и они имеют тип, например, ext2, ext3 и т. д. Кроме того, каждая файловая система имеет размер, например 5 ГБ, 10 ГБ, и статус, такой как статус монтирования. Короче говоря, каждая файловая система имеет суперблок, который содержит информацию о файловой системе, такую как:
* File system type * Size * Status * Information about other metadata structures
Взято из:
http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-superblock.html