Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Процесс начальной загрузки системы

Загрузка Linux менее, чем за 40 секунд

Оригинал: Booting Linux in Less Than 40 Seconds
Автор: Alessandro Franci
Дата: Февраль 2008
Перевод: Андрей Синицын aka boombick
Дата перевода: 25 февраля 2009

При копировании материала обязательны указание автора, переводчика и ссылки на оригинал статьи и настоящую страницу как первоисточник перевода!

Частенько хочется, чтобы Linux-система грузиалсь побыстрее. Ну, скажем, за минуту. Мечты становятся реальностью: теперь есть возможность получить полностью работоспособную систему в том состоянии, в котором вы ее оставили, менее чем через 40 секунд после нажатия кнопки Power. Даже лучше, чем вы хотели, не так ли? "Не верю, это невозможно" - скажете вы. Ну чтож, смотрите сами.

Удивлены? Держу пари, что да. А на самом деле это очень просто и называется это - гибернация (hibernation). Прим. перевод. В своем исходном значении это слово переводится как "находиться в зимней спячке", дремать".

Что это такое?

В процессе "засыпания" (или гибернации) содержимое оперативной памяти записывается на swap-раздел перед выключением компьютера. При старте система восстанавливается в том состоянии, в котором была на момент "усыпления", все программы продолжают выполняться, как будто бы выключения и не происходило. Как можно увидеть на видео, процесс "пробуждения" проходит гораздо быстрее, чем перезагрузка.

Приступим

Для начала нам понадобится раздел подкачки, если у вас его нет, то необходимо его создать. Его объем должен быть больше, чем объем оперативной памяти, установленной на вашем компьютере. Если он меньше, то увеличьте его. Для работы с разделами можно использовать такие приложения, как parted, fdisk, cfdisk (утилиты командной строки) или gparted (программа с графическим интерфейсом). После создания или изменения раздела подкачки, его необходимо активировать:

# mkswap /dev/devX
# swapon /dev/devX

где devX - это ваш swap-раздел (например hda8, sda1 и т. д.)

Наложение патчей на ядро

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

Загрузите патчи для вашей версии ядра отсюда: http://www.tuxonice.net/downloads/.

Если патча для вашей версии нет, то самое время обновить ядро :)
Кстати, не стоит беспокоится о минорной версии ядра. Например, если у вас, как и у меня, ядро версии 2.6.23.13, а патч имеется только для версии 2.6.23.9, то не стоит делать даунгрейд до более ранней версии, качайте и устанавливайте патч для 2.6.23.9 - он нормально будет работать.

Применим скачанный патч:

cd /usr/src/linux-2.6.xx.xx
bzcat /path/to/patch | patch -p1

где 2.6.xx.xx - версия вашего ядра. Теперь сконфигурируем ядро и добавим нужную нам функциональность

Power management options  ---> 
		[*] Power Management support
		[*] Hibernation (aka 'suspend to disk')
		<*>   Enhanced Hibernation (TuxOnIce) (NEW)  --->
    			<*>   File Allocator
    			<*>   Swap Allocator
    			<*>   Compression support
    			<*>   Userspace User Interface support
    			[ ]   Allow Keep Image Mode
    			[*]   Replace swsusp by default
    			< >   Cluster support  --->
    			[*]   Checksum pageset2
    			(25)  Default waiting time for emergency boot messages
    			< >   Test pageflags

Проверьте, активен ли DMA-режим для вашего жесткого диска. Поверьте, это реально увеличит скорость "засыпания" и "пробуждения" компьютера.

Device Drivers  --->
		DMA Engine support  --->
				[*] Support for DMA engines

Также имеет смысл активировать поддержку алгоритма сжатия LZF, это уменьшит объем данных при записи и сделает гибернацию более быстрой

Cryptographic API  --->
		<*>   LZF compression algorithm

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

Настройка загрузчика

Теперь настроим загрузчик. Надо добавить вот эту строчку resume=swap:/dev/devX resume2=swap:/dev/devX (devX - это ваш swap-раздел) в дополнительную секцию конфиг-файла загрузчика.
Если вы используете lilo, то исправьте /etc/lilo.conf, как в примере ниже:

image = /boot/vmlinuz
  root = /dev/hda6
  label = Slackware
  append = "fb=no resume=swap:/dev/hda8 resume2=swap:/dev/hda8"

и не забудьте обновить boot-сектор

# lilo -v

Если же вы используете Grub, то отредактируйте /boot/grub/menu.lst, как показано ниже:

title Slackware
root (hd0,5)
kernel /boot/vmlinuz root=/dev/hda6 fb=no resume=swap:/dev/hda8 resume2=swap:/dev/hda8
ro quiet splash
boot

Перезагрузка

Перезагрузите компьютер с вашим новым ядром. Если все прошло успешно, то во время загрузки (или в выводе команды dmesg) должны присутствовать следующие строки:

TuxOnIce 3.0-rc3, with support for checksumming, usm, compression, swap storage, file storage, userui.
TuxOnIce: Normal swapspace found.

Если их нет, то проверьте, активен ли Swap?

$ free|grep Swap
Swap:       497972     115020     382952

Если в результате вы получили серию нолей, вы забыли настроить раздел подкачки. Настройте его, как описывалось выше, и повторите перезагрузку

Установка скрипта для "засыпания"

Теперь установим hibernate-скрипт. Скачайте его с http://www.tuxonice.net/downloads/, распакуйте и установите:

$ tar -xzvf hibernate-script-x.xx.tar.gz
$ cd hibernate-script-x.xx
# ./install.sh

Конфигурирование hibernate

Для корректного протекания процесса "засыпания" необходимо поправить несколько файлов. Откройте /etc/hibernate/hibernate.conf и добавьте туда следующие строки:

TryMethod suspend2.conf
TryMethod disk.conf
TryMethod ram.conf

А в файл /etc/hibernate/suspend2.conf следующие:

UseSuspend2 yes
Reboot no
EnableEscape yes
DefaultConsoleLevel 1
Compressor lzf
Encryptor none
ImageSizeLimit 0
SuspendDevice swap:/dev/devX
PowerdownMethod 5
FullSpeedCPU yes
Include common.conf

где devX - ваш swap-раздел

Проверка DMA-режима

Проверьте, активен ли DMA-режим:

# hdparm /dev/hda|grep dma
 using_dma     =  1 (on)

hda следует заменить на именование вашего винчестера. Если DMA-режим неактивен, то включите его:

# hdparm -d1 /dev/hda

Для автоматического включения DMA добавьте вызов команды в ваш rc.local (/etc/rc.d/rc.local или /etc/rc.local, в зависимости от вашего дистрибутива)

# Enabling DMA Engine
echo "Enabling DMA Engine on /dev/hda"
hdparm -d1 /dev/hda

Пробуем!!

Давайте попробуем

# hibernate -n

Опция -n симулирует процесс гибернации. Если все прошло успешно, то можно запустить "настоящую" гибернацию

# hibernate

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

# hibernate -r1

Если все работает правильно, то система должна восстановиться в том состоянии, в котором она была на момент выключения. Если что-то работает неправильно (например, звук или сетевое соединение), то добавьте нужные модули в файл /etc/hibernate/blacklisted-modules. В примере мы добавляем модули для видеокарты, звука и сетевой карты

ipw2100
nvidia
snd_maestro3

В случае появления проблем изучайте документацию на http://www.tuxonice.net/

И в заключение

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