Последовательную схему загрузки ос linux. Загрузка Linux: этапы, параметры, скрипты

вторичного загрузчика схему с картой размещения . Это делает работу с LILO занятием, требующем повышенной аккуратности, так как изменение процедуры загрузки не атомарно : сначала пользователь изменяет ядро или его модули, потом - редактирует файл /etc/ lilo .conf , в котором содержатся сведения обо всех вариантах загрузки компьютера, а затем - запускает команду lilo , которая собирает таблицы размещения для всех указанных ядер и вторичного загрузчика и записывает первичный и вторичный загрузчик вместе с картами в указанное место диска. Первичный загрузчик LILO (он называется LI ) можно записывать и в MBR , и в начало раздела Linux.

Простейший файл lilo .conf может выглядеть так:

Boot=/dev/hda map=/boot/map image=/boot/vmlinuz-up root=/dev/hda1 Пример 10.1. Простейшая настройка LILO: пример файла lilo.conf

Такая настройка LILO определяет только один вариант загрузки: первичный загрузчик записывается в начало первого жесткого диска (строчка boot=/dev/ hda ), карту размещения утилита lilo записывает в файл /boot/map , ядро добывается из файла /boot/vmlinuz-up , а запись root=/dev/hda1 указывает ядру , что корневая файловая система находится на первом разделе первого диска.

Одна из машин, за которыми случалось работать Мефодию, использовалась иногда для запуска единственной программы, написанной для MS-DOS. Исходные тексты этой программы давно потерялись, автор - тоже, поэтому на машине пришлось устанавливать и MS-DOS и Linux. В результате lilo .conf оказался таким:

# cat /etc/lilo.conf boot=/dev/hda map=/boot/map default=linux-up prompt timeout=50 image=/boot/vmlinuz-up label=linux-up root=/dev/hda5 initrd=/boot/initrd-up.img read-only image=/boot/vmlinuz-up label=failsafe root=/dev/hda5 initrd=/boot/initrd-up.img vga=normal append=" failsafe noapic nolapic acpi=off" read-only other=/dev/hda1 label=dos other=/dev/fd0 label=floppy unsafe Пример 10.2. Настройка LILO на двухсистемной машине

Здесь Linux была установлена на пятый раздел диска (о нумерации разделов в IBM-совместимых компьютерах будет рассказано в лекции 11), а на первом находится MS-DOS. Кроме загрузки MS-DOS предусмотрено два варианта загрузки Linux и еще один - любой операционной системы с дискеты. Каждый вариант загрузки помечен строкой label=вариант . При старте LILO выводит простейшее 3Если установлен графический вариант интерфейса, то окно может быть сколь угодно изукрашенное. окошко, в котором перечислены все метки (в данном случае - " linux-up ", " failsafe ", " dos " и " floppy "). Пользователь с помощью "стрелочек" выбирает нужный ему вариант и нажимает Enter . При необходимости пользователь может вручную дописать несколько параметров , они передадутся ядру системы. Если пользователь ничего не трогает, то по истечении тайм-аута выбирается метка, указанная в поле default .

Еще несколько пояснений. Метки linux-up и failsafe в примере используют одно и то же ядро (vmlinuz-up ), но во втором случае перенастраивается режим графической карты и добавляются параметры, отключающие поддержку необязательных для загрузки аппаратных расширений (многопроцессорность, автоматическое управление электропитанием и т.п.). Строчку, стоящую после append= , пользователь мог бы ввести и самостоятельно, это и есть параметры ядра . Поле initrd= указывает, в каком файле находится стартовый виртуальный диск (ему посвящен раздел " Стартовый виртуальный диск и модули" этой лекции), а внушающая некоторые опасения надпись " unsafe " (для метки floppy ) означает всего лишь, что дискета - съемное устройство, поэтому бессмысленно во время запуска lilo проверять правильность ее загрузочного сектора и составлять карту .

Наконец, записи вида other=устройство говорят о том, что LILO неизвестен тип операционной системы , находящейся на этом устройстве, а значит, загрузить ядро невозможно. Зато ожидается, что в первом секторе устройства будет обнаружен еще один первичный загрузчик , LILO загрузит его и передаст управление по цепочке. Так и загружается MS-DOS на этой машине: первичный загрузчик берется (по метке dos ) из начала первого раздела первого диска.

GRUB

Подсистема загрузки GRUB устроена более сложно. Она также имеет первичный загрузчик , который записывается в первый сектор диска или раздела, и вторичный загрузчик , располагающийся в файловой системе . Однако карта размещения в GRUB обычно используется только для так называемого "полуторного" загрузчика ("stage 1.5") - по сути дела, драйвера одной определенной файловой системы . Процедура загрузки при этом выглядит так. Первичный загрузчик загружает полуторный по записанной в него карте размещения . Эта карта может быть очень простой, так как обычно полуторный загрузчик размещается непосредственно после первичного в нескольких секторах 4Т.е. на нулевой дорожке нулевого цилиндра, начиная с сектора 2. Эта область диска часто не используется под файловые системы (см. лекцию 11). подряд, или в ином специально отведенном месте вне файловой системы . Полуторный загрузчик умеет распознавать одну файловую систему и находить там вторичный уже по имени (обычно /boot/ grub /stage2 ). Наконец, вторичный загрузчик , пользуясь возможностями полуторного, читает из файла /boot/ grub /menu.lst меню, в котором пользователь может выбирать варианты загрузки так же, как и в LILO . Таким образом, обновление и перенастройка установленного GRUB не требует пересчета карт размещения и изменения чего-то, кроме файлов в каталоге /boot/ grub .

