Linux Botas

Como se vê, não há muito com o processo de boot:

1. Um gerenciador de inicialização Encontra a imagem do kernel no disco, carrega na memória, e inicia-lo.
2. O kernel inicializar os dispositivos e drivers de DST.
3. O kernel monta o sistema de arquivos raiz.
4. O kernel inicia o init Chamado para agendar.
5. init configura o resto dos Processos em movimento.
6. Os últimos processos de inicialização que começa como parte da seqüência de inicialização permitem que você faça logon.

Identificação de cada fase do processo de boot é inestimável em resolver os problemas de inicialização e compreensão do sistema como um todo. Para começar, zero sobre o gerenciador de inicialização, que é a tela inicial ou solicitar que você começa após o computador não DSTs power-on self-test, perguntando qual sistema operacional para executar. Depois de fazer uma escolha, o carregador de boot o kernel do Linux, entregando o controle do sistema para o kernel.

Há uma discussão detalhada do kernel Em outra parte deste livro de que este artigo foi extraído. Este artigo aborda o fase de inicialização do kernel, A fase em que o kernel imprime um monte de mensagens sobre o hardware presente no sistema. O kernel começa logo após o init ele exibe uma mensagem anunciando que o kernel tem montado o sistema de arquivos raiz:

VFS: Mounted raiz (ext2 sistema de arquivos) readonly.

Logo depois, vai aparecer uma mensagem sobre o início init, seguidos por mensagens de inicialização do sistema de serviços, e, finalmente, obter o prompt de login de algum tipo.

NOTA : On Red Hat Linux, A nota init é óbvio Especialmente, porque "Congratula-se com" você "Red Hat Linux." Todas as mensagens depois mostrar o sucesso ou fracasso em parênteses no lado direito da tela.

A maior parte deste capítulo trata de init, Porque é a parte da seqüência de boot, onde você tem o maior controle.
o init

Não há nada de especial sobre init. É um software como qualquer outro no sistema Linux, e você vai encontrar em / sbin, juntamente com os binários de outros sistemas. O principal objetivo do init é iniciar e parar outros programas em uma seqüência específica. Tudo que você precisa saber é como funciona esta seqüência.

Existem diferentes variações de poucos, mas a maioria das distribuições Linux usam o Sistema de estilo V discutido aqui. Algumas distribuições de usar uma versão mais simples que lembra o init do BSD, mas é improvável que você encontrar esse.

Runlevels

Em qualquer momento em um sistema Linux, uma certa base conjunto de processos está em execução. Este estado da máquina é chamada de nível de execução, e é indicado com um número de 0 através 6. O sistema passa a maior parte do tempo DSTs em um nível de execução simples. No entanto, quando você desligar a máquina, chaves de inicialização para um outro nível de execução, a fim de encerrar os serviços de sistema no ano de forma ordenada e dizer ao kernel para parar. Yet Another runlevel é para modo de usuário simples, discutido mais tarde.

A maneira mais fácil de obter uma alça sobre níveis de execução é de examinar o arquivo de configuração de inicialização, o / etc / inittab. Procure por uma linha como a seguinte:

id: 5: initdefault:

Que esta linha significa que o nível de execução padrão no sistema é 5. Todas as linhas no arquivo inittab tomar essa forma, com quatro campos separados por dois pontos que ocorrem na seguinte ordem:
# Um identificador exclusivo (uma cadeia curta, como o ID no exemplo anterior)
# O número runlevel aplicável (s)
# O init que deve agir (no exemplo anterior, a ação é para definir o nível de execução padrão para 5)
# Um comando para executar (opcional)

Não há comando para executar no exemplo anterior initdefault Porque o comando não faz sentido no contexto de definir o nível de execução padrão. Olhar um pouco mais para baixo no inittab, até ver uma linha como esta:

l5: 5: esperar :/ etc / rc.d / rc 5

Esta linha aciona a maior parte da configuração do sistema e serviços através da rc *. D e init.d. Que você pode ver init é configurado para executar o comando chamado / etc / rc.d / rc 5 Quando em nível de execução 5. A ação diz esperar Quando e como o init executa o comando: executar rc 5 Ao entrar runlevel 5 uma vez, e depois esperar para este comando para terminar o antes de fazer qualquer outra coisa.

Há várias ações diferentes, além da initdefault e esperar, especialmente no que concerne ao gerenciamento de energia, eo inittab (5) no manual diz tudo sobre eles. Os que você é mais provável encontrar é explicado nas seções seguintes.

reaparecimento

A ação de respawn init para executar as causas de comando que se segue, e se o comando termina a execução, para executá-lo novamente. É provável que você ver algo semelhante a esta linha em seu arquivo inittab:

1: 2345 :/ reaparecimento tty1 sbin / mingetty

Os programas getty fornecer login instruções. A linha anterior é para o primeiro console virtual (/ dev / tty1), o que você vê quando você pressionar ALT ou Control-Alt-F1 F1. A ação de respawn traz a volta prompt de login após o logout.

ctrlaltdel

Os CtrlAltDel controles de ação o que o sistema faz quando você pressionar Control-Alt-Delete em um console virtual. Na maioria dos sistemas, este é um tipo de comando reboot com o comando de desligamento.

sysinit

A ação sysinit é a primeira coisa que o init que deve executado quando ele é iniciado, antes de introduzir qualquer runlevels.

Como Processos em runlevels começar

Agora você está pronto para aprender como init inicia os serviços do sistema, apenas o antes que ele permite que você faça logon. Lembre-se esta linha inittab anterior:

l5: 5: esperar :/ etc / rc.d / rc 5

Esta pequena linha desencadeia muitos outros programas. rc está para executar comandos, e você vai ouvir as pessoas referem-se aos comandos como scripts, programas ou serviços. Então, onde estão Estes comandos, afinal?

Para runlevel 5, neste exemplo, os comandos têm provavelmente em / etc / rc.d / rc5.d ou / etc / rc5.d. 1 runlevel usa rc1.d, runlevel usos 2 rc2.d, e assim por diante. Você pode encontrar os seguintes itens no diretório rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

O rc 5 comando inicia programas neste diretório runlevel, executando os seguintes comandos:

S10sysklogd casa
S12kerneld casa
S15netstd_init casa
S18netbase casa

S99sshd casa

Observe o argumento start em cada comando. O S em um meio de comando nome que deve executar o comando em modo de arranque, eo número (00 através 99) determina onde na seqüência rc inicia o comando.

O * rc. Comandos D geralmente é iniciar programas que shell scripts em / sbin ou / usr / sbin. Normalmente, você pode descobrir o que um dos comandos realmente faz por olhar para o script com menos ou pager Outro programa.

Você pode um desses serviços começam com a mão. Por exemplo, se você deseja iniciar o software de servidor Web httpd manualmente, correr para casa S99httpd. Da mesma forma, se você sempre precisa matar um dos serviços Quando a máquina estiver ligada, você pode executar o comando no rc *. D diretório com o argumento stop (paragem S99httpd, por exemplo).

Alguns diretórios rc *. D que contêm comandos começam com K (para "matar", ou de parada). Neste caso, rc executa o comando com o argumento stop em vez de casa. Você é mais provável encontrar comandos K ​​nos níveis de execução que desligar o sistema.

Adição e remoção de serviços

Se você deseja adicionar, excluir ou modificar os serviços nos diretórios rc *. D, você precisa dar uma olhada nos arquivos dentro. Uma lista longa revela uma estrutura como esta:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase

Os comandos no ano rc *. Diretório D é na verdade links simbólicos para os arquivos no diretório init.d ano, normalmente em / etc ou / etc / rc.d. Estes links contêm distribuições Linux para que possam utilizar os mesmos scripts de inicialização para todos os níveis de execução. Esta convenção não é de forma um requisito, mas faz organizacional muitas vezes pouco mais fácil.

Para evitar que um dos comandos no diretório init.d de execução em um nível de execução especial, você poderia pensar em remover o link simbólico no rc apropriado *. Diretório D. Isso funciona, mas se você cometer um erro e nunca a necessidade de colocar o link de volta no lugar, você pode ter dificuldade em lembrar o nome exato do link. Portanto, você não deve remover os links no rc * diretórios D, mas em vez disso, adicionar um sublinhado (_) para o início do nome do link como este.:

mv _S99httpd S99httpd

Na hora da inicialização, rc ignora _S99httpd porque não começar com S ou K. Além disso, o nome original ainda é óbvio, e você tem acesso rápido ao comando, se você estiver em uma pitada e precisa iniciá-lo com a mão.

Para adicionar um serviço, você deve criar um script como os outros no diretório init.d e depois fazer um link simbólico no rc correta *. Diretório D. A maneira mais fácil de escrever um script é examinar os scripts já em init.d, fazer uma cópia de um que você entenda, e modificar a cópia.

Ao adicionar um serviço, certifique-se de escolher Naquele ano adequado, como na seqüência de inicialização para iniciar o serviço. Se o serviço é iniciado muito cedo, ele pode não funcionar, devido à dependência de algum outro serviço. Para serviços não-essenciais, a maioria dos administradores de sistemas preferem números nas 90s, depois que a maioria dos serviços que cam com o sistema.

