Prévia do material em texto
ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola MÓDULO 02 1 Gerência de boot O processo de inicialização (boot) do Linux é o procedimento para inici- alizar o sistema (descrito na figura 1). Consiste em tudo o que acontece desde quando o computador é ligado até que a interface do usuário esteja operacional. 1.1 BIOS A inicialização de um sistema Linux baseado em x86 envolve várias eta- pas. Assim que o computador é ligado, oBasic Input/Output System (BIOS) inicializa o hardware, incluindo a tela e o teclado, e testa a memória prin- cipal. Esse processo também é chamado POST (Power On Self Test). O software do BIOS é armazenado em um chip ROM na placa-mãe. Depois disso, o restante do processo de inicialização é controlado pelo sistema operacional (SO). 1.2 Registro Mestre de incialização Depois que o POST é concluído, o controle do sistema passa do BIOS para o carregador de inicialização. O carregador de inicialização (boot loader) é normalmente armazenado em um dos discos rígidos do sistema. Seja no setor de inicialização (BIOS/MBR) ou na partição EFI em sistemas mais recentes (Extensible Firmware Interface ou EFI/UEFI). Posteriormente, informações importantes são carregados dos valores CMOS. Uma memória movida a bateria, que permite que o sistema man- tenha a data e hora, mesmo quando está desligado. Após esta etapa, o boot loader é carregado. Existem vários carre- gadores de inicialização para o Linux: O mais comum é o GRUB (GRe Unified Boot loader). Existindo também o ISOLINUX (inicializar a partir de Ciência da Computação/Sistemas da Informação Página 1 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola Figura 1: Processo de inicialização Linux. mídia removível) e o DAS U-Boot (para inicializar em dispositivos embar- cados/aparelhos). A maioria dos carregadores de boot pode apresentar uma interface de usuário para escolher opções alternativas para inicializar o Linux. E até mesmo outros sistemas operacionais que possam estar instalados. 1.3 Carregador de boot Ao inicializar o Linux, o gerenciador de inicialização é responsável por carregar a imagem do kernel e o sistema de arquivos (que contém alguns arquivos críticos e drivers de dispositivo necessários para iniciar o sistema) na memória. O carregador de boot (do inglês: Boot Loader) tem dois Ciência da Computação/Sistemas da Informação Página 2 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola Figura 2: Processo de inicialização de hardware pela BIOS. Figura 3: Registro mestre de incialização (do inglês: Master Boot Record– MBR). Ciência da Computação/Sistemas da Informação Página 3 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola estágios distintos: 1.3.1 Primeiro estágio Em sistemas usando o método BIOS/MBR, o carregador de boot reside no primeiro setor do disco rígido, também conhecido como o Master Boot Record (MBR). Nesse estágio, o carregador de boot examina a tabela de partições e encontra uma partição inicializável. Após encontrar uma partição inicializável, ele procura o carregador de inicialização do segundo estágio, por exemplo, GRUB, e o carrega na memória RAM. Para sistemas que usam o método EFI/UEFI, o firmware UEFI lê seus dados do gerenciador de boot para determinar qual aplicativo UEFI deve ser lançado e de onde (ou seja, de qual disco e partição a partição EFI pode ser localizada). O firmware então inicia o aplicativo UEFI, por exemplo, GRUB, con- forme definido na entrada de inicialização no gerenciador de inicialização do firmware. Este procedimento é mais complicado, mas mais versátil que os métodos MBR que são mais antigos. 1.3.2 Segundo estágio O carregador de inicialização do segundo estágio, no caso o GRUB reside em /boot. Uma tela inicial é exibida, o que nos permite escolher qual SO será inicializado. Após escolher o sistema operacional, o carregador de boot carrega o kernel do sistema operacional selecionado na RAM e passa o controle para ele. Os kernels são quase sempre compactados, então seu primeiro traba- lho é descomprimir-se. Depois disso, ele verificará e analisará o hardware do sistema e inicializa-rá todos os drivers de dispositivo de hardware em- butidos no kernel. 1.4 Disco inicial A imagem do sistema de arquivos initramfs contém programas e arquivos binários que realizam todas as ações necessárias para montar o sistema de arquivos raiz adequado, fornecer a funcionalidade de kernel para os dri- Ciência da Computação/Sistemas da Informação Página 4 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola vers do sistema de arquivos e dispositivos necessários para controladores de armazenamento em massa. Assim sendo, esta etapa utiliza um mecanismo chamado udev (User Device), responsável por descobrir quais dispositivos estão presentes, lo- calizar os drivers (módulos) de que precisam para funcionar corretamente e carregá-los. Depois que o sistema de arquivos raiz foi encontrado, ele é verificado quanto a erros e montado. O programa de montagem instrui o sistema operacional de que um sis- tema de arquivos está pronto para uso e o associa a um ponto específico na hierarquia geral do sistema de arquivos (o ponto de montagem). Se isso for bem-sucedido, o initramfs será limpo da RAM e o programa init, no sistema de arquivos raiz (/sbin/init) será executado. O init manipula a montagem e faz o manejo para o sistema de arquivos raiz final. Se drivers de hardware especiais forem necessários antes que o armazenamento em massa possa ser acessado, eles devem estar na imagem initramfs. 2 Níveis de operação Níveis de operação (do inglês: Runlevels) servem basicamente para es- pecificar como o sistema deve se comportar durante o boot, execução e desligamento. Existem 7 níveis de operação (runlevels) que podem ser utilizadas no Linux, descritos na tabela 1. Runlevel Descrição 0 Desligamento do sistema. 1 Modo monousuário. 2-5 Modo multiusuário (tem diferentes utilizações variando de acordo com a distribuição utilizada). 6 Reinicialização do sistema. Tabela 1: Detalhamento dos níveis de operação. Como exemplo: para que a máquina seja desligada com segurança, todos os dados pendentes devem ser escritos em disco, todos os servi- ços devem ser parados, o kernel deve instruir o hardware a interromper quaisquer envios de instruções à CPU de forma ordenada e tudo deve Ciência da Computação/Sistemas da Informação Página 5 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola ser escrito em log para que o administrador tenha rastreabilidade do que está acontecendo durante estas etapas. Estas tarefas são executadas no runlevel 0, que significa “Desligamento do Sistema Operacional.” O processo init (primeiro processo invocado pelo kernel após o boot e processo pai de todos os processos ativos no sistema) é quem invoca e aplica esse runlevel, executando todos os scripts necessários para que o sistema entre nesse nível de execução. Podemos encontrar os scripts de inicialização em /etc/rc*.d, onde ”*”re- presenta o número de identificação do runlevel. Figura 4: Diretórios com os scripts de cada runlevel. Dentro de cada diretório, estão alocados os scripts que serão execu- tados naquele runlevel, como ilustrado na figura 5. Figura 5: Lista de scripts de runlevel0. Nos arquivos demonstrados na figura 5, existe um prefixo comum en- volvendo a letra ”k”. Esse prefixo, indica que estes scripts realizam uma operação com o Kill, enviando o sinal 15 (SIGTERM) para o processo, in- dicando que ele deve encerrar por si só as suas atividades, mas enviando o sinal 9 (SIGKILL) novamente, caso este não responda. Esse prefixoainda pode variar para S, caso o runlevel seja 2 (ilustrado na figura 6). Neste caso, o prefixo ”S”é de Start, para iniciar o processo. Figura 6: Lista de scripts de runlevel 2. O número seguido da letra indica a ordem de execução de cada script. Caso existam dois com a mesma numeração, eles serão executados si- Ciência da Computação/Sistemas da Informação Página 6 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola multaneamente, uma vez que não exista dependência entre eles. Seguida do número, vem o nome do processo a ser executado pelo script. Todos os scripts nestes diretórios são apenas links simbólicos para os arquivos em /etc/init.d/. Estes não devem ser alterados, exceto se o usuá- rio saiba muito bem o que está fazendo. Figura 7: Conteúdo do diretório /etc/init.d/. Para alternar entre runlevels, basta executar init . A figura 8 exibe a entrada no runlevel 1, utilizado para manutenção do sistema, desconectando todos os usuários (menos o root). Figura 8: Ubuntu Server 22.04 entrando em runlevel 1. Outros comandos podem forçar o sistema a entrar em runlevels especí- ficos, como o halt, que desliga o sistema. O que o halt faz é simplesmente, invocar o init 0. O comando shutdown, que desliga/reinicia o sistema, pode receber parâmetros que invocam tanto o init 0 quanto o init 6. A figura 9 exibe o sistema entrando no runlevel 6, ou seja, sendo reiniciado. Para verificar em qual runlevel o sistema se encontra, podemos utilizar o comando runlevel (veja figura 10). Neste exemplo, o primeiro caractere (N) exibirá o penúltimo runlevel ao qual o sistema se encontrava. Neste caso, N representa que o sistema não mudou de runlevel desde o boot. O n uemro 5 representa o runlevel atual do sistema. Ciência da Computação/Sistemas da Informação Página 7 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola Figura 9: Ubuntu Server 22.04 entrando em runlevel 6. Figura 10: Runlevel atual do sistema. 3 Agendamento de tarefas OCrontab nos permite agendar as tarefas para que elas sejam executadas automaticamente. O usuário pode, por exemplo, configurar o sistema para que um lembrete seja impresso na tela com a frequência de dias e horários que ele quiser. O mesmo pode ser feito para agendar scripts e comandos do Linux. O crontab trata-se de um programa do Linux executável em segundo plano (ou seja, um daemon), capaz de executar tarefas automaticamente. Ciência da Computação/Sistemas da Informação Página 8 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola Quando iniciado, o Cron faz uma varredura (a cada minuto) pelos dire- tórios que possam conter arquivos nos quais estão guardados os scripts agendados pelo usuário. O propósito da examinação não é somente o de encontrar tarefas no- vas, mas, principalmente, de saber se há alguma atividade programada para o momento. Vale destacar, também, que o Cron é um programa de nível multiusuá- rio. Isso significa que cada usuário pode agendar suas tarefas individu- almente, graças ao próprio arquivo onde são armazenados os scripts: o Crontab. Portanto, o Crontab é uma ferramenta para gerar arquivos a serem lidos pelo Cron. Como o próprio nome diz, a estrutura do Crontab con- siste em tabelas. Nessas tabelas são preenchidas todas as informações referentes à tarefa: • minutos; • horas; • dias do mês; • mês; • dias da semana; • usuário; • comando. Logo, quando o arquivo Crontab é gerado, o Cron faz a identificação dele e, em seguida, interpreta os dados e parâmetros registrados na ta- bela. Nitidamente, o Cron e o Crontab se baseiam na ideia de operador e cronograma de trabalho. A configuração padrão para arquivos do Cron está localizada no ar- quivo /etc/crontab, a qual apresenta as informações mostradas na figura 11. A primeira linha (SHELL) determina o sistema em que o ambiente Shell será usado. A variável PATH é onde está definido o caminho usado para executar comandos. Ciência da Computação/Sistemas da Informação Página 9 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola Figura 11: Arquivo de configuração do cron. Cada uma das demais linhas representa uma tarefa. Para interpretá-la, é necessário entender a sintaxe do Crontab, conforme veremos a seguir. Primeiramente, dividimos as informações em seis partes (da esquerda para a direita): Minuto (0 a 59) | Hora (0 a 23) | Dia (1 a 31) | Mês (1 a 12)| Dia da semana (0 a 7) | Comando (comando a ser executado). Ou seja, para cada campo será digitado um valor correspondente às regras acima. Detalhe: o dia da semana oferece oito possibilidades, sendo que os valores 0 e 7 significam domingo. Observação: na configuração mostrada no início do tópico, nas linhas que representam as tarefas há um elemento chamado “run-parts”. Ele serve para executar scripts naqueles diretórios. 1. Exibição das tabelas do cron: Usando a opção -l, o arquivo crontab do usuário será listado no terminal: 2. Deletar todas as tarefas: Para remover todas as tarefas agendadas no arquivo crontab do usuário, liste-as usando a opção -l e, depois, use a -r. Ciência da Computação/Sistemas da Informação Página 10 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola 3. Editar o arquivo crontab: Utilize a opção -e. Automaticamente um editor de texto será aberto com o arquivo crontab. 3.1 Exemplo crontab 1. Crie um script bash chamado example.sh para escrever a data se- guido da mensagem ”Hello world” conforme ilustrado na figura 12: Figura 12: Conteúdo do arquivo example.sh 2. Mude a permissão do arquivo para que ele se torne um arquivo exe- cutável utilizando o comando: sudo chmod 764 example.sh. 3. Adicione a execução desse arquivo como uma tarefa agendada no crontab utilizando o comando: crontab -e. 4. Adicione a linha: */2 * * * * /home/aluno/example.sh » /home/aluno/output.log 2>1. Desta forma o script example.sh será executado a cada 2 minu- tos e sua saída será escrita em um arquivo de log, conforme ilustrado na figura 13. 5. Após algum tempo de execução, pode-se conferir a escrita no ar- quivo de log a cada dois minutos, conforme ilustrado na figura 14. Ciência da Computação/Sistemas da Informação Página 11 de 12 ICET – Instituto de Ciência e Tecnologia Laboratório Sistemas Operacionais Abertos e Mobile Carlos Baltazar/Ricardo Piantola Figura 13: Edição do arquivo crontab. Figura 14: Saída do script example.sh executado no cron. Ciência da Computação/Sistemas da Informação Página 12 de 12 Gerência de boot BIOS Registro Mestre de incialização Carregador de boot Primeiro estágio Segundo estágio Disco inicial Níveis de operação Agendamento de tarefas Exemplo crontab