По требованию Мефодия Гуревич установил на двухсистемную машину GRUB . При этом файл /boot/ grub /menu.lst получился таким:

# cat /boot/grub/menu.lst default 0 timeout 50 title linux-up kernel (hd0,4)/boot/vmlinuz-up root=/dev/hda5 initrd (hd0,4)/boot/initrd-up.img title failsafe kernel (hd0,4)/boot/vmlinuz-up root=/dev/hda5 failsafe noapic nolapic acpi=off initrd (hd0,4)/boot/initrd-up.img title floppy root (fd0) chainloader +1 title dos root (hd0,0) chainloader +1 Пример 10.3. Настройка GRUB на двухсистемной машине

Разница между lilo .conf только в синтаксисе, да еще в том, что жесткие диски и разделы на них GRUB именует по-своему, в виде (hdномер_диска , номер_раздела ), причем нумеровать начинает с нуля. Метки (" title ") тоже нумеруются с нуля, так что запись default 0 означает, что по истечении тайм-аута будет загружена самая первая конфигурация (по имени " linux-up ").

Изучая руководство по GRUB , Мефодий обнаружил гораздо более важное отличие от LILO . Оказывается, в GRUB не только параметры, но и сами файлы (ядро , стартовый виртуальный диск и т.п.) распознаются и загружаются в процессе работы. Вместо пунктов меню можно выбрать режим командной строки , подозрительно похожий на bash , в котором можно заставить GRUB загрузить какое-нибудь другое, не предписанное конфигурацией, ядро , посмотреть содержимое каталогов файловой системы , распознаваемой полуторным загрузчиком , и даже содержимое этих файлов, невзирая ни на какие права доступа: система-то еще не загружена. Мало того, можно по-своему перенастроить загрузчик и записать результаты настройки. Так и не успев насладиться неожиданной свободой, Мефодий в один прекрасный день обнаружил, что выход в командную строку защищен паролем.

Действия ядра Linux в процессе начальной загрузки

Итак, проходит в три этапа.

  1. Загрузчик из ПЗУ определяет, с каких устройств можно грузиться и, возможно, предлагает пользователю выбрать одно из них. Он загружает с выбранного устройства первичный загрузчик и передает ему управление.
  2. Первичный загрузчик определяет (а чаще всего - знает), где находится вторичный загрузчик - большая и довольно интеллектуальная программа. Ему это сделать проще, чем программе из ПЗУ : во-первых, потому что для каждого устройства первичный загрузчик свой, а во-вторых, потому что его можно легко изменять при изменении настроек загружаемой системы. В схеме, предлагаемой LILO и GRUB , первичный загрузчик не вступает в разговоры с пользователем, а немедленно загружает вторичный и передает ему управление.
  3. Вторичный загрузчик достаточно умен, чтобы знать, где находится ядро системы (возможно, не одно), предложить пользователю несколько вариантов загрузки на выбор, и даже, в случае GRUB , разрешает задавать собственные варианты загрузки. Его задача - загрузить в память ядро и все необходимое для старта системы (иногда - модули, иногда - стартовый виртуальный диск ), настроить все это и передать управление ядру .

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

Давайте разделим процесс загрузки ОС Linux на девять этапов, которые имеют место практически для любой конфигурации ОС Linux:

  1. Первый этап загрузки -- это считывание BOIS"ом компьютера или другими программно-аппаратными средствами MBR жесткого диска или другого загрузочного устройства (например, компакт-диска, гибкого диска или сетевого загрузочного устройства, etc.).
  2. Начинается работа загрузчика. Linux на архитектуре x86 обычно использует LILO или GRUB. Некоторые старые системы могут использовать loadlin чтобы загрузиться через вспомогательный DOS-раздел. В системах Power PC® это может быть BootX или yaboot. Вообще, загрузчик -- это простая программа, которая, тем не менее, знает, где искать ядро Linux, может выбрать, какую загружать из нескольких версий ядра или даже выбрать другую операционную систему на той же машине.
  3. Монтируется корневая файловая система. В некоторых случаях, временно монтируется начальная корневая файловая система из содержимого, например, RAM-диска, инициализируемого загрузчиком, чтобы дать возможность загружаться специальным драйверам и модулям, которые могут понадобиться для работы настоящей корневой файловой системы.

    Теперь у нас есть корневая файловая система, и мы можем начать собственно инициализацию.

  4. Запускается процесс init , прародитель всех остальных процессов в ОС Linux.
  5. Считывается содержание файла /etc/inittab, чтобы определиться с дальнейшим ходом загрузки. Особенно важно что прописано в файле /etc/inittab в строке, определяющей уровень запуска системы (и, следовательно, последующие этапы загрузки).

    Действительно, все происходящее после этого момента полностью определяется содержимым файла /etc/inittab. Фактически, скрипты и другие инструменты, которые работают, подчиняются соответствующим настройкам, но, в принципе, вы могли бы полностью изменить /etc/inittab, чтобы управлять работой различных инструментов по вашему желанию.

    Одна из установок в файле /etc/inittab особенно важна. Это строка, похожая на:

    id:5:initdefault:

    Обычно она находится ближе к началу файла и устанавливает уровень запуска системы. Уровень запуска определяет, какие действия будут предприняты в оставшихся предписаниях файла /etc/inittab.

    Что происходит, когда сценарий /etc/inittab отработан? И особенно, какие именно файлы и директории принимают участие в процессе?

  6. Инициализация, независимая от уровня запуска. Существуют ряд действий, которые будут выполняться независимо от установленного уровня запуска. Эти шаги обозначены в /etc/inittab строками, похожими на:

    # System initialization.
    si::sysinit:/etc/rc.d/rc.sysinit

    В некоторых системах Linux (в основном в системах на основе Debian), вы скорее увидите строчки, более похожие на следующие:

    si::sysinit:/etc/init.d/rcS

    В последнем случае файл /etc/init.d/rcS -- это просто скрипт, который по очереди запускает скрипты /etc/rcS.d/??*. С другой стороны, если в вашей системе используется /etc/rc.d/rc.sysinit, для выполнения инициализации достаточно одного длинного скрипта, содержащегося в этом файле.

  7. Инициализация, зависимая от уровня запуска. Фактически, вы можете определить столько действий, связанных с уровнем запуска, сколько захотите, и при этом каждое действие может относиться к одному или нескольким уровням запуска. Как правило, /etc/inittab будет содержать строки типа:

    l0:0:wait:/etc/rc.d/rc 0
    # ...
    l5:5:wait:/etc/rc.d/rc 5
    l6:6:wait:/etc/rc.d/rc 6

    В свою очередь, скрипт /etc/rc.d/rc будет управлять всеми файлами, названными /etc/rc$1.d/??*. В следующем примере можно увидеть, что в данной системе, стартующей с уровнем запуска 5, будут выполняться (по порядку):

    /etc/rc5.d/K15postgresql
    /etc/rc5.d/S01switchprofile
    /etc/rc5.d/S05harddrake
    ...
    /etc/rc5.d/S55sshd
    ...
    /etc/rc5.d/S99linuxconf
    /etc/rc5.d/S99local

    Файлы, начинающиеся с "K" или "k" являются убивающими (kill) скриптами , они завершают процессы или упорядочивают их действия (последствия). Файлы, которые начинаются с "S" или "s" -- это запускающие (startup) скрипты , они начинают новые процессы или подготавливают систему к работе с этим уровнем запуска. Большинство из них являются скриптами shell, и большая часть их будет ссылками (часто на /etc/init.d/).

    В то время когда система Linux стартует с определенным уровнем запуска, вы хотите зарегистрироваться в системе как пользователь. Чтобы авторизация прошла успешно, используется программа getty. Множество разновидностей программ на основе getty используется создателями дистрибутивов, типа agetty, mgetty, и mingetty. Но все они делают примерно и то же.

  8. Войдите в систему в приглашении. Уже знакомый нам /etc/inittab обычно запускает getty на одном или нескольких виртуальных экранах и делает это для нескольких уровней запуска. Уровни определены в строках типа:

    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6

    Цифра в начале показывает, в каком виртуальном терминале будет работать программа getty; следующие несколько цифр -- это те уровни запуска, при которых это случится (например, запуск mingetty при каждом из уровней 2, 3, 4 и 5).

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

Понятие уровня запуска несколько произвольно, по крайней мере, оно не прописано в ядро Linux. Действительные уровни запуска сопоставлены набору номеров, чтобы можно было установить (или изменить имеющийся) по умолчанию уровень запуска выбором номера от 0 до 6. В соответствии с соглашением, следующий смысл присваивается каждому номеру уровня запуска:


Листинг 1. Уровни запуска
# Default runlevel. The runlevels used by Mandrake Linux are: # 0 - Halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you don"t have networking) # 3 - Full multiuser mode # 4 - Unused # 5 - X11 # 6 - Reboot (Do NOT set initdefault to this)

Это соглашение, как можно видеть, используется в дистрибутиве Mandrake Linux, но большинство дистрибутивов используют то же самое соглашение. Может так оказаться, что текстовые или встроенные дистрибутивы не используют некоторые из уровней запуска, но все равно ими будут зарезервированы эти же номера.

Вы видели множество строчек из файла /etc/inittab в примерах, но что же конкретно они означают? Каждая строка имеет формат:

id:runlevels:action:process

Поле id это короткое сокращение, обозначающее конфигурационную строчку. (1 - 4 буквы в свежих версиях init ; 1 - 2 в более старых). Поле runlevels уже обсуждалось. Следующее поле action обозначает действие, предпринимаемое строкой. Некоторые действия могут быть "специальными," такие как:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Эта строка устанавливает действие для последовательности клавиш Ctrl-Alt-Delete (независимо от уровня запуска). Но большинство действий просто запускает соответствующие процессы. Частичный список действий включает:

  • respawn: Процесс будет перезапущен всякий раз, когда завершится (как в случае с getty).
  • wait:Процесс будет начат однажды, когда будет введен указанный уровень запуска, и init будет ждать его завершения.
  • once: Процесс будет выполнен однажды, когда будет введен указанный уровень запуска.
  • boot: Процесс будет выполнен во время загрузки системы (но после sysinit). Уровень запуска не имеет значения.

Настройка запуска системы и процесса загрузки

Несколько лет назад для загрузки Linux на x86 системах в основном использовалась программа, названная LILO. Название LILO -- сокращение от "LInux LOader." Сейчас более популярна программа, названная GRUB (GRand Unified Bootloader). На системах, отличных от x86, используются другие загрузчики, но все они сконфигурированы аналогичным для LILO и GRUB способом.

Хотя существуют различия в их конфигурационном синтаксисе, и LILO и GRUB выполняют в значительной степени одну и ту же задачу. По существу, каждый из них предоставляет выбор операционной системы (включая, возможно, несколько ядер Linux) и загружает ядро выбранной ОС в память компьютера. Обе программы позволяют вам передавать аргументы ядру Linux по ходу, и обе могут быть сконфигурированы с возможностью загрузки на том же компьютере ОС, отличных от Linux.

Либо LILO, либо GRUB (или какой-то другой загрузчик) находится на MBR (Master Boot Record) первичного жесткого диска, который автоматически загружается системным BIOS. LILO имеет ограничения на загрузку специального raw сектора жесткого диска. Загрузчик GRUB более изощрен и распознает разные файловые системы, например, такие как ext2/3, ReiserFS, VFAT или UFS. Это означает, что GRUB не нужно перезаписывать MBR каждый раз, как только изменился конфигурационный файл (как это делает LILO).

Настройка загрузчика LILO производится при помощи содержимого файла /etc/lilo.conf. Для более детального изучения параметров настройки LILO, прочитайте страницы помощи man для lilo.conf. Общий характер поведения определяют несколько начальных параметров. Например, вы наверняка увидите boot=/dev/hda или нечто подобное. Эта команда устанавливает загрузчик на MBR первичного жесткого диска IDE. Вы можете также установить LILO внутрь конкретного раздела, обычно это нужно, когда вы используете другой основной загрузчик. Например, boot=/dev/sda3 устанавливает LILO на третий раздел первого SCSI диска. Другие параметры определяют внешний вид и время ожидания LILO.

Запомните, что после того, как вы внесете исправления в файл /etc/lilo.conf, вам необходимо запустить LILO для фактической установки нового загрузочного сектора, который используется во время загрузки. Можно легко забыть установить новые параметры, но загрузчик сам по себе не сможет прочесть новую конфигурацию, за исключением того случая, когда записаны фактические адреса секторов (которые LILO распознает в процессе работы).

Если используется LILO, особенное значение имеют строки типа image= и, может быть, other= , если имеется выбор между ОС Linux и другими операционными системами. Пример /etc/lilo.conf может содержать:


Листинг 2. Пример конфигурации LILO
image=/boot/bzImage-2.7.4 label="experimental" image=/boot/vmlinuz label="linux" initrd=/boot/initrd.img append="devfs=mount acpi=off quiet" vga=788 read-only other=/dev/hda3 label=dos

Такая конфигурация позволяет вам выбирать либо ядро версии 2.7.4, которое находится в стадии разработки, либо стабильное ядро (далее объявлено, что использовать как стартовый RAM-диск (initrd) в процессе загрузки). Вы можете также выбрать DOS, которая находится на третьем разделе первичного IDE диска.

Бесспорным преимуществом GRUB является то, что его не надо переустанавливать всякий раз, после того как вы изменили параметры загрузки. Конечно, в первый раз GRUB все же нужно установить, обычно это делается командой типа grub-install /dev/hda . Как правило, в процессе инсталляции дистрибутив делает это для вас сам, так что вы, может статься, так ни разу сами этого и не сделаете.


Листинг 3. Пример конфигурации GRUB
timeout 5 color black/yellow yellow/black default 0 password secretword title linux kernel (hd0,1)/boot/vmlinuz root=/dev/hda2 quiet vga=788 acpi=off initrd (hd0,1)/boot/initrd.img title experimental kernel (hd0,1)/boot/bzImage-2.7.4 root=/dev/hda2 quiet title dos root (hd0,4) makeactive chainloader +1

И LILO и GRUB позволяют передать специальные параметры выбранному вами ядру. Если вы используете LILO, вы можете передать параметры приглашению boot добавлением их к выбранному вами ядру. Например, для обычных параметров загрузки вы можете ввести:

LILO: linux ether=9,0x300,0xd0000 root=/dev/ha2 vga=791 acpi=on

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

Особенное значение имеет параметр, который изменяет уровень запуска системы загрузчиком. Например, в целях восстановления системы, вы хотите загрузить систему в однопользовательском режиме. Осуществляется это следующим образом:

LILO: experimental single

Другой специальный параметр -- аргумент init= , который позволяет вам использовать программы, отличные от init в качестве первичного процесса. Параметры для режима аварийной ситуации могут быть следующими: init=/bin/sh , что, по крайней мере, позволит вам иметь в своем распоряжении командную строку (Linux shell), если init совсем вышел из строя.

С загрузчиком GRUB вы имеете еще большую гибкость. Фактически, GRUB представляет из себя оболочку командной строки и предоставляет пользователю базовую функциональность shell. GRUB дает возможность не только изменить базовую конфигурацию загрузчика, но даже читать файловые системы. Для настройки параметров загрузки, нажмите "e" в командной строке GRUB, после этого добавьте параметры (например, номер уровня запуска или ключевое слово "single" как в LILO). Все другие аргументы в приглашении загрузки, которые вы могли бы ввести, используя LILO, могут быть использованы в командной строке GRUB.

Для понимания своих возможностей вы можете открыть командную строку GRUB. Например, предположите, что вам кажется, что ваш файл /etc/inittab плохо сконфигурирован, и вы хотите исследовать это перед загрузкой. Вы могли бы ввести:

grub> cat (hd0,2)/etc/inittab

Это позволило бы заранее просмотреть ваш инициализацонный файл, без запуска операционной системы. Если бы там обнаружилась ошибка, то можно было бы загрузиться в однопользовательский режим и исправить ее.

Как только вы осознаете шаги в загрузке Linux после загрузки ядра (другими словами, процесс init и все, что он вызывает), вы также осознаете, как их отредактировать. В основном, вся настройка осуществляется редактированием файла /etc/inittab и различных скриптов в каталоге /etc/rc?.d/.

Например, недавно мне понадобилось настроить видео BIOS на ноутбуке с Linux, базирующемся на Debian, использующем разработки третьих фирм. Если он не был запущен до того, как запустятся X11, мой драйвер XOrg не установил бы правильные режимы видео. Как только я выяснил, в чем была проблема, решение было столь же просто, как создание скрипта /etc/rcS.d/S56-resolution.sh. Другими словами, я запускал дополнительный скрипт при каждой загрузке системы.

Замечу, что я удостоверился, что этот скрипт исполняется раньше, чем /etc/rcS.d/S70xorg-common вследствии простого соглашения, что скрипты запускаются в алфавитном порядке (если бы я хотел, чтобы мой скрипт выполнялся позже, я, возможно, назвал бы его S98-resolution.sh вместо /etc/rcS.d/S56-resolution.sh). Может быть, я поместил бы этот скрипт только в каталог /etc/rc5.d/, чтобы он запускался, когда выполняются X11, но я могу вручную запустить startx из-под другого уровня запуска.

Все настройки в процессе инициализации открыты для редактирования, прямо в файловой системе; почти все можно исправить с помощью текстовых скриптов.

Восстановление файловой системы

Самое замечательное свойство Linux, которое рассматривается в перспективе обслуживания системы, это то, что все является файлом. Конечно, время от времени возникает вопрос , в каком файле что живет. Но зато, как правило, восстановление Linux означает применение основных утилит файловой системы, таких как cp , mv , rm и текстовый редактор типа vi. Для автоматизации этих действий полезны такие инструменты как grep, awk и bash; или на более высоком уровне, perl или python. Но в данном учебном пособии мы не ставим целью изучать обращение с файлами.

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

Ваш лучший друг в восстановлении поврежденной файловой системы fsck .

Команда fsck является фактически только началом команды для большого количества других инструментов fsck.* -- fsck.ext2 , fsck.ext3 , или fsck.reiser . Вы можете определить тип явно, используя опцию -t , но fsck предпримет усилие понять самостоятельно. Прочитайте страницу помощи man для fsck или fsck.* для получения более подробной информации. Основное, что вам нужно знать, что при использовании аргумента -a программа будет пытаться исправить все найденные ошибки.

Вы можете проверить неподмонтированную файловую систему, упоминая местонахождение устройства, на котором она находится. Например, введите fsck /dev/hda8 , чтобы проверить неиспользующийся раздел. Вы можете также проверить корневую файловую систему, набрав fsck /home , но как правило, делают это, только если файловая система уже смонтирована как "только для чтения", а не для "чтения-записи".

Одно из основных преимуществ систем Linux состоит в гибкости пользовательского контроля, при монтировании и отмонтировании файловых системам. В отличие от Windows и некоторых других операционных систем, местоположения разделов не автоматически закреплены ядром Linux, а присоединены к иерархии корневой файловой системы командой mount . Кроме того, различные типы файловых систем (даже на различных устройствах) могут быть смонтированы в рамках той же самой иерархии. Вы можете отмонтировать конкретный раздел командой umount , назначать любую точку монтирования (например, /home) или адрес устройства (например, /dev/hda7).

Когда производится восстановление файловой системы, возможность управлять точками монтирования позволяет вам проводить анализ состояния разделов, используя fsck или другие инструменты, без риска дальнейшего повреждения уже поврежденной файловой системы. Вы можете также в обычном порядке монтировать файловую систему, используя различные параметры; самые важные из них монтируют файловую систему для использования только в режиме чтения с помощью одного из синонимов -r или -o ro .

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

# umount /home # old /dev/hda7 home dir
# mount -t xfs /dev/sda1 /home # new SCSI disk using XFS
# mount -t ext3 /dev/sda2 /tmp # also put the /tmp on SCSI

Для восстановления, модернизации системы, и специальных целей полезно иметь возможность монтировать и отмонтировать файловые системы по желанию. Но для повседневной работы, вам будет удобно, чтобы необходимый конкретный набор подмонтирований осуществлялся автоматически при каждой загрузке системы. Вы управляете точками монтирования, прописывая нужные строки конфигурации в файл /etc/fstab. Типичная конфигурация могла бы выглядеть так:


Листинг 4. Пример конфигурации в /etc/fstab
/dev/hda7 / ext3 defaults 1 1 none /dev/pts devpts mode=0620 0 0 /dev/hda9 /home ext3 defaults 1 2 none /mnt/cdrom supermount dev=/dev/hdc,fs=auto,ro,--,iocharset=iso8859-1,codepage=850,umask=0 0 0 none /mnt/floppy supermount dev=/dev/fd0,fs=auto,--,iocharset=iso8859-1,sync,codepage=850,umask=0 0 0 none /proc proc defaults 0 0 /dev/hda8 swap swap defaults 0 0

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

Сразу после запуска компьютера появляется приглашение нажать специальную клавишу для запуска меню BIOS, если этого не сделать продолжится загрузка системы. Дальше мы рассмотрим что же происходит на каждом этапе загрузки linux.

BIOS (Basic Input Output System) - это программное обеспечение, предварительно встроенное в чипсет материнской платы. BIOS загружает компьютер и сканирует все его оборудование, проверяет наличие и работоспособность устройств, таких как жесткий диск, CD-ROM, RAM. На этом этапе начинается процесс загрузки ОС Linux.

Затем BIOS ищет MBR (Master Boot Record), которая обычно расположена в первом секторе жесткого диска и запускает записанный там загрузчик первой степени, например, Grub или Lilo. BIOS подготавливает загрузчик MBR, загружает все данные в оперативную память и выполняет их.

MBR занимает первых 512 байт на жестком диске. Здесь содержится информация о загрузчике операционной системы, туда записываются загрузчики большинства операционных систем, например: Linux, Unix, WIndows.

Несмотря на то, что MBR занимает место на диске, эта область не принадлежит никакому разделу. Адрес MBR, как правило, дорожка 0, цилиндр 0. Это место зарезервировано для программ начальной загрузки. Она включает не только исполняемую программу загрузчика, но и таблицу разделов на диске.

BIOS сканирует MBR, находит загрузчик первой ступени, затем сканирует таблицу разделов и находит загрузчик второй степени на разделе, который отмечен как загрузочный.

Загрузчик

Если поделить процесс загрузки Linux на этапы, это второй этап. Первая часть загрузчика, размещенная в MBR, загружает себя в оперативную память.

Затем подгружаются файлы второй части загрузчика из загрузочного раздела жесткого диска. Например, Grub или Lilo. Такое разделение нужно, потому что весь код загрузчика в 512 байт не помещается.

После запуска загрузчика Grub, он читает свой конфигурационный файл и предлагает пользователю выбрать операционную систему, которую нужно загружать.

В конфигурационном файле для каждого пункта записано ядро, которое и нужно загрузить. Обычно ядра находятся в папке /boot. Затем Grub загружает нужное ядро vmlinuz-версия

Подготовка ядра

Здесь начинается загрузка ядра Linux. Grub резервирует место в оперативной памяти для образа Initrd, затем загружает туда этот образ. В этом образе содержится начальная файловая система, необходимые при ранней загрузке модули и утилиты, например, для работы с Btrfs или зашифрованным разделом. Затем загрузчик подготавливает ядро к загрузке и загружает необходимые модули, чтобы можно было начать процесс инициализации.

В Linux, большинство проприетарных драйверов собраны в виде модулей и размещены на загрузочном диске initrd.img. Таким образом, когда ядро загружается, в initrd уже доступны все необходимые модули.

После того как ядро загрузит все необходимое и выполнит начальную инициализацию, загрузка ядра Linux считается завершенной и запускается процесс инициализации системы, так называемый, init процесс, его можно задать вручную, например, опцией ядра init.

Инициализация ядра