Normalmente distribuições Linux vem com um comando para ativar e desativar serviços no rc *. Diretórios D. Por exemplo, no Debian, o comando é update-rc.d, e em Red Hat Linux, o comando é chkconfig. Interfaces gráficas de usuário também está disponível. Usando AJUDA Estes programas manter os diretórios de inicialização consistente e ajuda com as atualizações.

DICA: Um dos problemas mais comuns de instalação do Linux é XFree86 servidor indevidamente anos configurado que flicks e fora, tornando o sistema inutilizável em console. Para acabar com este comportamento, boot em modo mono-usuário e alterar o seu nível de execução ou serviços de runlevel. Procure por algo Contendo xdm, gdm, kdm ou na sua rc *. Diretórios D, ou seu arquivo / etc / inittab.

Controlando o init

Ocasionalmente, você precisa dar o init um chute pouco a dizer-lhe para mudar níveis de execução, para re-ler o arquivo inittab, ou apenas para desligar o sistema. Porque init é sempre o primeiro processo no sistema, STI ID de processo é sempre 1.

Você pode controlar init com aipo. Por exemplo, se você quiser mudar para o nível de execução 3, use este comando:

telinit 3

Ao mudar níveis de execução, o init tenta matar todos os processos que não são um no arquivo inittab para o novo nível de execução. Portanto, você deve ser cuidadoso sobre a mudança de níveis de execução.

Quando você precisar adicionar ou remover empregos respawning ou fazer qualquer outra alteração para o arquivo inittab, você deve dizer o init sobre a mudança e fazer com que re-ler o arquivo. Algumas pessoas usam kill-HUP 1 dizer init para fazer isso. Este método tradicional funciona na maioria das versões do Unix, enquanto você digita-la corretamente. No entanto, você também pode executar este comando telinit:

telinit q

Você também pode usar telinit s para mudar para modo de usuário único.

Desligando

Também controla a inicialização como o sistema desliga e reinicia. A maneira correta de desligar uma máquina Linux é usar o comando de desligamento.

Há duas maneiras básicas de usar o desligamento. Se você parar o sistema, ele desliga a máquina para baixo e mantém-lo. Para fazer a parada da máquina imediatamente, use o comando:

shutdown-h now

Na maioria das máquinas modernas, com versões razoavelmente recentes do Linux, uma parada corta a energia da máquina. Você também pode reiniciar a máquina. Para um reboot, uso r-em vez de-h.

O processo de desligamento leva vários segundos. Você nunca deve reiniciar ou desligar a máquina durante este estágio.

No exemplo anterior, agora é a hora de encerrar. Este argumento é obrigatório, mas há muitas maneiras de especificar. Se você quer a máquina para descer em algum momento no futuro, é uma maneira de usar + N, onde N é o número de minutos de espera desligamento Antes de fazer o seu deve funcionar. Para outras opções, veja a página de manual do shutdown (8).

Para tornar o sistema reiniciar minutos 10, execute este comando:

shutdown-r + 10

No Linux, o desligamento notifica alguém conectado que a máquina está indo para baixo, mas ele faz pouco trabalho real. Se você especificar um outro tempo do que agora, o desligamento Chamado Cria o nologin arquivo / etc /. Quando este arquivo estiver presente, o sistema proíbe logins por ninguém, exceto o superusuário.

Quando o tempo de desligamento do sistema finalmente chega, o desligamento diz init para mudar para o nível de execução 0 para uma parada e 6 runlevel para um reinício. Quando o init entra runlevel 0 ou 6, todo o seguinte toma como, que você pode verificar olhando os scripts dentro rc0.d e rc6.d:

1. inicialização mata todos os processos que ele pode (como seria Quando mudar para qualquer outro nível de execução).

# Os primeiros rc0.d / rc6.d comandos executados, bloqueando os arquivos de sistema no lugar e fazer outros preparativos para o desligamento.
# Os próximos rc0.d / comandos rc6.d tudo desmontar sistemas de arquivos diferente da raiz.
# Além disso rc0.d / comandos remontar o sistema de arquivos raiz rc6.d somente leitura.
# Ainda mais rc0.d / rc6.d escrever todos os comandos no buffer para o sistema de arquivos com o programa de sincronização.
# As finais rc0.d / rc6.d comandos dizer ao kernel para reiniciar ou parar com o reboot, halt ou poweroff programa.

Os programas do reboot e halt se comportam de maneira diferente para cada nível de execução, podendo causar confusão. Por padrão, Estes programas requerem o desligamento com o r-ou-H opções, mas se o sistema já está no nível de execução halt ou reboot, os programas de dizer ao kernel para se desligar imediatamente. Se você realmente quer fechar sua máquina para baixo em uma pressa (desconsiderando qualquer dano de um desligamento desordenada Possível), use a opção-f.

Deixe um comentário

Este site usa o Akismet para reduzir o spam. Saiba como seus dados de comentário são processados.