Уровни выполнения, выключение и перезагрузка

Распространенные сообщения об ошибках в Init.dll

Наиболее распространенные ошибки Init.dll, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Init.dll не найден.»
  • «Файл Init.dll отсутствует.»
  • «Init.dll нарушение прав доступа.»
  • «Файл Init.dll не удалось зарегистрировать.»
  • «Файл C:\Windows\System32\\Init.dll не найден.»
  • «Не удалось запустить Microsoft Windows Operating System. Отсутствует необходимый компонент: Init.dll. Пожалуйста, установите Microsoft Windows Operating System заново.»
  • «Не удалось запустить данное приложение, так как не найден файл Init.dll. Повторная установка приложения может решить эту проблему.»

Такие сообщения об ошибках DLL могут появляться в процессе установки программы, когда запущена программа, связанная с Init.dll (например, Microsoft Windows Operating System), при запуске или завершении работы Windows, или даже при установке операционной системы Windows

Отслеживание момента появления ошибки Init.dll является важной информацией при устранении проблемы

Example ‘inittab’ Files

This is an example of a inittab which resembles the old Linux inittab:

# inittab for linuxid:1:initdefault:rc::bootwait:/etc/rc1:1:respawn:/etc/getty 9600 tty12:1:respawn:/etc/getty 9600 tty23:1:respawn:/etc/getty 9600 tty34:1:respawn:/etc/getty 9600 tty4

This inittab file executes /etc/rc during boot and starts gettys on tty1-tty4.

A more elaborate inittab with different runlevels:

# Level to run inid:2:initdefault:# System initialization before anything else.si::sysinit:/etc/rc.d/bcheckrc# Runlevel 0,6 is halt and reboot, 1 is maintenance mode.l0:0:wait:/etc/rc.d/rc.haltl1:1:wait:/etc/rc.d/rc.singlel2:2345:wait:/etc/rc.d/rc.multil6:6:wait:/etc/rc.d/rc.reboot# What to do at the "3 finger salute".ca::ctrlaltdel:/sbin/shutdown -t5 -rf now# Runlevel 2&3: getty on console, level 3 also getty on modem port.1:23:respawn:/sbin/getty tty1 VC linux2:23:respawn:/sbin/getty tty2 VC linux3:23:respawn:/sbin/getty tty3 VC linux4:23:respawn:/sbin/getty tty4 VC linuxS2:3:respawn:/sbin/uugetty ttyS2 M19200

Use the man command (% man) to see how a command is used on your particular computer.

Корректное завершение работы

Хотя для остановки работы пользователей и перехода в однопользовательский режим можно использовать команду или , такое неожиданное завершение работы может привести к потере пользовательских данных и аварийному завершению работающих служб и процессов. Более предпочтительным методом завершения работы или перезагрузки системы является команда , которая сначала посылает предупреждения всем работающим в системе пользователям и блокирует все дальнейшие входы в систему, а затем посылает сигнал для переключения уровней выполнения. Процесс , в свою очередь, посылает всем запущенным процессам сигнал SIGTERM, позволяя им сохранить данные и корректно завершить работу. По завершении 5 секунд (или другого определенного интервала времени) посылает сигнал SIGKILL для принудительного завершения всех оставшихся процессов.

По умолчанию команда переключает систему на уровень выполнения 1 (однопользовательский режим). Вы можете указать опцию для остановки системы или опцию – для ее перезагрузки. В дополнение к указанному вами сообщению выводится стандартное сообщение. Можно указывать абсолютное время в формате hh:mm, а также относительное время в формате n, где n – это количество минут до выключения. Для немедленного завершения работы используйте опцию now, которая эквивалентна опции +0.

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

Листинг 6. Примеры завершения работы системы
# shutdown 5 File system recovery needed

Broadcast message from root (pts/1) (Tue Jan  4 08:05:24 2011):

File system recovery needed
The system is going DOWN to maintenance mode in 5 minutes!
^C
Shutdown cancelled.
# shutdown -r 10 Reloading updated kernel&
 18784
#
Broadcast message from root (pts/1) (Tue Jan  4 08:05:53 2011):

Reloading updated kernel
The system is going DOWN for reboot in 10 minutes!

# fg
shutdown -r 10 Reloading updated kernel
^C
Shutdown cancelled.
# shutdown -h 23:59&
 18788
# shutdown -c

Shutdown cancelled.
+  Done                    shutdown -h 23:59

Вы, возможно, заметили, что в последнем примере не посылается сообщение с предупреждением. Это происходит потому, что сообщение посылается только тогда, когда до наступления события останется не более 15 минут, как показано в листинге 7. Также в листинге 7 продемонстрировано использование опции для увеличения задержки по умолчанию между сигналами SIGTERM и SIGKILL (с 5 до 60 секунд).

Листинг 7. Другой пример завершения работы
# date;shutdown -t60 17 Time to do backups&
Tue Jan  4 08:12:55 EST 2011
 18825
