Как разделяют пингвинов. Часть 3.

Сергей А. ЯРЕМЧУК, 02/2003.

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

Итак, первой утилитой, которую мы рассмотрим, будет часто упоминаемая во второй части fsck. Но, чтобы просто не перечислять то, что можно найти в man, давайте разберем некоторые моменты, связанные с начальной загрузкой и остановкой системы. Я думаю, что это не будет лишним, ведь наша задача - разобраться в конце концов, как это все работает.

Итак, когда в Grub выбран пункт меню Linux, загружается ядро, которое в свою очередь запускает программу init, которая запускает сценарий /etc/rc.d/rc.sysinit, устанавливающий различные системные переменные и выполняющий некоторую работу по инициализации системы. Открываем этот файл. Все что в нем есть, я приводить естественно не буду, хотя там много интересных строк, остановимся только на параметрах касающихся работы проверки разделов жестких дисков и их монтирования.

В этой строке монтируются все свап разделы, которые прописаны в /etc/fstab (опция -а), а для того, чтобы программа не слишком ругалась и не прекратила свою работу в случае неудачи, использована опция -е. Двигаемся дальше.

О, это уже интересно. Первые две строки указывают на то, что если в корневом каталоге найдется файл /forcefsck, то к некоей переменной fsckoptions (следуя из названия которой, в ней содержатся опции для нашей утилиты проверки fsck) добавляется опция -f. Её назначение состоит в принудительной ее проверке даже в том случае, когда система выключена нормально (табл.1), т.е. если есть желание проверить файловые системы принудительно при загрузке, совсем не обязательно для этого выдергивать вилку из розетки. В третьей строке проверяется наличие файла /.autofsck и если система его находит то, делается вывод, что компьютер был выключен не корректно. Такой трюк помогает не проверять множество возможно подключенных файловых систем, на наличие чистого бита, который, как вы помните из второй части, показывает на корректное размонтирование в каждой, а ограничиться всего лишь проверкой наличия одного единственного файла. Значит, делаем отсюда вывод - где-то там в скриптах, участвующих в выключении компьютера, этот файл должен красиво удаляться. В седьмой строке в том случае, если компьютер выключен не корректно, проверяется наличие файла /etc/sysconfig/autofsck, и если таковой существует, то он запускается на выполнение, что позволяет задать дополнительные переменные (некоторые даны в таблице 2) для проверки или выполнить еще какие-либо действия. Дальше подробно разбирать не будем, здесь просто в зависимости от различных условий добавляется или не добавляется к значению fsckoptions параметр -f и выводятся соответствующие сообщения. Обратите внимание только на то, как получается ответ пользователя в строках 15 и 18 с помощью программы /sbin/getkey.

Следующие интересные строки.

В них проверяется наличие файла /fastboot или с помощью программы grep которая предназначена для поиска в файле строк удовлетворяющих заданному образцу разыскивается строка fastboot в некоем файле /proc/cmdline. А что это за файл такой, к тому же, находящийся, как видите, в каталоге /proc, представляющем собой интерфейс к таблице процессов. Смотрим:

Так это же строка в файле /boot/grub/grub.conf и соответсвующая передаваемым ядру параметрам при запуске системы. Пошли дальше.

В этой строке переменной ROOTFSTYPE присваивается выполнение команды grep которая ищет слова начинающиеся с обратного слеша в файле /proc/mounts в третьей позиции выбранной с помощью программы awk. Смотрим, что это за файл такой.

Как видите это список всех файловых систем прописанных в /etc/fstab, а третью позицию занимает точки монтирования т.е. /, /home и т.д. И, кстати, чтобы узнать, какие файловые системы поддерживает ваше ядро на данный момент, нужно просто просмотреть содержимое файла /proc/filesystems:

Пошли дальше.

После проверки происходит монтирование в режиме чтения-записи.

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

Чуть ниже идет строка, убирающая все флаги проверки и перезагрузки:

И еще дальше по скрипту создается файл сигнализации о чистом выключении системы.

Таблица 1. Опции утилиты fsck

Опция

Описание

-s

Вывод содержимого суперблока перед проверкой ФС

Проверка всех ФС указанных в файле /etc/fstab за один проход

-V

Подробный отчет

-t fstype

Позволяет задать тип ФС иначе команда попытается определить его по файлу /etc/fstab, а если ее там нет то по-умолчанию считается ext2fs. При этом возможно задание нескольких ФС через запятую или использование отрицания 'no' или '!'

Автоматическое исправление всех ошибок без запроса у пользователя

-r

Запрос подтверждения у пользователя на исправление

-l

Выводит список всех имен файлов в файловой системе

-C

Показ статус бара при проверке (корректно, правда только для ext2fs)

-N

Показ того что было сделано

-P

Параллельная проверка корневой ФС вместе с другими

-R

При проверке всех файловых систем отменяет проверку корневой

Не показывает при запуске заголовок

-c

Проверка на bad blocks

Таблица 2. Переменные используемые утилитой fsck

Переменная

Значение

FSCK_FORCE_ALL_PARALLEL

Будет проверять указанные устройства параллельно (полезно например для RAID)

FSCK_MAX_INST

Позволяет ограничить максимальное число одновременно проверяемых ФС (по-умолчанию 0 т.е. без ограничений)

PATH

Путь для поиска программ и устройств для проверки

FSTAB_FILE

Позволяет заменить /etc/fstab на другой

Таблица 3. Код завершения fsck

Код завершения

Пояснение

0

  Без ошибок

1

  Исправленные ошибки файловой системы

2

  Система должна быть перезагружена

4

  ошибки файловой системы которые невозможно исправить

8

  Операционная ошибка

16

  Синтаксисическая ошибка

128

  Библиотечная ошибка

Загрузились, поработали, пришла пора выключаться. Итак, когда в командной строке набрана команда shutdown или halt, начинает выполняться скрипт /etc/rc.d/init.d/halt (для Red Hat клонов ). Разобраться с данным скриптом не составит большого труда, поэтому, чтобы не занимать зря место, остановлюсь лишь на общих вопросах. В файле встречается ссылка на файл /proc/swaps:

Как видите, в нем описанные все смонтированные разделы свап. Затем идет ряд на вид ужасных конструкция с применением регулярных выражений, основная задача которых - найти все смонтированные разделы и корректно их размонтировать. А если уж не получится по хорошему, то с помощью конструкции umount -f file_system и umount -a -f их размонтируют в любом случае. И в самом конце файла встречается наш старый знакомый

С помощью которого мы убираем файл, указывающий на чистое размонтирование всех файловых систем. Вот и все по работе fsck при загрузке и остановке системы. Но возникает вполне закономерный вопрос, связанный с работой данной утилиты с различными ФС и которые к тому же могут изменяться на уже работающей системе. Неужели при добавлении какой то новомодной суперсовременной файловой системы прийдется обновлять данную утилиту, чтобы она могла корректно ее опознать и естественно проверить? А вот и нет. Разработчики не стали усложнять жизнь ни себе ни другим (все тот же принцип KISS) - все дело в том, что проверку всех файловых систем данная утилита не проводит, а вызывает для этого специализированную программу проверки отдельно для каждой файловой системы. Так для проверки ext2fs вызывается fsck.ext2 или e2fsck, для ext3 - fsck.ext3, но, правда, весь секрет состоит в том, что это одна и та же программа, имеющая несколько имен путем создания соответствующих ссылок, в чем легко убедиться, просмотрев номер inоde.

Как видите он абсолютно одинаков, что, правда, учитывая похожесть ext2 и ext3, не должно вызывать удивление. А для проверки ReiserFS применяется ... правильно /sbin/fsck.reiserfs, которая правда тоже является ссылкой, но символической на программу reiserfsck.

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

На этом знакомство с программой fsck, пожалуй, закончим. Перейдем к следующим утилитам.

К сожалению, жесткий диск не резиновый и не может вместить все, что хочется на него записать, поэтому очень часто просто необходимо узнать, сколько осталось на нем свободного места. В таком случае самым простым вариантом будет воспользоваться консольной утилитой df (disk free):

Без аргументов утилита выдает отчет обо всех смонтированных файловых системах, по умолчанию в GNU-версии размер выдается в блоках по 1 Кб. Утилита имеет большое количество опций, но я чаще всего пользуюсь двумя: -Т выводит также тип файловой системы (берется, как правило, из /etc/mtab), -h (human-readable) выдает более привычный формат. Иногда для получения более достоверной информации можно воспользоваться опцией -sync, вызывающий сброс системного кэша. Естественно, в данном случае не обошлось без различных фронт-эндов, их множество в Gnome. Например, можно вызвать Система > Информация о системе (Рис. 1) или же просто воспользоваться gtop (Рис. 2). В KDE их тоже предостаточно - KdiskFree (kdf) (Рис. 3), Системные > Системный монитор (ksysguard) (Рис. 4) или же просто Центр Управления во вкладке Сведения о системе > Блочные устройства или Разделы.

Но выдаваемой df информации бывает недостаточно, иногда требуется более полная информация об используемом дисковом пространстве - в этом случае на помощь приходит утилита du (disk usage). Она позволяет узнать размер дискового пространства, занимаемый каждым каталогом или файлом. Запущенная без аргументов команда выдает список всех файлов текущего каталога. Программа имеет множество опций, все они описаны в соответствующем man’е. Я наиболее часто пользуюсь -h (назначение то же, что и в df) и -с - выводит только окончательный результат для указанных аргументов, иначе будет выведен отчет о каждом встреченном файле:

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

Следующей утилитой будет hdparm, которой все же желательно воспользоваться, так как настройки работы жесткого диска, по умолчанию устанавливаемых дистрибутивом, далеки от оптимальных, в связи с чем часто приходят письма, что, мол, диск о-о-очень тормозит под пингвином. С помощью же данной утилиты можно выжать максимальную производительность своего диска, но предупреждаю: действуйте очень осторожно, это как раз тот случай, когда лучше недобдеть чем перебдеть. Все я вам рассказать не смогу, лучше почитайте подшивку МК о различных режимах работы IDE-дисков для общего понимания процесса. Для начала необходимо получить полную информацию о жестком диске.

Теперь, запустив команду без параметров, узнаем, какие параметры уже установлены:

Для установки максимального числа одновременно считываемых секторов необходимо воспользоваться опцией -m:

I/O support может быть трех режимов: 0-16 бит, 1-32 бит и 3-32 синхронный. В большинстве случаев максимальное быстродействие достигается установкой режима 1. Режим 0 можно оставить разве что для очень старых дисков, а 3 - для отдельных марок чипов. DMA устанавливается опцией -d (1 - вкл/0 - выкл)

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

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

А вот режимы PIO и DMA устанавливаются с помощью одного и того же флага -Х. Использовать данный ключ нужно очень внимательно, устанавливать только реально поддерживаемые диском режимы, а то можно спокойно потерять все данные. Так, для установки выбранного режима PIO необходимо добавить к числу 8 требуемый номер режима. Например, для PIO2 команда будет такая:

где 10=8+2 режим. Аналогично для mdma (multiword DMA) используется начальное число 32 (плюс номер режима), а для UltraDMA начальным будет число 64. Например, для установки UltraDMA5 вводим такую команду:

Но нужно помнить: мало того, чтобы режим UltraDMA поддерживался жестким диском, необходимо также, чтобы его поддержка была заложена в материнскую плату (южный мост). Если нахомутали с данным режимом, то, введя 00, можно вернуться к режиму по умолчанию.

Hdparm - мощная утилита, имеющая множество параметров, правда, в большинстве своем бесполезных в практическом применении. Из оставшихся интерес представляет разве что параметр -Е для установки скорости CD-ROM приводов, а также -t и -T, позволяющие оценить производительность: первый оценивает скорость считывания из кэша буфера на диск, второй - скорость чтения непосредственно из кэша буфера без доступа к диску.

Также иногда может понадобиться параметр -r, позволяющий установить/снять флаг только для чтения для всего диска сразу, и -f, вызывающий синхронизацию буфера, т.е. сброс данных на диск (также можно вызвать, просто набрав sync). Может показаться, что это очень сложно и уныло, да и еще разбираться надо, проще в Windows воткнуть DMA и забыть, но как видите, данная утилита дает возможность тонко настроить режим работы диска, а если возникают неприятности при работе с максимальными параметрами, то установить такие, чтобы можно было спокойно работать.

Позволю себе привести маленький, но очень показательный пример из личного опыта. Захотелось мне как-то заиметь диск пообъемистей. Без проблем, пошел, купил и установил. Но вся заковырка состоит в том, что мой Quantum (нынче уже Maxtor) поддерживает максимально возможный режим UltraDMA 5, а вот материнка на чипсете ВХ, по старинке, - всего лишь 2. Так вот, установил Linux и с помощью hdparm выставил UltraDMA 2, т.к. все равно выше головы не прыгнешь. Все работало нормально, пока не перешел в "любимую" Windows 98SE. Там, чтобы облегчить жизнь своему диску, поступил аналогичным образом (Система > Свойства > … > DMA (в МЕ это устанавливается автоматически)). Windows, будучи впереди планеты всей, очевидно, вполне справедливо решила (или решил), что самый лучший режим - максимальный. Дальше можно не рассказывать, и о словах, которые я тогда говорил, тоже вам знать не надо. Разрешил эту проблему только с помощью программки, которую нашел на сайте производителя, с помощью которой диск может максимально работать в режиме АТА-33, но потерянные данные уже не вернешь. Так что бывают случаи, когда ручная настройка гораздо лучше автоматической. Тогда, кстати, наверное, и был мной забит самый большой и ржавый гвоздь в крышку с флагом Windows.

Идем дальше. Установленные таким образом параметры будут действительны только в период текущей сессии, после выключения питания или перезагрузки все настройки сбросятся. Для того чтобы задействовать их каждый раз, необходимо занести их в стартовый скрипт /etc/rc.d/rc.local или поместить их в отдельный файл, а в rc.local указать строку для запуска.

Посмотрев в файл /etc/rc.d/rc.sysinit, я нашел следующие довольно интересные строки:

Т.е., у нас не спрашивая, принудительно выключают режим DMA на CD-ROM, ссылаясь на возможные проблемы. Еще ниже есть не менее интересные строки, которые полностью приводить не буду, но суть их такова (опять же для Red Hat и компании). В каталоге /etc/sysconfig/ есть файл-шаблон установок параметров - harddisks. Для того чтобы установить режим для hda-диска, необходимо переименовать его в harddiskhda (cp /etc/sysconfig/harddisks /etc/sysconfig/harddiskhda), после чего можно его редактировать (он, кстати, хорошо комментирован). Так, установить режим DMA можно строкой USE_DMA=1, возможна установка и других параметров (MULTIPLE_IO, EIDE_32BIT, UNMASKIRQ, LOOKAHEAD), а с помощью EXTRA_PARAMS можно установить остальные режимы, например DMA -X66 или -a и -m. Кстати, в AltLinux всем этим заправляет другой скрипт - /etc/rc.d/scripts/idetune, а параметры устанавливаются в файле /etc/sysconfig/harddisk/hd$i, но удобный шаблон, увы, не предусмотрен.

