Файловая система
Работа с дисками, файловыми системами и другими блочными устройствами для Linux здорово отличается от аналогичной работы для Windows. Это опять же связано с идеологическими требованиями, с которых я начал. Корневая файловая система - та, которая предоставляет точку отсчета для всех файловых систем в Linux. Для всех файловых систем применяется так называемый механизм монтировки (я знаю, что Windows тоже монтирует файловые системы, но доступ человека к этому процессу крайне ограничен). Это означает, что любая файловая система перед работой должна быть зарегистрирована ядром. В разделе, посвященном ядру, было описано незначительное количество типов файловых систем, поддерживаемых Linux, всего их более 40. Каждая файловая система имеет свой набор параметров, которые можно менять для более эффективной работы (а иногда следует менять просто для работы). Эти параметры свои для каждой файловой системы, и некоторые из них ядро умеет определять самостоятельно. Для тех же, которые ядро не определяет, существует файл fstab. Пусть вас не обманывает его кажущаяся простота - количество параметров, которые можно в него вносить, порядка тысячи. Правда, для обычного домашнего компьютера с файловыми системами для Linux и DOS/Windows вполне можно обойтись десятком.
Поскольку пользователь не должен знать о физической структуре компьютера, то каждый раздел на жестком диске, дисководы для флоппи и CD-ROM, а также каждый стриммер, или иной носитель информации, представляется простым каталогом. Выбор этого каталога - дело администратора, но обычно следуют соглашению о том, что каждый неродной для Linux раздел находится в поддиректории директории /mnt. Для этого в ней создаются директории вроде diskc, cdrom, floppy. После монтирования файловой системы эти директории будут называться точками монтирования. Туда можно записать все что угодно, но после монтирования эти данные станут недоступными, хотя место на диске занимать будут. А потому этого делать не рекомендуется. (Существовало предложение о решении проблемы скрытой массы Галактики, как о гипотетической галактике записанной в Пространство до монтирования нашей.) Эту информацию тоже полезно внести в fstab.
#fstab |
#устройство# | точка монтирования | тип | опции | fs_freq и fs_passno |
/dev/hda3 | / | ext2 | defaults | 0 1 |
/dev/hda4 | /proc | swap | defaults | 0 2 |
/dev/hda1 | /boot | ext2 | defaults | 0 2 |
/dev/hda2 | /mnt/diskc | vfat | auto, exec, nosuid, async | 0 0 |
none | /proc | proc | defaults | 0 0 |
/dev/hdc | /mnt/cdrom | iso9660 | user, noauto, ro | 0 0 |
/dev/fd0 | /mnt/floppy | auto | user, noauto | 0 0 |
Монтирование файловой системы осуществляется либо автоматически, либо вручную командой mount. Аналогично и размонтрование после использования, для этого служит команда umount. Эта команда таже использует файл fstab и такие же параметры.
mount -t <тип> -o <опции> <устройство> <каталог>
Структура этого файла отвечает на естественные вопросы "Что?", "Куда?" и "Каким образом?". На последний вопрос отвечают столбцы со третьего по пятый. Самый интересный столбец, это столбец опций.
Общие опции
async | Ввод/вывод осуществляется асинхронно. Задано по умолчанию. |
sync | Ввод/вывод осуществляется синхронно. Устанавливайте для ненадежных носителей, иногда полезно ставить для дисководов. |
atime | Обновляется время обращения к файлу. Задано по умолчанию. |
auto | Система монтируется автоматически. |
noauto | Система монтируется только вручную. |
dev | Файлы устройств интерпретируются устройствами. |
nodev | Обратно предыдущему. |
exec | Разрешено исполнение файлов. |
noexec | Исполнение запрещено. |
suid | Включены флаги SUID и SGID. |
nosuid | Обратно предыдущему. |
user | Обычный пользователь может смонтировать систему, правда с параметрами по умолчанию noexec, nosuid, nodev. |
nouser | Правом монтировки обладает только root |
rw | Чтение и запись. |
ro | Только чтение. |
defaults | Означает rw, suid, dev, exec, auto, nouser, async. В 95% случаев достаточно этой опции для ext2. |
Опций, специфичных для ext2, очень много и описывать их большого смысла не имеет, поскольку ядро их определяет корректно. Теперь некоторые опции для vfat (FAT с длинными именами) и ntfs, вредительские и ненужные я опускаю.
umask=nnn | Маска доступа по умолчанию. Для этой и следующей опции по умолчанию используется для FAT пользователь, смонтировавший систему, а для NTFS - root. |
uid=n, gid=n | GID и UID владельца по умолчанию. |
codepage=866 | Кодировка родного языка для FAT (показан русский) |
quiet | Изменения UNIX-атрибутов не происходит и не приводит к ошибке. |
uni_xlate | Заменять Unicode-символы. Практически всегда следует указывать. Позволяет правильно работать с пробелами в названии файлов. |
iocharset=koi8-r | Кодировка родного языка для Linux (так же показан русский) |
Опции для ISO9660 (или CDFS) автоматически корректно определяются для каждого диска, включая поддержку расширений для работы с длинными именами RockRidge и Joliet. Также к числу часто используемых типов файловых систем относится NFS (Network File System). Она позволяет монтировать каталоги с удаленных компьютеров по сети. Большая часть ее настроек опивается в разделе об установке сети, поскольку они специфичны именно для этого. Также я не буду описывать файловые системы Ext3 (журналируемое расширение Ext2), ReiserFS (наиболее вероятный преемник семейства Ext), и DFS (DVD File System), хотя они тоже достаточно важны, поскольку для Ext3 и ReiserFS практически полностью решены проблемы с кэшированием.
В последнем столбце стоят 2 числа - fs_freq и fs_passno. fs_freq может принимать значение 0 и 1, и отвечает за создание резервной копии раздела в случае сбоя системы. Это полезно на больших корпоративных серверах с RAID'ом и для системных программистов, разрабатывающих модули для ядра. Остальным не требуется. fs_passno определяет порядок проверки файловой системы при первичной загрузке системы. Число 1 обязательно следует указывать для корневой файловой системы. Если вы захотите проверять что-нибудь кроме нее, то ставьте число 2, в противном случае - 0.
Такое монтирование файловых систем имеет свои ограничения. Первое ограничение связано с кэшированием записи в файловую систему. Дело в том, что нельзя извлекать носитель информации до того как его не размонтировали. Если вы просто читали с него, то это часто полбеды. А вот если еще и писали... Последствия могут быть самыми неожиданными, вплоть до полной остановки системы из-за не вовремя вынутой дискеты. Причем именно дисковод являются самым незащищенным носителем. (Это одна из причин, по которым я считаю, что дисководу не место в профессиональной машине.) Привод CD защищается режимом Read-Only и блокировкой лотка. Блокировка лотка приводит к тому, что нажатие на клавишу eject на панели привода не возымеет никакого действия до тех пор, пока не размонтируете файловую систему диска. Другое ограничение это то, что для работы со сменным носителем приходится каждый раз набирать команду mount.
Частично эти ограничения позволяет обойти автомонтирщик. Это программа, которая монтирует сменный носитель при обращении к нему. Для того, чтобы использовать автомонтировщик, следует включить его поддержку в ядре. Самый распространенный автомонтировщик это autofs. Он управляется файлом auto.master. Структура auto.master
#каталог управляющий файл
/mnt /etc/auto.misc
Каждый раз, когда происходит обращение к каталогу /mnt, запускается автомонтировщик с управляющим файлом /etc/auto.misc.
#auto.misc
#подкаталог опции :устройство
cdrom -fstype=iso9660 :/dev/hdc
floppy -fstype=auto :/dev/fd0
Тогда при дальнейшем обращении к /mnt/cdrom происходит запуск mount для устройства /dev/hdc с указанными опциями. Указание в опциях файловой системы для носителя обязательно, остальные опции могут браться из fstab.
Проведение проверок дисков является необходимостью, независимо от используемой файловой и операционной систем. В Linux для этого служит целый набор команд. Команда badblocks проводит проверку поверхности диска на читаемость и записываемость, она действует независимо от используемой файловой системы. Для ее выполнения файловую систему необходимо размонтировать (ГРАБЛИ! все проверки дисков это ПОСИМВОЛЬНЫЕ команды), а затем отдать команду
badblocks /dev/hda3 > /tmp/bblcks3
После этого вся информация о поврежденных участках поступит в файл /tmp/bblcks3. Это необходимо, т.к. далее она понадобится для проверки файловой системы.
Проверка файловой системы на носителях проводится различными (ПОСИМВОЛЬНЫМИ!) командами, в зависимости от типа файловой системы (есть общая fsck, которая занимается только тем, что вызывает специфическую, и для работы требует указывать тип файловой системы). Обычно требуется только e2fsck. Она проводит проверку суперблока файловой системы, структуры директории, а также может проводить проверку читаемости поверхности. Однако последнее не требуется, если вы использовали команду badblocks. Еще раз обращу ваше внимание на то, что для запуска проверки файловая система должна быть размонтирована, или, в крайнем случае, смонтирована read-only.
e2fsck -l /tmp/bblcks3 /dev/hda3
Тогда при проверке будет предпринята попытка перенести информацию с поврежденного блока на целый. Иногда это удается.
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.