Инициализация ядра включает такие этапы:

  • Инициализация компонентов процессора, например MMU
  • Инициализация планировщика (PID 0)
  • Монтирование файловой системы в режиме чтения и записи
  • Форк процесса инициализации (PID 1)

В процессе инициализации ядро выполняет следующие задачи:

  • Запуск основной системы и общего менеджера ресурсов (RAM, процессор, жесткий диск)
  • Запуск процесса инициализации (/sbin/init)

Система инициализации

Именно на этом этапе процесс загрузки Linux наиболее подвержен ошибкам. После того, как ядро передало управление системе инициализации, начинается подготовка системы к работе и запуск всех необходимых сервисов - логгирования, обмена системными сообщениями, настройка сети, подготовка сетевых файловых систем, настройка звука, монтирование локальных файловых систем и другие системные компоненты. На данный момент используется в большинстве случаев одна из двух самых популярных систем инициализации - SysVinit или Systemd.

Процесс загрузки в каждом из случаев немного отличается, но суть одна и та же.

В SysVinit сначала запускается программа /sbin/init, затем она читает файл параметров /etc/inittab чтобы определить нужный уровень запуска по умолчанию. Вот эти уровни загрузки Linux:

  • 0 - выключение
  • 1 - Однопользовательский режим
  • 2 - Многопользовательский режим без сети
  • 3 - Полноценный режим
  • 4 - Не используется
  • 5 - Запуск X11

Уровни загрузки Linux можно переключать и вручную, с помощью команды telinit. По умолчанию используется, обычно, уровень 5.

Затем выполняется скрипт /etc/rc.d/rc.sysinit, а также все скрипты из папки /etc/rc.d/rcx, где x - номер уровня запуска. Например если мы загружаемся с уровнем запуска 5, то будут выполнены все скрипты из папки /etc/rc.d/rc5.d.

Имена скриптов запуска начинаются с буквы S, а завершения - K. После рассмотрения этой структуры, вы уже понимаете как работает автозагрузка сервисов в Linux? Теперь вы можете добавить скрипт в автозагрузку вручную просто создав символическую ссылку в нужной папке.

После выполнения всех этих действий системе остается только запустить все виртуальные консоли TTY и менеджер входа в систему, например XDM или SDDM.

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

Но суть процесса загрузки та же, запускаются такие же сервисы. Вместо уровней запуска используются специальные юниты - .target. Имя юнита содержит номер уровня запуска и слово runlevel. Например: runlevel0.target - отключение, и т д. Эти юниты и тянут за собой в зависимостях все необходимые сервисы для нормальной работы системы.

Linux обычно ставят после Windows так, чтобы GRUB затер загрузчик Windows и отображал во время загрузки обе системы. По умолчанию сначала идет Linux, в конце - Windows. Кого-то такое порядок может не устраивать . Есть и другой важный параметр - время ожидания.

Обычно приходится ждать 10 секунд, и только потом грузится первая ОС. Этот параметр можно легко изменить .

Все, что нужно сделать, - это отредактировать файл «grub.cfg» . Чтобы обезопасить себя, будем работать с копией файла на рабочем столе. Чтобы изменения можно было сохранить, файл нужно открыть от имени администратора - для этого используем консоль .

1 . Заходим в папку «boot/grub/ » и копируем файл «grub.cfg » на рабочий стол. Это можно делать через консоль или через файловый менеджер .


Если выбираете консоль, то введите команду: «sudo cp /boot/grub/grub.cfg /home/kij/Desktop/ » .


«kij» - это имя пользователя, у вас оно наверняка другое.

2 . Открываем файл «grub.cfg » на рабочем столе в текстовом редакторе. Делаем это через консоль: «sudo kate /home/kij/Desktop/grub.cfg »

«kate » - это текстовый редактор Linux Mint KDE 15. Если у вас другой дистрибутив, то и редактор, скорее всего, другой, например, «gedit ».

3. Обращаем внимание на строку «set default=0 ».

Каждый пункт в GRUB имеет свой номер:

Linux - 0;

Linux...recovery mode - 1;

Memory test - 2;

Memory test (другая модификация) - 3;

Windows 7 - 4.


У вас может быть немного по-другому. В моем случае показатель default должен равняться 4, тогда по умолчанию будет грузиться Windows.

4. Теперь изменяем временный параметр. Ищем в том же «grub.cfg » строку «set timeout=... ».


Выставляем, сколько нужно. Если компьютер используют несколько пользователей, выставляем длительный таймаут - секунд 30. Если постоянно загружаете одну ОС, то ставьте 2-3 секунды.

5. Сохраняем изменения. Закрываем редактор.

6. Копируем файл с рабочего стола обратно в системную папку. Используем команду «sudo cp /home/kij/Desktop/grub.cfg /boot/grub/ ».


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

Для выбора и запуска операционной системы во время загрузки компьютера используется специализированная программа - загрузчик. Самый популярный загрузчик - Grub. При установке нескольких операционных систем, например, Linux поверх Windows, в меню загрузчика первой будет последняя установленная ОС.

