- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF143:Linux Training
Материал из Linuxformat.
- Тренинги Linux
Тренинги Linux от Майка Сондерса |
---|
|
Содержание |
Mайк Сондерс ведет Тренинги Linux
- Часть 3: От аппаратуры и загрузки переходим к каталогам файловой системы, разделам и разделяемым библиотекам. И – да: в конце вас ждет тест!
Отгадайте, сколько файлов окажется на жестком диске после установки Debian 6 с одного компакт-диска? Подумайте – мы подождем. А ответ такой: 82698. Верится с трудом, и таким количеством файлов невозможно управлять, но, к счастью, в каталогах файловой системы Linux эта масса файлов располагается весьма комфортно, и у каждого файла есть осмысленное место для жизни. Какова задача каждого отдельного файла, слишком подробно знать не обязательно, но расположение файла определяет его общее назначение в глобальном устройстве системы.
На данном уроке мы рассмотрим, как устроена файловая система Linux, как разбить жесткий диск на разделы и изменить конфигурацию загрузчика Grub. Мы также увидим, как разделяемые библиотеки повышают безопасность и экономят место на жестком диске. Как и в других статьях этой серии, некоторые каталоги и команды могут различаться в зависимости от используемого дистрибутива. Однако для обучения мы рекомендуем дистрибутив, соответствующий промышленному стандарту, такой как Debian, которым мы и пользовались при написании этой статьи. Установить его можно с LXFDVD.
Раздел 1: Файловая система Linux
Для начала разберемся, как установка Linux располагается на жестком диске. В противоположность Windows, где есть различные «стартовые точки», или буквы диска, для каждого устройства, в Linux для всего есть только один источник – нечто вроде «Большого Взрыва» данных. Это /, или корневой каталог (root), который не следует путать с пользователем root, администратором системы. Все остальные каталоги, такие как /home/username, ваш домашний каталог, ответвляются от него. Другими словами, корневой каталог – это каталог верхнего уровня, и все остальные каталоги в системе являются его подкаталогами. Вот какие каталоги вы найдете в корневом:
- /bin Содержит двоичные файлы, представляющие собой исполняемые программы. Это важнейшие системные утилиты, такие как ls, df, rm и т. д. Здесь должны находиться все файлы, необходимые для загрузки системы и исправления неполадок, в то время как каталог /usr/bin имеет другое назначение – какое, мы скоро увидим.
- /boot Здесь находится файл образа ядра (vmlinuz – z означает, что файл сжат); это программа, загружаемая и исполняемая загрузчиком. Здесь также находится образ RAM-диска (initrd), который предоставляет ядру минимальную файловую систему и набор драйверов для запуска системы. Во многих дистрибутивах здесь же сидит файл config с настройками компиляции ядра, а также подкаталог grub с конфигурацией загрузчика.
- /dev Файлы устройств. К большинству устройств в Linux можно обращаться так, как если бы они были файлами, считывая и записывая в них байты. Загляните в первую часть этой серии, чтобы узнать подробнее о /dev.
- /etc Преимущественно файлы настройки в текстовом формате, хотя есть и исключения. Загрузочные скрипты (см. вторую часть этой серии) также находятся здесь. Здесь находятся системные конфигурационные файлы для таких программ как Apache; конфигурация настольных программ обычно находится в каталоге home.
- /home Здесь обычно находятся домашние каталоги (home). У каждого пользователя здесь есть каталог с персональными файлами и настройками.
- initrd.img Символическая ссылка (это не настоящий файл – больше похоже на ярлык в Windows) на вышеупомянутый RAM-диск в /boot. Полный путь, на который она ссылается, можно посмотреть командой ls -l.
- /lib Разделяемые библиотеки; подробнее о них см. во врезке «Что такое разделяемые библиотеки?» далее. Как и в каталоге /bin, здесь находятся важнейшие библиотеки, необходимые для загрузки и запуска системы на базовом уровне. В каталоге /lib также находятся модули ядра (см. первую часть этой серии уроков).
- /lost+found Если во время крупной операции записи данных на диск падает система или отключается электричество, и при следующем запуске система выполняет проверку диска (fsck), фрагменты частично утерянных файлов помещаются сюда.
- /media При подключении внешнего диска, скажем, USB-брелка, происходит автоматическое монтирование, и в этом каталоге появляется подкаталог с содержимым этого диска.
- /mnt Немного похож на /media, за исключением того, что обычно используется для смонтированных вручную долговременных хранилищ данных, включая жесткие и сетевые диски.
- /opt Дополнительное ПО. Этот каталог используется очень редко, но в некоторых дистрибутивах и пакетах вы найдете здесь большие пакеты вроде KDE и OpenOffice.org. Это позволяет хранить все в одном месте и, следовательно, более удобно удалять или обновлять ПО помимо менеджера пакетов.
- /proc Доступ к информации о процессах. Здесь можно увидеть каждый процесс (выполняющуюся задачу) в системе, что и поддерживает философию Unix «всё является файлом».
- /root Персональные файлы суперпользователя, он же – root. Многие администраторы хранят здесь резервные копии файлов настройки. В многопользовательских системах жизненно важно, чтобы у обычных пользователей не было сюда доступа.
- /sbin Как и в каталоге /bin, здесь находятся двоичные исполняемые файлы, но доступ к ним разрешен только суперпользователю. Это программы, которые не должны запускать обычные пользователи: утилиты настройки сети, форматирования разделов и т. д.
- /selinux Место для файлов, используемых средой SecurityEnhanced Linux.
- /srv Этот каталог предназначен для данных, обслуживаемых системой (например, web-сервером). Однако большинство программ вместо него пользуются /var.
- /sys Нечто вроде осовремененного варианта /dev с дополнительными возможностями. Здесь можно получить информацию об устройствах и ядре, но для обычных задач администратора этот каталог не так важен.
- /tmp Временные файлы. В этот каталог может записывать данные любая программа, и вы увидите здесь случайные файлы фоновых сервисов, web-браузеров и т. д. В большинстве дистрибутивов он очищается при загрузке.
- /usr Это другой мир. /usr содержит собственные версии каталогов bin, sbin и lib, но они предназначены для приложений, существующих вне базовой системы. Все жизненно важное для запуска системы должно находиться в /bin, /sbin и /lib, а необязательные программы вроде Firefox и Emacs должны жить здесь. И на то есть веская причина: разместив базовую систему на одном разделе (/), а дополнительные программы на другом (/usr), систему можно сделать более гибкой. /usr, например, можно монтировать через сеть. Здесь также помещен каталог /usr/local, где обычно находятся программы, которые вы компилируете сами, чтобы их не видел менеджер пакетов.
- /var Здесь находятся файлы, которые часто меняются. Другими словами, это файлы, в которые часто записываются данные – системные журналы, базы данных и файлы почтовых клиентов. В большинстве дистрибутивов здесь также размещается корень документа Apache (/var/www). На мощных серверах, которые пишут данные интенсивно, он часто выносится в особый раздел с настройками файловой системы, повышающими скорость.
- vmlinuz Символическая ссылка на файл образа ядра в /boot.
В зависимости от дистрибутива вы можете найти в каталоге root и другие файлы. Однако большинство дистрибутивов стараются следовать положениям стандарта Filesystem Hierarchy Standard (FHS). Это попытка унифицировать каталоги файловой системы между различными дистрибутивами. Вы сможете погрузиться глубже в /var, /usr и другие каталоги, заглянув на справочную страницу иехархии каталогов в терминале командой man hier.
Что такое разделяемые библиотеки?
Библиотека – это фрагмент кода, который не является исполняемым, но может использоваться другими программами. Например, пусть вы создаете программу, которая должна будет разбирать XML-файл, но не хотите писать XML-парсер. Вместо этого вы можете воспользоваться libxml, библиотекой для обработки XML, которую уже написали другие. В обычной установке Linux есть сотни таких библиотек, включающих библиотеки для базовых функций C (libc) и графические интерфейсы (libgtk, libqt).
Библиотеки можно связать с программой статически, «зашив» в окончательную версию исполняемого файла, но обычно это разделяемые файлы в каталогах /lib, /usr/lib и /usr/local/lib с .so в имени файла, что означает «разделяемый объект» [shared object]. Благодаря этому несколько программ могут одновременно пользоваться одной и той же библиотекой, и если в ней обнаружится уязвимость, достаточно исправить ее только один раз. С разделяемыми библиотеками уменьшаются размеры исполняемых файлов, экономя дисковое пространство. Командой ldd можно узнать, какие библиотеки используются программой. Например, ldd /usr/bin/gedit выводит список библиотек, включающих:
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7476000)
Gedit зависит от GTK, поэтому ему нужна libgtk-x11, и справа вы видите местоположение этой библиотеки в системе. Но что определяет расположение библиотек? Ответ – файл /etc/ld.so.conf, который ссылается на файлы в /etc/ld.so.conf.d. Эти файлы содержат текстовые строки с расположением библиотек в файловой системе, такие как /usr/local/lib. Если вы устанавливали библиотеки куда-либо, можете добавить новые файлы с их расположениями, но после этого запустите ldconfig (от имени root) чтобы обновить кэш, используемый загрузчиком программ.
Иногда бывает нужно запустить программу, использующую библиотеку с нестандартным расположением. Для этого воспольуйтесь переменной LD_LIBRARY_PATH. Например, следующая команда запустит исполняемый файл myprog из текущего каталога и на время добавит mylibs к списку стандартных путей к библиотекам:
LD_LIBRARY_PATH=/path/to/mylibs ./myprog.
Так во многих играх связываются библиотеки отдельно от исполняемого файла без его наличия.
Раздел 2: Схемы разбиения диска на разделы
Разбиение диска на разделы – одна из тех задач, за которые приходится браться нечасто, но которые имеют далеко идущие последствия. Если неправильно выделить место для какого-то раздела, неприятности вам обеспечены. Особенности разбиения диска на разделы зависят от установщика вашего дистрибутива, и мы не будем перечислять здесь все возможные варианты. Вместо этого воспользуемся утилитой разбиения диска на разделы, которая есть во всех дистрибутивах, и рассмотрим некоторые схемы разбиения диска.
Откройте терминал, переключитесь на пользователя root и введите команду:
fdisk /dev/sda
Замените sda устройством, соответствующим вашему диску. (На компьютерах с одним жестким диском это sda, а если Linux загружается со второго диска – sdb. Для верности загляните в вывод dmesg.) fdisk — простая командная утилита разбиения диска. Как и Vi, выглядит она аскетично, но умеет все. Введите p, и вы увидите список разделов диска как на экранном снимке ниже. Введя m, вы получите список доступных команд: разделы можно удалять (d), создавать новые (n), сохранять изменения на диск (w) и т. д.
Это мощная утилита, но она предполагает в вас знание того, что вы делаете, и опекать вас не будет. fdisk также не форматирует разделы – им просто дается номер типа. Для форматирования раздела наберите mkfs и нажмите Tab, чтобы просмотреть варианты завершения команды. Вы увидите, что есть команды для форматирования разделов в традиционных Linux-форматах (таких как mkfs.ext4), в формате Windows FAT32 (mkfs.vfat) и других.
Наряду с разделами файловой системы существует еще раздел подкачки (swap). Он используется для организации виртуальной памяти. Другими словами, когда программа больше не помещается в микросхемах оперативной памяти, потому что память съели другие программы, ядро может вытеснить эту программу в раздел подкачки, записав содержимое памяти в виде данных на этот раздел. Когда программа снова становится активной, она возвращается с диска назад в оперативную память.
Волшебной формулы точного расчета размера раздела подкачки не существует, но администраторы советуют устанавливать его в размере вдвое больше объема оперативной памяти, но не свыше 2 ГБ. Отформатировать раздел подкачки можно командой mkswap с устройством в качестве параметра (например, /dev/sda5), а активировать – командой swapon с устройством в качестве параметра. В качестве раздела подкачки можно также использовать один файл – более подробную информацию ищите на man-стра-ницах команд mkswap и swapon.
Схемы разбиения диска на разделы
Итак, как разбить диск на разделы? Есть три общих подхода:
- Все в одном. Наличествует один большой раздел с файлами операционной системы, домашними каталогами, временными файлами, данными серверов и всеми остальными файлами. Иногда это не самый эффективный подход, но он самый простой, и у всех каталогов равные возможности по использованию дискового пространства. Во многих настольных дистрибутивах (на самом деле только в Ubuntu и его производных и это плохой подход) этот подход используется по умолчанию.
- Разделяем корневой раздел и home. Чуть более сложная схема, в которой каталог /home размещается в собственном разделе, отдельно от корневого раздела (/). Большое преимущество этого подхода в том, что можно обновлять, переустанавливать и менять дистрибутивы, при необходимости полностью уничтожая все файлы операционной системы при сохранении персональных данных и настроек в /home нетронутыми. Более подробно о преимуществах обособления каталога /home смотрите в учебнике про Grub в этом журнале.
- Разделы для всего. При работе на критически важном компьютере, вроде открытого извне web-сервера с круглосуточным режимом, вы можете применить несколько весьма эффективных схем разбиения. Например, пусть у вашего компьютера два жестких диска: медленный и быстрый. Если вы работаете на бойком почтовом сервере, можете поместить корневой каталог на медленный диск: ведь он используется только при загрузке системы. А /var/spool лучше поместить на быстрый диск, так как каждую минуту с ним производятся сотни операций чтения и записи.
Эта гибкость в разбиении диска на разделы – большое преимущество Linux и Unix, и польза от этого все более и более возрастает. Возьмем, например, самые современные быстрые диски SSD: каталог /home можно разместить на обычном жестком диске, обеспечив себе большой объем пространства по низкой цене, а каталог root — на SSD, и система будет загружаться и выполнять программы со скоростью света.
Раздел 3: Настройка загрузчика
Не хотите, чтобы другие пользователи залезали в настройки Grub во время загрузки? Защитите их паролем, и только вы сможете их менять – как это сделать, можно узнать из онлайн-документации Grub по ссылке http://www.gnu.org/software/grub/manual/grub.html#Security.
Для загрузки ядра и старта всего процесса загрузки системы почти во всех дистрибутивах ныне используется Grub 2 (полностью – Grand Unified Bootloader). В предыдущей статье мы познакомились с самим Grub и с тем, как изменить из него параметры загрузки. Но эти изменения временные. Если что-то нужно менять каждый раз, то прерывание каждой загрузки может обернуться настоящей головной болью. Решение – изменить файл /etc/default/grub.
Вообще-то это не файл настройки Grub – тот называется /boot/grub/grub.cfg и автоматически создается скриптами после обновления ядра, поэтому изменять его вручную не следует. В большинстве случаев требуется добавить тот или иной параметр к строке загрузки ядра, чтобы отключить определенное устройство или загрузиться в определенном режиме. Сделать это можно, открыв файл /etc/default/grub в текстовом редакторе от имени пользователя root и взглянув на следующую строку:
GRUB_CMDLINE_LINUX_DEFAULT=”quiet”
Она содержит параметры по умолчанию, которые передаются ядру Linux. Добавьте в двойные кавычки после quiet необходимые опции, разделяя их пробелами. Сделав это, выполните команду:
/usr/sbin/update-grub
Она обновит /boot/grub/grub.cfg, добавив в него новые параметры.
Стар и груб
Если у вас более старый дистрибутив с Grub 1, настройка будет несколько иной. У вас будет файл /boot/grub/menu.lst с записями наподобие
title Fedora Core (2.6.20-1.2952.fc6) root (hd0,0) kernel /vmlinuz-2.6.20-1.2952.fc6 ro root=/dev/md2 rhgb quiet initrd /initrd-2.6.20-1.2952.fc6.img
Здесь можно добавить опции прямо в конец строки kernel, сохранить файл и перезагрузить компьютер, чтобы изменения вступили в силу. Если Grub испортится или его удалит другой загрузчик, вы сможете переустановить его, выполнив следующую команду от имени root:
grub-install /dev/sda
Замените sda на sdb, если хотите установить его на второй жесткий диск. Эта команда записывает начальную часть Grub в первые 512 байт жесткого диска, также известных как главная загрузочная запись (MBR). Обратите внимание, что Grub не обязательно устанавливать в MBR; его можно установить в суперблок (первый сектор) раздела, позволяя основному загрузчику в MBR подгрузить дочерний загрузчик. Впрочем, скорее всего, эти сведения выходят за рамки LPI 101, и вы вряд ли с ними столкнетесь; но знать об этом стоит.
Наконец, хотя Grub используется в подавляющем большинстве дистрибутивов, все же есть и такие, в которых еще засиделся более старый загрузчик LILO – Linux Loader [Загрузчик Linux]. Его файл настройки – /etc/lilo.conf, и после любого изменения файла нужно запустить /sbin/lilo, чтобы обновить настройки в загрузочном секторе.
Волшебство /etc/fstab
Точка монтирования – место соединения раздела с файловой системой. Предположим, например, что раздел /dev/sdb2 будет использоваться для домашних каталогов. В этом случае его точка монтирования – /home. Просто!
Познакомившись со схемами разбиения диска на разделы и узнав, как создавать разделы с помощью команд fdisk и mkfs, вы, возможно, заинтересовались, как это устроено в рабочей системе Linux. Во главе данной схемы стоит файл /etc/fstab, текстовый файл, где описана связь разделов с точками монтирования. Загляните в этот файл, и вы увидите несколько строк наподобие такой:
UUID=cb300f2c-6baf-4d3e-85d2-9c965f6327a0 / ext3 errors=remount-ro 0 1
Строка состоит из пяти полей. Первое поле – устройство, задаваемое в виде /dev/sda1-type или в более современном формате идентификатора UUID (это уникальный идентификатор устройства; его можно добыть командой blkid). Затем указана точка монтирования – в данном случае это корневой каталог. За ней следуют тип файловой системы и опции монтирования.
Приведенные здесь параметры означают, что если при монтировании диска загрузочными скриптами возникают ошибки, его нужно перемонтировать в режиме только для чтения, чтобы операции записи не причинили дальнейшего ущерба. Списки доступных опций для каждого типа файловой системы имеются на man-странице команды mount. Последние числовые параметры связаны с проверками файловой системы, и изменять их значения по умолчанию не нужно.
Вы можете добавить свои точки монтирования в /etc/fstab в текстовом редакторе, но учтите, что в некоторых дистрибутивах файл автоматически перезаписывается, поэтому обязательно сохраните исходную копию.
Проверьте себя!
При продвижении по этой серии уроков вы, возможно, хотите попутно проверять свои знания. В конце концов, если после нашего расставания вы направитесь на полноценную сертификацию LPI, вы должны уметь пользоваться знаниями на лету, не заглядывая в руководства. В конце серии мы подготовим для вас полный список примерных вопросов, а пока вот несколько задач и вопросов по материалам пройденных нами трех разделов:
- Где находятся образ ядра и файлы RAM-диска?
- Объясните отличия в назначении каталогов /lib, /usr/lib и /usr/local/lib.
- Расскажите о возможных схемах разбиения диска на разделы в Linux. Почему стоит размещать каталог /home на отдельном разделе?
- Опишите процесс добавления новых каталогов с библиотеками в систему.
Попробуйте ответить на эти вопросы, не обращаясь за подсказками к соответствующим разделам. Если вы сомневаетесь, не волнуйтесь – просто вернитесь и прочтите их снова. Лучший способ усвоить полученные знания – взять их на вооружение и поупражняться на собственном компьютере (или на каком-нибудь дистрибутиве в VirtualBox, чтобы не подвергать опасности свою систему).