# date
Tue Jan  4 08:14:13 EST 2011
#
Broadcast message from root (pts/1) (Tue Jan  4 08:14:55 2011):

Time to do backups
The system is going DOWN to maintenance mode in 15 minutes!

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

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

1. System V Init

System V или SysV — это довольно старая, но до сих пор еще популярная система инициализации Linux и Unix подобных операционных систем. Она была основой для создания многих других систем инициализации, а также первой коммерческой системой инициализации разработанной для Unix в AT&T. Она была разработана еще в 1983 году.

Почти все дистрибутивы Linux изначально использовали SysV. Исключением была только Gentoo, в которой использовалась собственная система инициализации и Slackware, с инициализацией в стиле BSD.

Основные возможности SysV:

  • Написание файлов запуска служб на bash;
  • Последовательный запуск служб;
  • Сортировка порядка запуска с помощью номеров в именах файлов;
  • Команды для запуска, остановки и проверки состояния служб.

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

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

Installation¶

First, a directory for the initrd file system has to be created on the
“normal” root file system, e.g.:

# mkdir /initrd

The name is not relevant. More details can be found on the
pivot_root(2) man page.

If the root file system is created during the boot procedure (i.e. if
you’re building an install floppy), the root file system creation
procedure should create the directory.

If initrd will not be mounted in some cases, its content is still
accessible if the following device has been created:

# mknod /dev/initrd b 1 250
# chmod 400 /dev/initrd

Second, the kernel has to be compiled with RAM disk support and with
support for the initial RAM disk enabled. Also, at least all components
needed to execute programs from initrd (e.g. executable format and file
system) must be compiled into the kernel.

Third, you have to create the RAM disk image. This is done by creating a
file system on a block device, copying files to it as needed, and then
copying the content of the block device to the initrd file. With recent
kernels, at least three types of devices are suitable for that:

We’ll describe the loopback device method:

For experimenting with initrd, you may want to take a rescue floppy and
only add a symbolic link from to . Alternatively, you
can try the experimental newlib environment to create a small
initrd.

Finally, you have to boot the kernel and load initrd. Almost all Linux
boot loaders support initrd. Since the boot process is still compatible
with an older mechanism, the following boot command line parameters
have to be given:

root=/dev/ram0 rw

(rw is only necessary if writing to the initrd file system.)

With LOADLIN, you simply execute:

LOADLIN <kernel> initrd=<disk_image>

e.g.:

LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0 rw

With LILO, you add the option to either the global section
or to the section of the respective kernel in , and pass
the options using APPEND, e.g.:

image = /bzImage
  initrd = /boot/initrd.gz
  append = "root=/dev/ram0 rw"

and run

For other boot loaders, please refer to the respective documentation.

Причины ошибок в файле Init.dll

Большинство ошибок Init.dll связано с отсутствием или повреждениями файлов Init.dll. Тот факт, что Init.dll – внешний файл, открывает возможность для всяческих нежелательных последствий.

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

В других случаях ошибки файла Init.dll могут быть связаны с проблемами в реестре Windows. Нерабочие ссылки DLL файлов могут помешать зарегистрировать файл dll должным образом и вызвать ошибку Init.dll. Эти нерабочие ключи реестра могут появиться в результате отсутствия файла DLL, перемещения файла DLL или ввиду наличия остаточной ссылки DLL файла в реестре Windows после неудачной установки или удаления программы.

Более конкретно, данные ошибки Init.dll могут быть вызваны следующими причинами:

  • Ошибочные или поврежденные записи реестра для Init.dll
  • Вирус или вредоносное ПО, повредившее файл Init.dll.
  • Отказ оборудования Microsoft Corporation, например, некачественный жесткий диск, вызвавший повреждение файла Init.dll.
  • Другая программа изменила требуемую версию Init.dll.
  • Другая программа злонамеренно или по ошибке удалила файл Init.dll.
  • Другая программа удалила файл Init.dll.

DESCRIPTION

The inittab file describes which processes are
started at bootup and during normal operation (e.g.
/etc/init.d/boot, /etc/init.d/rc, gettys…). Init(8)
distinguishes multiple runlevels, each of which can
have its own set of processes that are started. Valid
runlevels are −6 plus A,
B, and C for ondemand entries. An entry
in the inittab file has the following
format:

id:runlevels:action:process

Lines beginning with ‘#’ are ignored.

id

is a unique sequence of 1-4 characters which identifies
an entry in inittab (for versions of sysvinit
compiled with the old libc5 (< 5.2.18) or a.out
libraries the limit is 2 characters).

Note: traditionally, for getty and other login processes,
the value of the id field is kept the same as the
suffix of the corresponding tty, e.g. 1 for
tty1. Some ancient login accounting programs might
expect this, though I can’t think of any.

runlevels

lists the runlevels for which the specified action should
be taken.

action

describes which action should be taken.

process

specifies the process to be executed. If the process
field starts with a ‘+’ character, init
will not do utmp and wtmp accounting for that process. This
is needed for gettys that insist on doing their own
utmp/wtmp housekeeping. This is also a historic bug.

The runlevels field may contain multiple
characters for different runlevels. For example, 123
specifies that the process should be started in runlevels 1,
2, and 3. The runlevels for ondemand entries
may contain an A, B, or C. The
runlevels field of sysinit, boot, and
bootwait entries are ignored.

When the system runlevel is changed, any running
processes that are not specified for the new runlevel are
killed, first with SIGTERM , then with
SIGKILL .

Valid actions for the action field are:

respawn

The process will be restarted whenever it terminates
(e.g. getty).

wait

The process will be started once when the specified
runlevel is entered and init will wait for its
termination.

once

The process will be executed once when the specified
runlevel is entered.

boot

The process will be executed during system boot. The
runlevels field is ignored.

bootwait

The process will be executed during system boot, while
init waits for its termination (e.g. /etc/rc). The
runlevels field is ignored.

off

This does nothing.

ondemand

A process marked with an ondemand runlevel will be
executed whenever the specified ondemand runlevel is
called. However, no runlevel change will occur
(ondemand runlevels are ‘a’,
‘b’, and ‘c’).

initdefault

An initdefault entry specifies the runlevel which
should be entered after system boot. If none exists,
init will ask for a runlevel on the console. The
process field is ignored.

sysinit

The process will be executed during system boot. It will
be executed before any boot or bootwait
entries. The runlevels field is ignored.

powerwait

The process will be executed when the power goes down.
Init is usually informed about this by a process talking to
a UPS connected to the computer. Init will wait for
the process to finish before continuing.

powerfail

As for powerwait, except that init does not
wait for the process’s completion.

powerokwait

This process will be executed as soon as init is
informormed that the power has been restored.

powerfailnow

This process will be executed when init is told
that the battery of the external UPS is almost empty and the
power is failing (provided that the external UPS and the
monitoring process are able to detect this condition).

ctrlaltdel

The process will be executed when init receives
the SIGINT signal. This means that someone on the system
console has pressed the CTRL−ALT−DEL key
combination. Typically one wants to execute some sort of
shutdown either to get into single−user level
or to reboot the machine.

kbrequest

The process will be executed when init receives a
signal from the keyboard handler that a special key
combination was pressed on the console keyboard.

The documentation for this function is not complete yet;
more documentation can be found in the kbd-x.xx packages
(most recent was kbd-0.94 at the time of this writing).
Basically you want to map some keyboard combination to the
«KeyboardSignal» action. For example, to map
Alt-Uparrow for this purpose use the following in your
keymaps file:

alt keycode 103 = KeyboardSignal

Файл /etc/inittab

Возможно, вам будет интересно, почему нажатие Ctrl-Alt-Delete в некоторых операционных системах приводит к перезагрузке, и каким образом устроены все эти уровни выполнения. Вы помните поле в файле /etc/inittab? Так вот, в файле /etc/inittab есть еще несколько полей, а в файловой системе присутствует набор сценариев инициализации, расположенных в каталогах, таких как rc1.d или rc5.d; цифра означает уровень выполнения, на котором выполняются сценарии из соответствующей директории. В листинге 8 показано полное содержимое файла inittab в нашей операционной системе Fedora 8.

Листинг 8. Полное содержимое файла inittab в ОС Fedora 8
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

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

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# 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

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Как обычно, строки, начинающиеся с # – это комментарии. Остальные строки содержат несколько полей в следующем формате:

идентификатор id
Уникальный идентификатор, состоящий из 1-4 символов. В более ранних версиях идентификатор состоял не более чем из двух символов, поэтому часто используются только два символа.
уровни выполнения
Список уровней выполнения, на которых выполняется действие, определенное для данного идентификатора. Если уровни выполнения не указаны, то действие выполняется на всех уровнях.
действие
Одно из возможных действий, которое будет выполняться.
процесс
Процесс (может быть не указан), который должен быть запущен при выполнении действия, определенного в строке.

Некоторые действия, которые можно указать в файле /etc/inittab, перечислены в таблице 3. О других возможностях inittab вы можете узнать из man-страниц.

Таблица 3. Некоторые распространенные действия inittab
Действие Назначение
respawn Перезапустить процесс, если он завершается. Обычно используется для процессов getty, которые отслеживают входы в систему.
wait Запустить процесс при переключении на заданный уровень выполнения и ждать его завершения перед запуском init.
once Запустить процесс при переключении на заданный уровень выполнения.
initdefault Указывает уровень выполнения, переключение на который осуществляется после загрузки системы.
ctrlaltdel Запустить назначенный процесс при получении процессом init сигнала SIGINT (например, при нажатии CTRL-ALT-DEL на системной консоли).

В листинге 9 показана запись для комбинации Ctrl-Alt-Delete (фрагмент листинга 8). Итак, теперь вы видите, почему нажатие комбинации Ctrl-Alt-Delete приводит к перезагрузке системы.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *