Файловые системы в Linux

Загрузить архив:
Файл: ref-24374.zip (28kb [zip], Скачиваний: 83) скачать

Министерство образования и науки Российской Федерации

Магнитогорский государственный технический университет
им Г. И. Носова

Кафедра вычислительной техники и прикладной математики

Индивидуальная работа
по дисциплине: «Вычислительные машины, системы и сети»
Тема работы: «Файловые системы в Linux»

Выполнил: студент гр.АМ-03-1 Нуртаева Д. Н.

Проверил: Ильина Е. А.

Нуров Х. Х.

Магнитогорск 2005
Содержание

TOC o "1-3" h z u Введение_ PAGEREF _Toc122001961 h 2

Основная часть_ PAGEREF _Toc122001962 h 2

1 Файловые системы, поддерживаемые Linux_ PAGEREF _Toc122001963 h 2

2 Опции подключения_ PAGEREF _Toc122001964 h 2

3 Структура файловой иерархии_ PAGEREF _Toc122001965 h 2

3.1 Каталог /bin_ PAGEREF _Toc122001966 h 2

3.2 Каталог /boot PAGEREF _Toc122001967 h 2

3.3 Каталог /dev_ PAGEREF _Toc122001968 h 2

3.4 Каталог /etc PAGEREF _Toc122001969 h 2

3.5 Каталог /home PAGEREF _Toc122001970 h 2

3.6 Каталог /lib_ PAGEREF _Toc122001971 h 2

3.7 Каталог /mnt PAGEREF _Toc122001972 h 2

3.8 Каталог /opt PAGEREF _Toc122001973 h 2

3.9 Каталог /root PAGEREF _Toc122001974 h 2

3.10 Каталог /sbin_ PAGEREF _Toc122001975 h 2

3.11 Каталог /tmp_ PAGEREF _Toc122001976 h 2

3.12 Каталоговая структура /usr PAGEREF _Toc122001977 h 2

3.13 Каталоговая структура /var PAGEREF _Toc122001978 h 2

Заключение_ PAGEREF _Toc122001979 h 2

Cписок использованных источников_ PAGEREF _Toc122001980 h 2


Введение

Несмотря на большое количество поддерживаемых файловых систем, большая часть дистрибутивов базируются на единой в системе ext2/ext3. Иногда в качестве опции предлагается использование ReiserFS, но также на общесистемном уровне. При этом не учитываются достоинства и недостатки конкретных систем, хотя, например ReiserFS ведет себя лучше на мелких файлах, а XFS – на крупных. Также у каждой файловой системы есть свои опции. Было бы неплохо пользовательские домашние каталоги подключать с nosuid,nodev, так как ни устройств ни системных файлов там быть не должно.

С другой стороны благодаря стандартизации файловой иерархии в UNIX–подобных системах можно однозначно определять тип файлов в определенный каталог. Например, в /usr/include будет много мелких неизменяющихся текстовых файлов, а в /var/log, наоборот часто меняющиеся файлы. Значит, для максимальной производительности нужно для разных каталогов выбирать разные файловые системы.


Основная часть

1 Файловые системы, поддерживаемые Linux

Linux поддерживает очень много файловых систем, в том числе FAT(32), HPFS, UFS и многие другие, но в качестве рабочих файловых систем рекомендуется использовать только ext2, ext3, ReiserFS, XFS, а также специализированные файловые системы: devfs, tmpfs, proc, devpts, romfs.

ext2 – стандартная система Linux c ядром 2.2 и более старых. Не поддерживает журналирование, но является достаточно устойчивой, наиболее совместимой и не очень требовательна к ресурсам.

ext3 – фактически ext2 с журналом. Метаданные журналируются всегда.

ReiserFS – файловая система, разработанная Hans Reiser. Основное ее преимущество: быстрая работа с большим количество маленьких файлов, а также их более компактное хранение. В качестве недостатка можно упомянуть несовместимость ее версий, а также отсутствие поддержки квот без дополнительных патчей. Также следует помнить, что не во всех rescue дисках есть поддержка этой файловой системы, поэтому нежелательно ее использование в корневом разделе.

XFS – файловая система от SGI. В ней есть несколько очень полезных свойств. Во-первых, она сразу поддерживает ACL (права для Windows клиентов) и EA (атрибуты в OS/2). Во-вторых она лучше всех работает с большими файлами. Поэтому ее целесообразно использовать на файл-серверах в разделах, к которым дается доступ из Windows или просто хранятся multimedia данные.