На этом я хотел, собственно, и закончить статью, но в процессе переписки с читателями появилась необходимость осветить еще некоторые вопросы, чтобы полностью закрыть тему. Дело в том, что кроме классических файловых систем Linux поддерживает еще так называемые виртуальные файловые системы - devfs, procfs и tmpfs. О devfs я уже говорил в первой части статьи, procfs - это файловая система процессов, о ней также поговорили немного, осталась нетронутой tmpfs, доступная пользователям ядер серии 2.4.х. В двух словах: это RAMDISK-подобная файловая система, использующая для хранения информации оперативную память компьютера (точнее, ОЗУ + swap). Круто, да. Причем эта система не требует предварительного форматирования, т.е. команды mkfs.tmpfs в природе не существует. Если она поддерживается ядром (make хconfig > File systems > Virtual memory file system support), то она УЖЕ готова к использованию, т.е. в большинстве случаев необходимо просто указать точку входа (а может, выхода на поверхность, уж не знаю, как это назвать), с которой будет и общаться пользователь или программа. Создается такая точка все той же командой mount.

После этого можно работать с каталогом /mnt/tmpfs практически так же, как и с обычным диском, кроме двух моментов. Во-первых, размер такой ФС, как вы понимаете, невелик, во-вторых, в случае отключения электричества все, что там было, улетучится вместе с многочасовыми трудами. Но есть и положительные стороны - например, в нее можно смонтировать каталог /tmp, в котором хранятся временные файлы и который все равно очищается в большинстве случаев при запуске (или захламляется всяким мусором). Но все окупается той скоростью, которую может дать tmpfs. Ведь т.к. данная файловая система уже находится в оперативной памяти, то самые медленные операции ввода-вывода здесь происходят практически мгновенно, а если объема ОЗУ будет мало и понадобится использовать swap, то туда в первую очередь будут сбрасываться приложения, в которых система наименее нуждается в данный момент. Поэтому, если есть необходимость в компиляции больших пакетов, или же если вы работаете с музыкой, графикой или видео, то не использовать данную возможность - все равно что таскать щебенку ведрами, когда есть тачка. Опять же, никакой надежды на автоматику, как в Windows: нужна скорость - откусил кусок от оперативки, и работай с ней. Один интересный вопрос возникает при использовании tmpfs. А что будет, если произойдет ее переполнение? Да ничего страшного и не будет. В более новых ядрах при достижении определенного объема информация туда просто перестанет записываться (хотя в первых ядрах серии 2.4.х могут возникнуть проблемы). Но чтобы на всякий случай не доводить до такого, можно с помощью опции size указать максимальный размер при монтировании:

И конечно же, воспользовавшись файлом /etc/fstab, можно монтировать tmpfs при загрузке, посмотрите внимательно там уже есть наверняка такие строки:

или

где /dev/shm - "законное" место данной файловой системы. Чтобы ничего не изменять, я для удобства создал символическую ссылку, которой и пользуюсь в повседневной деятельности:

Вот теперь, пожалуй, и все. Остальное в man’ах и в Интернете. По адресу http://linux.yaroslavl.ru/docs/conf/fs/l-fs_ru/l-fs_ru.htm, можно найти переводы цикла статей Daniel'a Robbins'a, оригинал которых расположен на сайте IBM (http://www-106.ibm.com/developerworks/library/l-fs.html - цикл не окончен, ожидается еще продолжение). И еще новость: заработал, наконец, в полную мощность сайт LinuxBegin, назначение которого - помочь пользователю в освоении этой непростой системы и имеющий к тому же мою самую любимую рассылку по Linux. Адрес такой: http://www.linuxbegin.ru/.


Навигация по статье:

Часть 1:Разделы
Часть 2: Файловые системы
Часть 3: Утилиты и оптимизация





Источник - LinuxBegin.ru
http://linuxbegin.ru/

Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article264.html