Содержание


Инструменты ОС Linux для разработчиков приложений для ОС Windows. Часть 4. Файловая система /sys и загрузка системы

Comments

Файловая система /sys (sysfs) появилась существенно позже системы /proc, и в полной мере она стала использоваться, начиная с версии 2.6 ядра Linux. Эта файловая система изначально использовалась для поддержки определённой последовательности действий при динамическом управлении электропитанием и "горячего" подключения устройств.

Файловая система /sys

Предложенная модель оказалась настолько удачной, что позднее файловая система /sys "перехватила" многие функции /proc. По принципам функционирования и правилам использования /sys сильно напоминает /proc, и в настоящее время сложилась тенденция многие управляющие функции переносить из /proc в /sys. Содержимое имён-псевдофайлов в обеих системах является только текстовым изображением некоторых внутренних данных ядра. Но между /sys и /proc существуют и несколько серьёзных отличий.

Во-первых, файловая система /proc является общей, "родовой" принадлежностью всех POSIX систем (BSD, Solaris, QNX, и др.). Её наличие и общие принципы использования оговариваются стандартом POSIX 2. В свою очередь файловая система /sys была разработана специально для Linux и используется только этой платформой.

Во-вторых, скорее, по традиции меньшее количество диагностических файлов в /proc содержит большой объём информации, в то время как в /sys имеется гораздо больше файлов, но каждый из них содержит информацию об ограниченном единичном значении параметра, часто соответствующем одной скалярной переменной языка C (в текстовом изображении): int, long, и т.д.

Сравните, как определяется число строк в файлах в разных системах:

# cat /proc/vmstat | wc -l
84
# cat /proc/cpuinfo | wc -l
24
...
# cat /sys/class/net/eth0/address
00:15:60:c4:ee:02
# cat /sys/class/net/eth0/flags
0x1003

Данные и журналы (/var)

Главный журнал системы размещается в файле /var/log/messages. Во многих Linux-дистрибутивах права доступа к этому файлу устанавливаются так, что даже для чтения из него требуются права root (хотя это и не обязательно).

$ sudo cat /var/log/messages | tail –n3
Mar 19 10:01:54 localhost xinetd[4249]: START: telnet pid=5325 from=192.168.1.9
Mar 19 10:02:18 localhost xinetd[4249]: EXIT: telnet status=1 pid=5325 duration=24(sec)
Mar 19 10:26:45 localhost xinetd[4249]: START: daytime-stream pid=0 from=192.168.1.9

Однако для просмотра системного журнала имеется команда, не требующая привилегий root, а формат вывода информации может несколько отличаться в зависимости от версии системы (главным образом, форматом меток времени):

$ dmesg | tail -n3
[   14.904032] Bluetooth: BNEP filters: protocol multicast
[   25.088032] eth0: no IPv6 routers present
[ 1104.264277] usb 1-4: reset high-speed USB device number 4 using ehci_hcd

Ещё один важный системный журнал — это журнал сообщений последней загрузки операционной системы, в котором можно найти ошибки, связанные с некорректной загрузкой системы:

$ tail –n3 /var/log/dmesg
[    9.286520] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro
[    9.439552] loop: module loaded
[   10.662078] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)

В каталоге /var находятся и другие каталоги, содержащие служебные и промежуточные данные системы:

$ ls /var
backups  cache  lib  local  lock  log  mail  opt  run  spool  tmp

Из них стоит обратить внимание на каталог кэшированных данных, куда складываются файлы программных пакетов, устанавливаемых пакетной системой дистрибутива. Например, в .rpm дистрибутивах это будет каталог /var/cache/yum, а в .deb дистрибутивах уже /var/cache/apt/archives.