devfs, devpts: файловые системы для /dev и /dev/pts соответственно. Использоваться должна либо одна, либо другая. devpts создает файлы виртуальных консолей согласно их реальному количеству, а devfs создает все файлы устройств при обращении к ним.

tmpfs: файловая система в памяти. Используется в основном для /tmp, но можно использовать и для других нужд.

romfs: файловая система только для чтения в памяти. Используется при загрузке для initrd, так как ее драйвер самый маленький.

2 Опции подключения

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

· ro – режим только чтение

· nodev – невозможность использования файлов устройств

· nosuid – отключение SUID бита

· noexec – отключение возможности выполнения программ

· noatime – не обновлять время доступа: значительно ускоряет работу

· sync – все операции выполнять синхронизировано: медленней, но надежней.

nodev, noexec, nosuid желательно использовать для повышения безопасности системы. ro используется как для повышения производительности, так и для повышения безопасности. Разумеется, для использования этих опций необходимо удостоверится, что отключаемая возможность на данном разделе не нужна. То же самое относится и к noatime.


3 Структура файловой иерархии

Структура файловой иерархии в Linux унаследована от UNIX-систем. В настоящее время эта структура стандартизована документом .

Краткое описание корневых каталогов:

· /bin – бинарные файлы, необходимые при загрузке

· /boot – статические файлы для загрузчика

· /dev – файлы устройств

· /etc – файлы настроек

· /home – домашние каталоги

· /lib – библиотеки, необходимы для загрузки

· /media, /mnt – точки монтирования

· /opt – большие программные пакеты

· /sbin – системные бинарные файлы, необходимые при загрузке

· /srv – данные для сервисов

· /tmp – временные файлы

· /usr – вторичная иерархия

· /var – изменяемые данные

3.1 Каталог /bin

Каталог /bin содержит команды, которые могут использоваться как системным администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система, кроме корневой, еще не смонтирована (например, в однопользовательском режиме). В этом каталоге могут также содержаться команды, которые используются не напрямую пользователем, а включаются в сценарии оболочки (скрипты). Исполняемые файлы, которые не так важны, чтобы быть расположенными в каталоге /bin, должны размещаться в каталоге /usr/bin.

В /bin должны иметься следующие команды или символические ссылки на соответствующие команды:

cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, uname.

Следующие программы или символические ссылки на программы должны находиться в каталоге /bin, если только соответствующие пакеты установлены в системе:

csh, ed, tar, cpio, gzip, gunzip, zcat, netstat, ping.

В каталоге /bin не должно быть подкаталогов.

3.2 Каталог /boot

Этот каталог содержит все, что необходимо в процессе загрузки, исключая конфигурационные файлы и установщик карты загрузки (the map installer). Таким образом, в /boot хранятся данные, которые используются до того, как ядро начинает исполнять программы пользователя. Здесь же находятся резервные сохраненные копии главной загрузочной записи (master boot sectors) и другие данные, которые не подлежат прямому редактированию.

Каталог /boot может находится либо в корневой системе (файлы в нем статические), либо подключаться отдельно. Обычно она подключается отдельно в том случае, если корневая система находится в конце диска. Старые загрузчики могут некорректно работать, в таких случаях создается маленький раздел /boot в начале диска. Файловая система на нем ext2 (загрузчик может не уметь работать с другими файловыми системами). Подключается в режим ro (только чтение), чтобы не повредить файлы.

3.3 Каталог /dev

Каталог /dev – это место расположения специальных файлов устройств. На случай, если потребуется создавать файлы устройств вручную, каталог /dev должен содержать команду MAKEDEV, которая может создать файл устройства в случае необходимости.

Для каталога /dev существует 3 варианта подключения:

1.Оставить в корневом каталоге.

2.Подключить на другой файловой системе.

3.Подключить как devfs.

Согласно стандарту в корневой файловой системе должны быть утилиты, необходимые для подключения файловых систем, восстановления системы и восстановления файловых систем из архивных копий. Также прикладные программы не должны создавать файлы или каталоги в корневом каталоге. Для загрузки необходимо устройство /dev/console и должны быть дисковые устройства, но если ядро поддерживает файловую систему devfs, то возможно в любом случае подключать эту файловую систему в /dev.

Второй вариант удобен тем, что тогда можно корневую файловую систему подключать с флагом nodev. Но при этом возникает проблема монтирования файловой системы, где лежит /dev, так как для монтирования необходимо, чтобы был доступен файл устройства, которое монтируется. Поэтому хорошим вариантом является, например, монтирование dev в память (tmpfs), с последующим созданием всех устройств. Флаг монтирования noexec. Неудобство этого варианта: задержка при загрузке компьютера и затраты памяти на неиспользуемые устройства, поэтому в современных ядрах ОС Linux существует файловая система devfs, позволяющая создавать устройства и подгружать соответствующие устройства при попытке доступа к файлам устройств. Эта файловая система хранится в памяти, но для ее работы необходим сервис devfsd. Основной недостаток этого подхода: неполная совместимость devfs с старым стандартом на имена устройств.

3.4 Каталог /etc

Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы. В каталоге /etc не должно быть бинарных файлов. В соответствии со стандартом FHS этот каталог в обязательном порядке должен содержать подкаталог /opt, в котором должны размещаться подкаталоги с конфигурационными файлами отдельных пакетов и приложений. Для каждого установленного пакета

должен создаваться конфигурационный каталог /etc/opt/package.

Для запуска необходим /etc/inittab и доступ к стартовым скриптам. Но можно сделать минимальный скрипт, чтобы он подключал /etc и заставлял init перечитать /etc/inittab. Также все несколько проще при загрузке с initrd. Все, что надо – подключить /etc до того, как будет выполнен chroot. Все указанные каталоги содержат статические данные за исключением /etc/mtab. Можно либо сделать ссылку /etc/mtab -> /proc/mounts, но это не всегда удобно. Или подключить /tmp, а затем сделать /etc/mtab -> /tmp/mtab, создав предварительно /tmp/mtab с необходимыми двумя записями (для корня и для /tmp). Итак корневой каталог должен быть подключен в режиме "только чтение". Так как необходимо подключение корневого каталога любым свежесобранным ядром, кажется логичным выбрать формат файловой системы ext2. Именно ext2, а не ext3, так как все преимущества ext3 в журналировании, а писать все равно ничего не надо.

Если же /etc подключается отдельно от корневой системы, то файловая система для него должна быть ext2, а флаги монтирования: nodev, sync. Первый указывает, что в /etc не должно быть файлов устройств, а sync означает, что любые изменения файлов /etc должны немедленно записываться на диск. Это желательно, так как при аварийном восстановлении перезагрузка часто выполняется без выполнения скриптов завершения работы, вследствие чего могут быть утеряны последние изменения, которые еще не записаны на диск.

3.5 Каталог /home

В небольших системах каждый домашний каталог пользователя является одним из непосредственных подкаталогов каталога /home, таких как /home/smith, /home/torvalds, /home/operator и так далее. В больших системах (особенно когда каталоги /home являются разделяемыми между многими хостами посредством NFS) полезно объединить домашние каталоги в группы, введя подкаталоги групп такие как /home/staff, /home/guests, /home/students и так далее. Но как бы то ни было, структура домашних каталогов различается от хоста к хосту. Следовательно, никакая программа не должна полагаться на какие-то предположения о структуре домашних каталогов.

Рассмотрим как лучше использовать /home. С одной стороны, очевидно, нужны опции nodev, nosuid, так ни устройств, ни suid-файлов у пользователей быть не должно. Иногда можно также устанавливать noexec. Обычно пользователям разрешено создавать запускаемые файлы в ~/bin. Тип файловой системы также имеет смысл выбирать в зависимости от того, какие файлы хранятся у пользователей. Если много маленьких (пользователи – программисты) и не нужны квоты, то лучше ставить ReiserFS. Если крупные файлы (пользователи обрабатывают или хранят видео, музыку, архивы), то лучше XFS. Также XFS рекомендуется, если необходимо давать доступ по протоколу Samba (также известный как Windows Network Neighbourghood), так как XFS поддерживает права доступа в формате ACL, которые используются в MS Windows. Если пользователям не надо знать время доступа к файлам, можно также использовать noatime.

3.6 Каталог /lib

Каталог /lib содержит те разделяемые библиотеки, которые необходимы для загрузки системы и запуска команд, расположенных в каталогах /bin и /sbin.

Не должны располагаться в /lib разделяемые библиотеки, которые необходимы только исполняемым файлам, расположенным в /usr (таким, как бинарные файлы системы X Window).

Более одного варианта каталога /lib может существовать в системах, поддерживающих более одного формата исполняемых файлов (например, 32-х и 64-х разрядные форматы), при этом для каждого формата требуется свой отдельный вариант разделяемых библиотек (которые могут называться /lib32 и /lib64).

3.7 Каталог /mnt

Эта директория предназначена для того, чтобы системный администратор мог временно монтировать файловые системы по мере необходимости. Содержимое этого каталога индивидуально для каждой системы и не должно никаким образом влиять на работу запускаемых программ.

Этот каталог не должен использоваться программами инсталляции ПО; для создания и хранения временных файлов на этапе инсталляции должны использоваться временные каталоги, не используемые системой.

3.8 Каталог /opt

Стандарт FHS резервирует каталог /opt для установки дополнительных пакетов программного обеспечения. Предполагается, что любой пакет, который устанавливается в каталог /opt, должен размещать свои статические файлы в отдельной каталоговой структуре /opt/

, где

– название соответствующего пакета программного обеспечения.

Как правило, все данные, необходимые для поддержки функционирования пакета, должны присутствовать в каталоге /opt/

, включая файлы, копируемые в каталоги /etc/opt/

и /var/opt/

а также специально создаваемые для пакета каталоги в /opt.

Каталоги /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib и /opt/man зарезервированы для использования локальным системным администратором.

Программы, вызываемые на исполнение пользователем, должны располагаться в каталоге /opt/

/bin. Если пакет ПО содержит в своем составе страницы обычного в UNIX интерактивного руководства man, они должны устанавливаться в каталог /opt/

/man, который должен иметь такую же структуру, как и каталог /usr/share/man.

Файлы пакета, которые являются переменными (изменяемыми при выполнении стандартных операций), должны устанавливаться в /var/opt. Специфичные для хоста конфигурационные данные должны устанавливаться в /etc/opt.

Никакие файлы пакета не должны размещаться вне каталогов /opt, /var/opt и /etc/opt, кроме тех файлов, которые должны оказаться в других местах по той причине, что иначе пакет не сможет функционировать нормально. Например, файлы блокирования устройств должны располагаться в /var/lock, а файлы устройств должны располагаться в /dev.

Дистрибутивы могут устанавливать программное обеспечение в каталог /opt, но не должны модифицировать или удалять ПО, установленное местным системным администратором, без разрешения этого самого администратора.

Каталог /opt можно подключать на отдельном разделе. Как правило, файлы в этом разделе не изменяются и не требуются в экстренных случаях, поэтому лучше использовать ReiserFS или ext3 с опцией ro.

3.9 Каталог /root

Каталог /root – это домашний каталог суперпользователя. Он может быть задан разработчиком или определен при инсталляции системы, но рекомендуемое место его расположения по умолчанию – корневая файловая система.

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

3.10 Каталог /sbin

Утилиты для выполнения задач системного администрирования (и другие команды, используемые только пользователем root) размещаются в /sbin, /usr/sbin и /usr/local/sbin. Каталог /sbin содержит исполняемые файлы, необходимые для загрузки системы и ее восстановления в различных ситуациях (restoring, recovering, and/or repairing the system), не попавшие в каталог /bin.

Единственная команда, которая обязательно должна присутствовать в /sbin, это команда shutdown – команда остановки системы.

Принять решение о том, какие программы разместить в каталогах "sbin", довольно просто: если обычный пользователь (не системный администратор) когда-либо запускает программу, она должна размещаться в одном из каталогов "bin". Обычные пользователи не должны указывать каталоги sbin в списке путей, просматриваемых по умолчанию (в своей переменной PATH).

Авторы стандарта рекомендуют предоставить всем пользователям право на чтение и выполнение для всех файлов, расположенных в /sbin, кроме, может быть тех программ, для которых установлены биты setuid и setgid. Разделение каталогов /bin и /sbin делается не из соображений безопасности и не для того, чтобы лишить пользователей возможности видеть системные утилиты. Целью такого деления является установление явного различия между исполняемыми файлами, которые используются всеми, и теми утилитами, которые в основном используются для решения административных задач. С точки зрения безопасности нет никаких преимуществ в том, чтобы сделать /sbin недоступным для пользователей.

3.11 Каталог /tmp

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

После перезагрузки он обязан быть пустым, поэтому его можно размещать либо на диске, либо в памяти. noatime на него ставить нельзя, так как по нему ориентируется tmpwatch (программа для чистки /tmp от старых файлов). Если оставлять на диске, то лучше ставить на ReiserFS, так как там обычно много мелких файлов. Для монтирования в память используется файловая система tmpfs. В любом случае рекомендуется, во-первых, выносить /tmp на отдельный раздел, во-вторых, подключать с флагом noexec. Если не ставится noexec, тогда должно стоять хотя бы nosuid. И в любом случае nodev.

3.12 Каталоговая структура /usr

Каталог /usr – это второй по важности раздел файловой системы. /usr содержит разделяемые данные, предназначенные только для чтения. Это означает, что /usr может быть доступен с различных FHS-совместимых хостов и права записи в него не должно быть. Любая информация, которая является специфичной для конкретного хоста или может изменяться со временем, должна записываться в другое место.

Структура /usr

· /usr/bin – бинарные файлы

· /usr/include – заголовочные файлы для C

· /usr/lib – библиотеки

· /usr/local – локальная иерархия (структура как у /usr)

· /usr/sbin – системные бинарные файлы

· /usr/share – данные независимые от архитектуры

/usr – это обычно достаточно большой раздел, который, как правило, делается с таким расчетом, чтобы его можно было использовать на нескольких однотипных машинах. Поэтому его можно монтировать только для чтения. Но в этом случае нужно отдельно подмонтировать /usr/local (хотя бы из тех соображений, что в нем устанавливаются программы нужные только на одной машине).

/usr/local монтируется с теми же параметрами, что и /usr.

3.13 Каталоговая структура /var

Каталог /var содержит файлы с изменяющимися данными. В их число входят каталоги и файлы спулинга, данные об администрировании и логировании, временные файлы.

Некоторые части каталоговой структуры /var не являются разделяемыми между разными системами. К ним относятся /var/log, /var/lock и /var/run. Другие части могут быть разделяемыми, например, /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news.

Структура каталогов /var определяется в стандарте FHS с той целью, чтобы сделать возможным монтирование каталога /usr в режиме только для чтения. Все, что записывается на диск в процессе выполнения системных операций (в противоположность процессам инсталляции и поддержки программного обеспечения), должно размещаться в каталоге /var.

На весь раздел лучше ставить ReiserFS, желательно с флагом noexec, или хотя бы nosuid. Обычно можно использовать noatime, но не всегда.

Каталог /var/log предназначен для хранения журналов сообщений. Его обязательно следует размещать на отдельном разделе, так как при сбоях и DoS атаках он может переполняться, а это не должно мешать работе всей операционной системы. Для него наилучшим решением будет ReiserFS с опциями noexec, nodev, noatime.

В каталоге /var/spool/mail хранится почта пользователей. На него рекомендуется ставить ext3 с data=journal, noatime, noexec, nodev и включенными квотами.

/var/cache – кэш прокси. Тут много мелких файлов, поэтому ReiserFS с noexec, nodev, noatime.

/var/tmp – временные файлы, нужные после перезагрузки. Из тех же соображений, что и для /tmp выбираем ReiserFS с опциями noexec, nodev, noatime.


Заключение

Таким образом, для максимальной производительности Linux следует для разных каталогов выбирать разные файловые системы. Файловую систему ext2 лучше устанавливать в каталоги /boot и /etc; ext3 – в каталоги /opt и /var/spool/mail; ReiserFS – в каталоги /home, /tmp, /var, /var/log, /var/cache, /var/tmp и /opt;XFS – в каталог /home. devfs, devpts – файловые системы для каталогов /dev и /dev/pts соответственно. tmpfs используется в основном для /tmp. Также следует указывать соответствующие опции: ro, nodev, nosuid, noexec, noatime, sync.

Разумеется возникает вопрос как лучше разместить такое количество файловых систем на жестком диске. Можно создавать файловые системы в файлах. Делается это при помощи команды

mount /fs.img /mnt -o loop,

где fs.img – файл с этой файловой системой, а /mnt – место подключения. Очевидно, что доступ к файловым системам с этими файлами должен быть достаточным для установки нужных прав на файловую систему. То есть нельзя подключить файловую систему с полным доступом, если права доступа к файлу только на чтение. В качестве файловой системы для хранилища этих файлов лучше всего выбрать XFS, так как файлы очень большие.


Cписок использованных источников

1.Академия Корпоративных Систем – Информационные ресурсы. – Электрон. текстовые данные (139267 bytes) – Режим доступа: http://a–sys.ru/Articles/Article.aspx?ID=51. Tuesday, 8 November 2005 10:47:04.

2.Виртуальная энциклопедия "LINUX по русски".– Электрон. текстовые данные (128952 bytes) – Режим доступа: http://rus–linux.net. Tuesday, 8 November 2005 10:51:47.