- Администрирование систем Linux. Файловые системы
- Глава 6. Файловые системы
- 6.1. Информация о файловых системах
- 6.2. Часто используемые файловые системы
- 6.3. Создание файловой системы в разделе
- 6.4. Настройка файловой системы
- 6.5. Проверка файловой системы
- 6.6. Практическое задание: файловые системы
- 6.7. Корректная процедура выполнения практического задания: файловые системы
- VFAT¶
- USING VFAT¶
- VFAT MOUNT OPTIONS¶
- LIMITATION¶
- TODO¶
- POSSIBLE PROBLEMS¶
- TEST SUITE¶
- NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM¶
Администрирование систем Linux. Файловые системы
Глава 6. Файловые системы
После того, как вы закончите разделение жесткого диска на разделы, вы сможете создать файловую систему в каждом из созданных разделов.
В данной главе используются разделы жесткого диска , созданные в предыдущей главе, причем сама глава содержит информацию, необходимую для подготовки к чтению следующей главы, в которой мы будем монтировать созданные файловые системы.
6.1. Информация о файловых системах
Файловая система является способом организации файлов в рамках вашего раздела жесткого диска. Помимо сохранения данных в рамках файлов файловые системы обычно позволяют использовать директории и механизм контроля доступа , кроме того, они сохраняют метаданные, относящиеся к файлам, такие, как метки времени доступа и модификации, а также данные о владельце.
Ограничения имен файлов (максимальная длина, набор допустимых символов, ) определяются типом выбранной вами файловой системы. Директории обычно реализуются с помощью файлов специального типа и вам предстоит разобраться в вопросах их реализации! Механизм доступа к файлам оперирует идентификаторами пользователей, владеющих файлами (а также идентификаторами групп пользователей, владеющих файлами и учитывает членство пользователей в группах) с учетом одного или большего количества списков контроля доступа.
6.1.1. Страница руководства man fs
Страница руководства, посвященной файловым системам, может быть открыта с помощью команды man fs .
6.1.2. Файл /proc/filesystems
Ядро Linux проинформирует вас о загруженных на данный момент драйверах файловых систем с помощью файла /proc/filesystems .
6.1.3. Файл /etc/filesystems
Файл /etc/filesystems содержит список автоматически определенных файловых систем (на случай использования утилиты mount без параметра -t ).
Информация о данном файле содержится на странице руководства, которая может быть открыта с помощью команды man mount .
6.2. Часто используемые файловые системы
6.2.1. Файловые системы ext2 и ext3
В прошлом наиболее часто используемой файловой системой в Linux была файловая система ext2 («вторая расширенная файловая система»). Недостаток данной файловой системы заключался в значительных затратах времени на ее проверку.
Впоследствии на большинстве машин, работающих под управлением Linux, файловая система ext2 была заменена на файловую систему ext3 . По большей части данные файловые системы идентичны, за исключением функции журналирования , которая присутствует только в файловой системе ext3.
Функция журналирования подразумевает запись всех изменений в файловой системе в первую очередь в журнал, расположенный на диске. Периодически осуществляемая синхронизация журнала с диском приводит к записи изменений в файловую систему. Функция журналирования позволяет поддерживать файловую систему в корректном состоянии, поэтому вам не придется осуществлять полную проверку файловой системы после некорректного выключения компьютера или проблем с питанием.
6.2.2. Создание файловых систем ext2 и ext3
Вы можете создать данные файловые системы с помощью утилит /sbin/mkfs и /sbin/mke2fs . Используйте команду mke2fs -j для создания файловой системы ext3.
Также вы можете преобразовать файловую систему ext2 в ext3 с помощью команды tune2fs -j . При этом вы можете смонтировать файловую систему ext3 как ext2, но в этом случае вы потеряете функцию журналирования. Не забывайте о необходимости выполнения команды mkinitrd в том случае, если устройство с данной файловой системой должно использоваться в процессе загрузки системы.
6.2.3. Файловая система ext4
Новейшим воплощением расширенной файловой системы является файловая система ext4 , код для поддержки которой включен в состав ядра Linux в 2008 году. Файловая система ext4 поддерживает файлы большего размера (до 16 терабайт), а также позволяет создавать файловые системы на разделах больших размеров, чем в случае файловой системы ext3 (кроме того, она предоставляет множество дополнительных возможностей).
Процесс разработки данной файловой системы начался с доработки файловой системы ext3 с целью полной поддержки 64-битных операций. После того, как выяснилось, что в код должны быть внесены значительные изменения, разработчики приняли решение о присвоении созданной в итоге файловой системе имени ext4 .
6.2.4. Файловая система xfs
Файловая система xfs используется по умолчанию в дистрибутиве Redhat Enterprise Linux 7. Это хорошо масштабируемая высокопроизводительная файловая система.
Файловая система xfs была создана специально для операционной системы Irix и в течение нескольких лет также использовалась в операционной системе FreeBSD. Она поддерживается ядром Linux, но редко используется в дистрибутивах, не имеющих отношения к дистрибутивам Redhat/CentOS.
6.2.5. Файловая система vfat
Файловая система vfat существует в нескольких форматах: fat12 для дискет, fat16 для операционной системы ms-dos и fat32 для поддержки дисков большего объема. Реализация файловой системы vfat из состава ядра Linux поддерживает все упомянутые форматы, но при этом в данной реализации отсутствует поддержка ряда возможностей, таких, как механизм контроля доступа и ссылки на файлы. Диски с файловой системой fat могут читаться средствами любой операционной системы и широко используются в цифровых камерах и накопителях с интерфейсом USB, причем данная файловая система очень удобна для осуществления обмена данными между операционными системами, установленными на компьютере домашнего пользователя.
6.2.6. Файловая система iso 9660
Файловая система iso 9660 является стандартной файловой системой для оптических дисков CD-ROM. Высока вероятность того, что вы также встретите данную файловую систему на вашем жестком диске в форме образов дисков CD-ROM (которые обычно имеют расширение .iso). Стандарт iso 9660 ограничивает длину имен файлов форматом 8.3. Это ограничение было воспринято негативно в мире Unix, в результате чего в стандарт было добавлено расширение Rock Ridge , позволяющее использовать имена файлов длиной в 255 символов, режимы доступа и идентификаторы владельцев файлов в стиле Unix, а также символьные ссылки. Другим расширением для стандарта iso 9660 являются расширение Joliet , которое добавляет возможность использования до 64 символов Unicode в именах файлов. Расширение El Torito также относится к стандарту iso 9660 и позволяет осуществлять загрузку системы с дисков CD-ROM.
6.2.7. Файловая система udf
При создании большинства оптических дисков (включая диски CD и DVD) в настоящее время используется файловая система udf , название которой расшифровывается как Universal Disk Format (универсальный дисковый формат).
6.2.8. Файловая система swap
Если принимать во внимание все детали, swap не является файловой системой. Но для использования раздела в качестве раздела подкачки он должен быть отформатирован и смонтирован как пространство для хранения данных подкачки.
6.2.9. Файловая система gfs
Кластеры на основе Linux обычно используют отдельную кластерную файловую систему, такую, как GFS, GFS2, ClusterFS,
6.2.10. Другие файловые системы.
В более старых системах Linux вы можете встретить файловую систему reiserfs . Также не исключено, что вы столкнетесь с файловой системой zfs , разработанной в компании Sun, или открытой файловой системой btrfs . Для описания возможностей последней, скорее всего, потребуется отдельная глава.
6.2.11. Файл /proc/filesystems
Файл /proc/filesystems содержит список поддерживаемых файловых систем. В момент монтировании файловой системы без явного указания ее типа утилита mount в первую очередь попытается идентифицировать файловую систему как одну из файловых систем, описанных в файле /etc/filesystems , после чего в случае необходимости попытается идентифицировать эту же файловую систему как одну из файловых систем, описанных в файле /proc/filesystems за исключением тех, для которых установлена метка nodev . В том случае, если в последней строке файла /etc/filesystems расположен только символ звездочки (*), будут использоваться оба упомянутых файла.
6.3. Создание файловой системы в разделе
На данный момент у нас в распоряжении имеется недавно созданный раздел жесткого диска. Список системных бинарных файлов, предназначенных для создания файловых систем, может быть сформирован с помощью утилиты ls.
Самое время прочитать страницы руководств утилит mkfs и mke2fs . С помощью приведенного ниже примера вы можете проследить процесс создания файловой системы ext2 в разделе, представленном файлом устройства /dev/sdb1. В реальной жизни вам также могут понадобиться такие параметры данной утилиты, как -m0 и -j.
6.4. Настройка файловой системы
Вы можете использовать утилиту tune2fs для вывода списка параметров файловой системы и установки их значений. В первом примере показана методика вывода информации о зарезервированном для пользователя root пространстве в рамках раздела (текущее значение равно пяти процентам от общего размера раздела).
А в примере ниже данное значение увеличивается до 10 процентов от общего размера раздела. Вы можете использовать утилиту tune2fs в процессе эксплуатации файловой системы, даже в том случае, если данная файловая система содержит корневую директорию (как в примере ниже).
6.5. Проверка файловой системы
Команда fsck позволяет задействовать утилиту-обертку, используемую для вызова утилит, осуществляющих проверку файловых систем.
Значение из последнего столбца файла /etc/fstab используется в качестве флага проверки файловой системы в процессе загрузки операционной системы.
Проверка смонтированной файловой системы в ручном режиме приведет к выводу предупреждения и завершению работы утилиты fsck.
Но после размонтирования файловой системы ext2 утилиты fsck и e2fsck могут успешно использоваться для ее проверки.
6.6. Практическое задание: файловые системы
1. Выведите список файловых систем, известных вашей операционной системе.
2. Создайте файловую систему ext2 в разделе размером в 200 МБ.
3. Создайте файловую систему ext3 в одном из логических разделов размером в 300 МБ.
4. Создайте файловую систему ext4 в разделе размером в 400 МБ.
5. Установите размер резервируемого пространства для пользователя root в разделе с файловой системой ext3 равным 0 процентов от общего размера раздела.
6. Проверьте корректность выполненных действий с помощью утилит fdisk и df .
7. Выполните проверки всех недавно созданных файловых систем.
6.7. Корректная процедура выполнения практического задания: файловые системы
1. Выведите список файловых систем, известных вашей операционной системе.
2. Создайте файловую систему ext2 в разделе размером в 200 МБ.
mke2fs /dev/sdc1 (замените sdc1 на корректное имя файла устройства, представляющего необходимый раздел жесткого диска)
3. Создайте файловую систему ext3 в одном из логических разделов размером в 300 МБ.
mke2fs -j /dev/sdb5 (замените sdb5 на корректное имя файла устройства, представляющего необходимый раздел жесткого диска)
4. Создайте файловую систему ext4 в разделе размером в 400 МБ.
mkfs.ext4 /dev/sdb1 (замените sdb1 на корректное имя файла устройства, представляющего необходимый раздел жесткого диска)
5. Установите размер резервируемого пространства для пользователя root в разделе с файловой системой ext3 равным 0 процентов от общего размера раздела.
6. Проверьте корректность выполненных действий с помощью утилит fdisk и df .
Использование утилиты mkfs (mke2fs) не должно стать причиной принципиальных различий в выводе предложенных для осуществления диагностики утилит.
В то же время, принципиальные различия проявятся в следующей главе, посвященной монтированию файловых систем.
7. Выполните проверки всех недавно созданных файловых систем.
Источник
VFAT¶
USING VFAT¶
To use the vfat filesystem, use the filesystem type вЂvfat’. i.e.:
No special partition formatter is required, вЂmkdosfs’ will work fine if you want to format from within Linux.
VFAT MOUNT OPTIONS¶
Set the owner of all files on this filesystem. The default is the uid of current process.
gid=###
Set the group of all files on this filesystem. The default is the gid of current process.
umask=###
The permission mask (for files and directories, see umask(1)). The default is the umask of current process.
dmask=###
The permission mask for the directory. The default is the umask of current process.
fmask=###
The permission mask for files. The default is the umask of current process.
allow_utime=###
This option controls the permission check of mtime/atime.
-20: If current process is in group of file’s group ID, you can change timestamp.
-2: Other users can change timestamp.
The default is set from dmask option. If the directory is writable, utime(2) is also allowed. i.e.
Normally utime(2) checks current process is owner of the file, or it has CAP_FOWNER capability. But FAT filesystem doesn’t have uid/gid on disk, so normal check is too unflexible. With this option you can relax it.
codepage=###
Sets the codepage number for converting to shortname characters on FAT filesystem. By default, FAT_DEFAULT_CODEPAGE setting is used.
iocharset=
Character set to use for converting between the encoding is used for user visible filename and 16 bit Unicode characters. Long filenames are stored on disk in Unicode format, but Unix for the most part doesn’t know how to deal with Unicode. By default, FAT_DEFAULT_IOCHARSET setting is used.
There is also an option of doing UTF-8 translations with the utf8 option.
iocharset=utf8 is not recommended. If unsure, you should consider the utf8 option instead.
UTF-8 is the filesystem safe version of Unicode that is used by the console. It can be enabled or disabled for the filesystem with this option. If вЂuni_xlate’ gets set, UTF-8 gets disabled. By default, FAT_DEFAULT_UTF8 setting is used.
uni_xlate=
Translate unhandled Unicode characters to special escaped sequences. This would let you backup and restore filenames that are created with any Unicode characters. Until Linux supports Unicode for real, this gives you an alternative. Without this option, a вЂ?’ is used when no translation is possible. The escape character is вЂ:’ because it is otherwise illegal on the vfat filesystem. The escape sequence that gets used is вЂ:’ and the four digits of hexadecimal unicode.
nonumtail=
When creating 8.3 aliases, normally the alias will end in вЂ
1’ or tilde followed by some number. If this option is set, then if the filename is “longfilename.txt” and “longfile.txt” does not currently exist in the directory, longfile.txt will be the short alias instead of longfi
usefree
Use the “free clusters” value stored on FSINFO. It will be used to determine number of free clusters without scanning disk. But it’s not used by default, because recent Windows don’t update it correctly in some case. If you are sure the “free clusters” on FSINFO is correct, by this option you can avoid scanning disk.
quiet
Stops printing certain warning messages.
check=s|r|n
Case sensitivity checking setting.
s: strict, case sensitive
r: relaxed, case insensitive
n: normal, default setting, currently case insensitive
nocase
This was deprecated for vfat. Use shortname=win95 instead.
shortname=lower|win95|winnt|mixed
Shortname display/create setting.
lower: convert to lowercase for display, emulate the Windows 95 rule for create.
win95: emulate the Windows 95 rule for display/create.
winnt: emulate the Windows NT rule for display/create.
mixed: emulate the Windows NT rule for display, emulate the Windows 95 rule for create.
Default setting is mixed .
tz=UTC
Interpret timestamps as UTC rather than local time. This option disables the conversion of timestamps between local time (as used by Windows on FAT) and UTC (which Linux uses internally). This is particularly useful when mounting devices (like digital cameras) that are set to UTC in order to avoid the pitfalls of local time.
time_offset=minutes
Set offset for conversion of timestamps from local time used by FAT to UTC. I.e. minutes will be subtracted from each timestamp to convert it to UTC used internally by Linux. This is useful when time zone set in sys_tz is not the time zone used by the filesystem. Note that this option still does not provide correct time stamps in all cases in presence of DST — time stamps in a different DST setting will be off by one hour.
showexec
If set, the execute permission bits of the file will be allowed only if the extension part of the name is .EXE, .COM, or .BAT. Not set by default.
debug
Can be set, but unused by the current implementation.
sys_immutable
If set, ATTR_SYS attribute on FAT is handled as IMMUTABLE flag on Linux. Not set by default.
flush
If set, the filesystem will try to flush to disk more early than normal. Not set by default.
rodir
FAT has the ATTR_RO (read-only) attribute. On Windows, the ATTR_RO of the directory will just be ignored, and is used only by applications as a flag (e.g. it’s set for the customized folder).
If you want to use ATTR_RO as read-only flag even for the directory, set this option.
errors=panic|continue|remount-ro
specify FAT behavior on critical errors: panic, continue without doing anything or remount the partition in read-only mode (default behavior).
discard
If set, issues discard/TRIM commands to the block device when blocks are freed. This is useful for SSD devices and sparse/thinly-provisioned LUNs.
nfs=stale_rw|nostale_ro
Enable this only if you want to export the FAT filesystem over NFS.
stale_rw: This option maintains an index (cache) of directory inodes by i_logstart which is used by the nfs-related code to improve look-ups. Full file operations (read/write) over NFS is supported but with cache eviction at NFS server, this could result in ESTALE issues.
nostale_ro: This option bases the inode number and filehandle on the on-disk location of a file in the MS-DOS directory entry. This ensures that ESTALE will not be returned after a file is evicted from the inode cache. However, it means that operations such as rename, create and unlink could cause filehandles that previously pointed at one file to point at a different file, potentially causing data corruption. For this reason, this option also mounts the filesystem readonly.
To maintain backward compatibility, ‘-o nfs’ is also accepted, defaulting to “stale_rw”.
dos1xfloppy : 0,1,yes,no,true,false
If set, use a fallback default BIOS Parameter Block configuration, determined by backing device size. These static parameters match defaults assumed by DOS 1.x for 160 kiB, 180 kiB, 320 kiB, and 360 kiB floppies and floppy images.
LIMITATION¶
The fallocated region of file is discarded at umount/evict time when using fallocate with FALLOC_FL_KEEP_SIZE. So, User should assume that fallocated region can be discarded at last close if there is memory pressure resulting in eviction of the inode from the memory. As a result, for any dependency on the fallocated region, user should make sure to recheck fallocate after reopening the file.
TODO¶
Need to get rid of the raw scanning stuff. Instead, always use a get next directory entry approach. The only thing left that uses raw scanning is the directory renaming code.
POSSIBLE PROBLEMS¶
vfat_valid_longname does not properly checked reserved names.
When a volume name is the same as a directory name in the root directory of the filesystem, the directory name sometimes shows up as an empty file.
autoconv option does not work correctly.
TEST SUITE¶
If you plan to make any modifications to the vfat filesystem, please get the test suite that comes with the vfat distribution at
This tests quite a few parts of the vfat filesystem and additional tests for new features or untested features would be appreciated.
NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM¶
This documentation was provided by Galen C. Hunt gchunt @ cs . rochester . edu and lightly annotated by Gordon Chaffee.
This document presents a very rough, technical overview of my knowledge of the extended FAT file system used in Windows NT 3.5 and Windows 95. I don’t guarantee that any of the following is correct, but it appears to be so.
The extended FAT file system is almost identical to the FAT file system used in DOS versions up to and including 6.223410239847 :-). The significant change has been the addition of long file names. These names support up to 255 characters including spaces and lower case characters as opposed to the traditional 8.3 short names.
Here is the description of the traditional FAT entry in the current Windows 95 filesystem:
The lcase field specifies if the base and/or the extension of an 8.3 name should be capitalized. This field does not seem to be used by Windows 95 but it is used by Windows NT. The case of filenames is not completely compatible from Windows NT to Windows 95. It is not completely compatible in the reverse direction, however. Filenames that fit in the 8.3 namespace and are written on Windows NT to be lowercase will show up as uppercase on Windows 95.
Note that the start and size values are actually little endian integer values. The descriptions of the fields in this structure are public knowledge and can be found elsewhere.
With the extended FAT system, Microsoft has inserted extra directory entries for any files with extended names. (Any name which legally fits within the old 8.3 encoding scheme does not have extra entries.) I call these extra entries slots. Basically, a slot is a specially formatted directory entry which holds up to 13 characters of a file’s extended name. Think of slots as additional labeling for the directory entry of the file to which they correspond. Microsoft prefers to refer to the 8.3 entry for a file as its alias and the extended slot directory entries as the file name.
The C structure for a slot directory entry follows:
If the layout of the slots looks a little odd, it’s only because of Microsoft’s efforts to maintain compatibility with old software. The slots must be disguised to prevent old software from panicking. To this end, a number of measures are taken:
The attribute byte for a slot directory entry is always set to 0x0f. This corresponds to an old directory entry with attributes of “hidden”, “system”, “read-only”, and “volume label”. Most old software will ignore any directory entries with the “volume label” bit set. Real volume label entries don’t have the other three bits set.
The starting cluster is always set to 0, an impossible value for a DOS file.
Because the extended FAT system is backward compatible, it is possible for old software to modify directory entries. Measures must be taken to ensure the validity of slots. An extended FAT system can verify that a slot does in fact belong to an 8.3 directory entry by the following:
Positioning. Slots for a file always immediately proceed their corresponding 8.3 directory entry. In addition, each slot has an id which marks its order in the extended file name. Here is a very abbreviated view of an 8.3 directory entry and its corresponding long name slots for the file “My Big File.Extension which is long”:
Note that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is or’ed with 0x40 to mark it as the last one.
Checksum. Each slot has an alias_checksum value. The checksum is calculated from the 8.3 name using the following algorithm:
If there is free space in the final slot, a Unicode NULL (0x0000) is stored after the final character. After that, all unused characters in the final slot are set to Unicode 0xFFFF.
Finally, note that the extended name is stored in Unicode. Each Unicode character takes either two or four bytes, UTF-16LE encoded.
© Copyright The kernel development community.
Источник