$ ls -l /var/cache/apt/archives/*.deb | wc -l
1009

Как показано последней командой, кэши пакетной системы могут содержать тысячи файлов программных пакетов, объёмом в несколько гигабайт. В системах, которые эксплуатируются в течение длительного времени, это может стать причиной заполнения диска, и тогда кэши пакетной системы потребуется очистить.

В каталоге /var/run отображаются PID многих запущенных программ, особенно важно это при работе с программами демонами, сервисами, серверами. Но с 2013г. эта функциональность переносится в каталог /run. На настоящий момент PID могут отображаться одновременно и в /var/run и /run:

$ ls /var/run/*.pid
/var/run/acpid.pid /var/run/dhclient.eth0.pid /var/run/rsyslogd.pid
/var/run/atd.pid /var/run/lightdm.pid /var/run/sshd.pid
...
$ ls /run/*.pid
/run/acpid.pid	/run/crond.pid		/run/minissdpd.pid
/run/atd.pid		/run/dhclient.eth0.pid	/run/xinetd.pid
...
$ cat /run/xinetd.pid
2329

Загрузочный каталог /boot

Все компоненты и параметры, относящиеся непосредственно к загрузке Linux, сосредоточены в корневом каталоге /boot:

$ ls -l /boot
итого 13960
-rw-r--r-- 1 root root   134595 Сен 20 17:27 config-3.2.0-4-486
drwxr-xr-x 3 root root    12288 Окт 13 20:11 grub
-rw-r--r-- 1 root root 10053100 Окт 17 17:26 initrd.img-3.2.0-4-486
-rw-r--r-- 1 root root  1574521 Сен 20 17:27 System.map-3.2.0-4-486
-rw-r--r-- 1 root root  2511200 Сен 20 17:25 vmlinuz-3.2.0-4-486

Так файл vmlinuz-3.2.0-4-486 содержит сжатый образ загружаемого ядра Linux, а файл initrd.img-3.2.0-4-486 — образ стартовой корневой файловой системы, в виде RAM-диска начальной загрузки (в нём также могут содержаться некоторые драйверы, изначально не вошедшие в ядро).

Наиболее интересен для программиста, скорее всего, будет файл config-3.2.0-4-486 — с полным набором конфигурационных параметров, с которыми собиралось текущее ядро vmlinuz-3.2.0-4-486 (суффиксы файлов в точности совпадают). С помощью этого набора параметров проще всего повторить процесс сборки ядра, внеся изменения только в отдельные параметры, как это довольно часто требуется в Linux.

Постоянное наличие файла с образом диска для начальной загрузки системы необходимо, потому что в ранних версиях Linuх все необходимые драйверы (например, файловых систем), которые могли потребоваться при загрузке системы, компилировались прямо в состав ядра (монолитное ядро). И сейчас такой подход практикуется во встраиваемых системах или системах специального назначения. Но в общем случае, набор драйверов, которые могут понадобиться системе для загрузки, превышает список драйверов, которые целесообразно хранить непосредственно в ядре. Поэтому такие компоненты помещаются в стартовый образ корневой системы.

Практикуется несколько различных форматов стартового образа файловой системы:

  • initrd-* — это образ, собранный в виде RAM-диска;
  • initramfs-* — это образ, собранный в форме простого архива формата CPIO, содержащего требуемые файлы в виде линейного списка.

Существуют и другие форматы, но все они используются одинаково — образ размещается в RAM, монтируется в качестве корня (/) на время загрузки и используется ядром для загрузки отдельных файлов модулей.

В конечном итоге, если вы не планируете пересобирать ядро с новыми параметрами, то вам никогда не придётся беспокоиться о стартовой корневой системе. Если же задача сборки специализированной версии ядра когда-нибудь возникнет, то существуют специальные инструменты для создания загрузочных образов системы.

Вид и состав каталога /boot может отличаться в различных дистрибутивах (особенно Debian или Ubuntu). Но основные правила и концепции остаются в силе, например, вот как выглядит каталог /boot Ubuntu 10.04.3 LTS:

$ ls /boot
abi-2.6.32-33-generic grub	memtest86+.bin vmcoreinfo-2.6.32-33-generic
config-2.6.32-33-generic initrd.img-2.6.32-33-generic System.map-2.6.32-33-generic
vmlinuz-2.6.32-33-generic

Что же находится в каталоге /boot/grub, присутствующем в обоих дистрибутивах? Платформа Linux давно поддерживает вторичные загрузчики, допускающие мультизагрузку и выбор загружаемой системы из начального меню. Такие загрузчики для Linux развиваются как независимые открытые проекты, и самыми известными являются LILO (более старый проект) и GRUB (наиболее популярные на данный момент). Всю информацию о них можно получить на Web-сайтах проекта.

В каталоге /boot/grub находится ограниченное подмножество средств пакета GRUB, необходимое для реализации мультизагрузки в Linux. Ниже показан конфигурационный файл (меню загрузки и другое) мультизагрузчика grub:

$ ls -l /boot/grub/grub.conf
-rw------- 1 root root 907 Дек  3  2009 /boot/grub/grub.conf
$ ls -l /boot/grub/menu.*
lrwxrwxrwx 1 root root 11 Окт 29  2008 /boot/grub/menu.lst -> ./grub.conf
$ sudo cat /boot/grub/grub.conf
default=1
timeout=5
...
title CentOS (2.6.24.3-1.rt1.2.el5.ccrmart)
        root (hd1,5)
        kernel /boot/vmlinuz-2.6.24.3-1.rt1.2.el5.ccrmart ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.24.3-1.rt1.2.el5.ccrmart.img
...

В отличие от загрузчика LILO и других более ранних систем мультизагрузки, GRUB знает структуру файловой системы, и после редактирования файла grub.conf изменения сразу вступают в силу, без внесения изменений в загрузчик диска. Также сама программа grub имеет развитую командную оболочку, что позволяет, например, восстановить повреждённую загрузку с диска в диалоговом режиме.

Заключение

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

В следующей статье мы рассмотрим различные аспекты компиляции и сборки приложений, специфичные для OC Linux.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=967893
ArticleTitle=Инструменты ОС Linux для разработчиков приложений для ОС Windows. Часть 4. Файловая система /sys и загрузка системы
publish-date=04082014