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

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

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

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

# Start up swapping.
action $"Activating swap partitions: " swapon -a -e

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

1. if [ -f /forcefsck ]; then
2.        fsckoptions="-f $fsckoptions"
3. elif [ -f /.autofsck ]; then
4.        echo $"Your system appears to have shut down uncleanly"
5.        AUTOFSCK_TIMEOUT=5
6.        AUTOFSCK_DEF_CHECK=no
7.        [ -f /etc/sysconfig/autofsck ] && . /etc/sysconfig/autofsck
8.        if [ "$AUTOFSCK_DEF_CHECK" = "yes" ] ; then
9.        AUTOFSCK_OPT=-f
10.        else
11.        AUTOFSCK_OPT=
12.fi
13.if [ "$PROMPT" != "no" ]; then
14.        if [ "$AUTOFSCK_DEF_CHECK" = "yes" ] ; then
15.        if /sbin/getkey -c $AUTOFSCK_TIMEOUT -m $"Press N within %d seconds to not force file
system integrity check..." n ; then        AUTOFSCK_OPT=
16.        fi
17.        else
18.        if /sbin/getkey -c $AUTOFSCK_TIMEOUT -m $"Press Y within %d seconds
to force file system integrity check..." y ; then
19.        AUTOFSCK_OPT=-f
20.        fi
21.        fi
22.        echo
23.        else
24.        # PROMPT not allowed
25.        if [ "$AUTOFSCK_DEF_CHECK" = "yes" ] ; then
26.        echo $"Forcing file system integrity check due to default setting"
27.        else
28.        echo $"Not forcing
file system integrity check due to default setting"
29.        fi
30.        fi
31.        fsckoptions="$AUTOFSCK_OPT $fsckoptions"
32. fi

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

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

if [ -f /fastboot ] || grep -iq "fastboot" /proc/cmdline 2>/dev/null ; then
fastboot=yes
else
fastboot=
fi

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

[root@grinder sergej]# cat /proc/cmdline ro root=/dev/hda5 hdc=ide-scsi 

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

ROOTFSTYPE=`grep " / " /proc/mounts | awk '{ print $3 }'`

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

[root@grinder sergej]# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw 0 0
/proc /proc proc rw 0 0
none /dev/pts devpts rw 0 0
/dev/hda11 /home ext3 rw 0 0
/dev/hda2 /mnt/win_c vfat rw,nosuid,nodev 0 0
/dev/hda7 /usr/local ext3 rw 0 0
none /dev/shm tmpfs rw 0 0
automount(pid567) /mnt/auto autofs rw 0 0

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

[sergej@grinder sergej]$ cat /proc/filesystems.

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

if [ -z "$fastboot" -a "$ROOTFSTYPE" != "nfs" ]; then
     # т.е. Если переменная $fastboot пустая (как ее заполнить мы уже рассматривали)
     # или $ROOTFSTYPE не равно nfs т.к. последняя является сетевой то ее проверка
     # бесмысленна выполняются все последующие действия.

  STRING=$"Checking root filesystem" echo $STRING initlog -c "fsck -T -a $fsckoptions /"
     # т.е. запускается команда проверки файловых систем с помощью ключа -с и
     # аккуратненько протоколируются его действия

  rc=$? # запоминаем код завершения процесса

  if [ "$rc" = "0" ]; then success "$STRING" echo
  elif [ "$rc" = "1" ]; then passed $"$STRING" echo
  fi # если код ошибки больше 2 то выполняется ниже приведенный участок
  # A return of 2 or higher means there were serious problems.

  if [ $rc -gt 1 ]; then failure "$STRING" echo echo echo $"*** 
              An error occurred during the file system check."
    echo $"*** Dropping you to a shell; the system will reboot"
    echo $"*** when you leave the shell." PS1=$"(Repair filesystem) # # ";
    export PS1 sulogin
     # система переходит в однопользовательский режим с помощью вызова sulogin,
     # для восстановления файловой системы в ручную. А затем.

    echo $"Unmounting file systems"
    umount -a # размонтируются все файловые системы
    mount -n -o remount,ro /
     # в этой строке перемонтируется корневая файловая система в режиме
     # только для чтения, параметр -n указывает на то чтобы запись в файл
     # /etc/mtab не производилась (данный файл содержит список все
     # смонтированный файловых систем в некоторых дистрибутивах это
     # символическая ссылка на /proc/mounts)

    echo $"Automatic reboot in progress."
    reboot -f # принудительная перезагрузка
  elif [ "$rc" = "1" ]; then _RUN_QUOTACHECK=1
  fi
fi

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

action $"Remounting root filesystem in read-write mode: " mount -n -o remount,rw /

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

initlog -c "fsck -T -R -A -a $fsckoptions"

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

rm -f /fastboot /fsckoptions /forcefsck /.autofsck /halt /poweroff

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

