Определить, к какой файловой системе относится раздел

Как операционная система узнает, какую файловую систему использует раздел? Другими словами, как FAT16/32, NTFS, ext2/3 и т. д. отличаются друг от друга?


person billyswong    schedule 19.12.2008    source источник


Ответы (7)


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

Жесткие диски имеют Главную загрузочную запись, за которой следует Таблица разделов. PT содержит список разделов на этом диске. Каждая запись в этом списке содержит (среди прочего) числовое поле идентификатор системы. который указывает файловую систему разделов.

Гибкие диски и большинство USB-накопителей не имеют PT. Здесь вы должны заглянуть в сам раздел. Первый сектор раздела (известный как Загрузочный сектор) обычно содержит идентификатор системы < em>в формате, совершенно отличном от идентификатора системы в программируемом терминале. Кроме того, расположение идентификатора внутри сектора может различаться в разных файловых системах.

person Treb    schedule 19.12.2008
comment
на самом деле не знает. Есть несколько способов угадать. но ни одна ОС не использует это широко. Говорят, что в большинстве случаев. обычно менеджер загрузки монтирует раздел с информацией, которую ему также было сказано использовать. затем загружает ядро. который будет монтировать разделы с указанной файловой системой (в linux /etc/fstab) - person gcb; 24.06.2012
comment
@gcb: Если ОС указано, какую ФС использовать, откуда берется информация в /etc/fstab? Его туда записала какая-то программа, которая считывала информацию с упомянутых мною структур. - person Treb; 25.06.2012
comment
Э... на самом деле, хотя вышесказанное может быть правдой (программа, записывающая содержимое /etc/fstab), /etc/fstab на самом деле был разработан для создания вручную пользователем. Другими словами, «программа» будет следовать определенной эвристике, чтобы определить, к какой файловой системе относится каждый раздел, но она не всегда будет успешной, и пользователь должен будет исправить данные в /etc/fstab в том случае, если он Можно. Говоря об эвристике, см. мой ответ. - person Asfand Qazi; 10.10.2012
comment
Я помню, как писал свой /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);    
}

Однако это будет работать только в том случае, если файловая система «распознается» и «подключается» работающей операционной системой.

person reuben    schedule 19.12.2008

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

В таблице разделов MBR также хранится 8-битное значение, представляющее тип раздела.

person mmx    schedule 19.12.2008

Прежде всего, в таблице разделов есть байт, определяющий тип раздела. Во-вторых, каждый раздел имеет разные заголовки и структуры, поэтому при небольшом анализе это можно определить довольно точно.

person Vilx-    schedule 19.12.2008

Предположим, у вас есть MBR, тогда сведения о 4 основных разделах находятся по адресу 0x01BE. Один из шестнадцати байтов, описывающих раздел, является идентификатором типа.

Идентификатор 0x06 — это fat16, 0x0B — это FAT32, 0x07 — это NTFS, 0x82 — это раздел Linux.

Кроме того, файловые системы имеют структуры в определенных местах внутри раздела, которые могут быть обнаружены.

person Zoredache    schedule 19.12.2008

Инструменты ОС, которые имеют дело с настройкой файловых систем или их монтированием, будут использовать различные эвристики, чтобы попытаться обнаружить файловую систему, например, искать функции, которые у них есть. Например, когда инструменту «монтирования» не сообщается тип файловой системы раздела, который он предназначен для монтирования, он делает то, что описывает «справочная» страница для него:

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, для обнаружения файловых систем используются аналогичные инструменты.

person Asfand Qazi    schedule 10.10.2012
comment
Прочитайте вопрос еще раз, пожалуйста. Как операционная система знает - person billyswong; 27.11.2012

В 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

person benlumley    schedule 19.12.2008