Это не вызовет проблем у пользователей, которые пользуются Linux как основной системой, для них это даже более предпочтительный вариант. Но если вы еще новичок, и хотите использовать Linux второй системой, а Windows пока еще основной, до тех пор, пока не освоитесь, то наверное захотите чтобы первой была Windows. В этой статье мы рассмотрим как сделать загрузку Windows первой в Grub. Рассмотрим два способа: с помощью программы Grub Customizer и вручную, через файлы конфигурации загрузчика Grub.

Grub Customizer

Grub Customizer - это программа, позволяющая настраивать различные параметры загрузчика Grub. В том числе и положение и очередность пунктов загрузки. Установить программу можно из официальных репозиториев. Например, в Ubuntu нужно использовать ppa:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
$ sudo apt-get update
$ sudo apt-get install grub-customizer

Для запуска программы откройте терминал (Ctrl+Alt+T) и наберите grub-customizer:

Для работы программы необходимы права root, в некоторых системах возможно придется использовать такую команду:

gksu grub-customizer

Также программу можно запустить из главного меню. Главное окно выглядит вот так:

Несколько секунд после запуска программа будет сканировать установленные операционные системы, затем в этом же окне мы сможем перенести загрузку Windows на первое место. Для этого кликните на нужном пункте правой кнопкой чтобы открылось контекстное меню:

В меню выберите пункт Переместить вверх . Это действие нужно будет повторить несколько раз, пока Windows не будет первой в списке. Теперь будет выполняться загрузка windows по умолчанию grub.

Если потом вы захотите опустить Windows обратно вниз, есть обратное действие - Переместить вниз .

Для сохранения настроек просто нажмите кнопку Сохранить. Готово. Можете перезагружать компьютер и смотреть что получилось.

Но я хочу затронуть еще пару настроек, которые могут быть полезны. Вместо того чтобы делать загрузку Windows первой в Grub, можно изменить пункт запускаемый по умолчанию. Перейдите на вкладку Основные настройки :

Здесь для выбора пункта по умолчанию используемого по умолчанию есть список Задействовать :

Кроме того, можно загружать по умолчанию последнюю загруженную ОС, для этого есть галочка:

Изменение порядка загрузки Grub через терминал

Как я и обещал, теперь рассмотрим как сделать загрузку WIndows первой в Grub с помощью конфигурационных файлов. Конфигурация Grub находится в файле /boot/grub/grub.cfg.

gksu gedit /boot/grub/grub.cfg

Как правило, строки меню выглядят вот так:

menuentry имя_пункта --опции {
...

Например пункт Windows:

menuentry "Windows 8 (loader) (on /dev/sda1)" --class windows --class os $menuentry_id_option "osprob
er-chain-FC324E26324DE66C" {
....

Теперь чтобы изменить порядок пунктов меню достаточно вырезать все до обратной закрывающей скобочки, вместе с этой строкой, и вставить перед всеми другими пунктами. Затем можно сохранить файл и готово. Перезагружайте и смотрите. Загрузка Windows выполняется по умолчанию. Только минусом данного способа является то, что при обновлении конфигурации Grub все настройки собьются.

Аналогично тому как мы настраивали пункт, загружаемый по умолчанию в Grub Customizer, это можно сделать и в терминале.

Откройте файл /etc/default/grub.

gksu gedit /etc/default/grub

Здесь нас интересует строчка:

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

GRUB_DEFAULT="Windows 8 (loader) (on /dev/sda1)"

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

sudo grep menuentry /boot/grub/grub.cfg

Еще можно настроить загрузку последней загруженной системы, для этого добавьте строчку

GRUB_SAVEDEFAULT=true

А в GRUB_DEFAULT укажите saved:

GRUB_DEFAULT=saved

Очевидным плюсом этого способа есть то, что настройки во время обновления конфигурации Grub не собьются, так как во время обновления информация берется из этого файла. Теперь давайте обновим конфигурацию и сохраним настройки командой:

Не во всех системах работает такой вариант, поэтому можно использовать другую команду:

grub2-mkconfig -o /boot/grub/grub.cfg

Вот и все. Теперь вы знаете как сделать загрузку Windows первой в Grub. Но представленную в этой статье информацию можно использовать в более широких целях. Она будет полезна не только для Windows, но и для любых других нескольких систем, очередностью загрузки которых нужно управлять.

Похожие записи:


Последние материалы раздела:

Отслеживание Pony Express
Отслеживание Pony Express

Оцени статью: В этот раз поговорим об одном из популярных в последнее время способах доставки товаров из Китая, а именно о курьерской службе...

В каком году появилась первая компьютерная сеть
В каком году появилась первая компьютерная сеть

Добрый день, друзья. Сейчас в большинстве домов нашей страны есть компьютеры. Мы к ним так привыкли, что они становятся неотъемлемой частью дома....

Как удалить подписчиков в контакте не занося их в черный список
Как удалить подписчиков в контакте не занося их в черный список

Чтобы следить за новостями человека ВКонтакте, теперь можно не ждать, пока он одобрит заявку в «Друзья». На пользователя можно подписаться вне...