# create the crash indicator flag to warn on crashes, offer fsck with timeout
touch /.autofsck

Таблица 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:

[sergej@grinder sergej]$ cat /proc/swaps
Filename Type Size Used Priority
/dev/hda6 partition 128484 0 -1

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

# remove the crash indicator flag
rm -f /.autofsck

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

[root@grinder sergej]# ls -i /sbin/e2fsck /sbin/fsck.ext2 /sbin/fsck.ext3
96264 /sbin/e2fsck 96264 /sbin/fsck.ext2 96264 /sbin/fsck.ext3

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

[root@grinder sergej]# ls -l /sbin/fsck.reiserfs
lrwxrwxrwx 1 root root 10 Авг 13 16:11 /sbin/fsck.reiserfs -> reiserfsck

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

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

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

[sergej@grinder sergej]# df /usr/local
Filesystem      1k-blocks   Used Available Use% Mounted on
/dev/hda7       1011928  501056  459468 53% /usr/local

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

[sergej@grinder sergej]$ du -hs /usr/local
484M  /usr/local

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

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

[root@grinder sbin]# /sbin/hdparm -i /dev/hda

/dev/hda:

 Model=QUANTUM FIREBALLlct20 30, FwRev=APL.3900, SerialNo=353106162000
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=32256, SectSize=21298, ECCbytes=4
 BuffType=DualPortCache, BuffSize=418kB, 
MaxMultSect=8, MultSect=8 (# количество секторов, считываемое за раз максимальное
                           # и установленное)
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=58633344
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
# ниже перечислены режимы которые поддерживает жесткий диск, текущий обозначен звездочкой
 PIO modes: pio0 pio1 pio2 pio3 pio4 
 DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2 
 AdvancedPM=no # поддержка APM
WriteCache=enabled 
 Drive Supports : ATA/ATAPI-5 T13 1321D revision 1 : ATA-1 ATA-2 ATA-3 ATA-4 ATA-5 

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

[root@grinder sbin]# /sbin/hdparm /dev/hda

/dev/hda:
 multcount  = 8 (on) # количество одновременно считываемых секторов (аппаратная возможность)
 I/O support = 1 (32-бит) # режим обмена с жестким диском (default 16-bit)
 unmaskirq  = 0 (off)
 using_dma  = 1 (on) # DMA да/нет
 keepsettings = 0 (off) # сохраняются ли настройки после программного сброса (лучше не трогать)
 nowerr    = 0 (off)
 readonly   = 0 (off) # только для чтения (CD-ROM обычно в on)
 readahead  = 8 (on) # указывает на количество секторов, для которых должно производиться
                     # опережающее чтение
 geometry   = 3649/255/63, sectors = 58633344, start = 0
 busstate   = 1 (on)

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

[root@grinder sbin]# /sbin/hdparm -m 8 /dev/hda

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

[root@grinder sbin]# /sbin/hdparm -d 1 /dev/hda

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

[root@grinder sbin]# /sbin/hdparm -а 16 /dev/hda

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

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

[root@grinder sbin]# /sbin/hdparm -Х10 /dev/hda

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

[root@grinder sbin]# /sbin/hdparm -Х69 /dev/hda

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

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

[root@grinder sergej]# /sbin/hdparm -t -T /dev/hda

/dev/hda:
 Timing buffer-cache reads:  128 MB in 1.32 seconds = 102.40 MB/sec
 Timing buffered disk reads: 64 MB in 3.12 seconds = 20.51 MB/sec

Также иногда может понадобиться параметр -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, я нашел следующие довольно интересные строки:

# Turn off DMA on CD-ROMs. It more often than not causes problems.
if [ -e /proc/ide ]; then
 for N in `grep -v ide-disk /proc/ide/*/*/driver 2>/dev/null | awk -F / '{ print $5 }'`; do
  hdparm -q -d0 /dev/$N >/dev/null 2>&1
 done
fi

Т.е., у нас не спрашивая, принудительно выключают режим 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.

[root@grinder /]# mount tmpfs /mnt/tmpfs -t tmpfs

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

[root@grinder /]# mount tmpfs /mnt/tmpfs -t tmpfs  -o size=128m

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

none          /dev/shm        tmpfs  defaults    0 0

или

none          /dev/shm        tmpfs  size=1g   0 0

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

[root@grinder /]#  ls-l  /dev/shm  /mnt/tmpfs

Вот теперь, пожалуй, и все. Остальное в 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/.

Автор: Сергей А. ЯРЕМЧУК, 02/2003.
Источник: -

Добавить комментарий




:smile1: :smile2: :smile3: :smile4: :smile5: :smile6: :smile7: :smile8: :smile9: :smile10: :smile11: :smile12: :smile13: :smile14: :smile15: :smile16: :smile17: :smile18:


Яндекс цитирования Rambler's Top100 Рейтинг@Mail.ru
Реклама: