
via [TUAW]
Grande parte das pessoas não sabem como funciona o sistema de inicialização do Linux, por isso resolvi descrevê-lo aqui. A explicação não será muito profunda, mas servirá para introduzir o assunto.
O boot do sistema é baseado em fases, cada fase tem uma função específica, por isso nenhuma fase deve ser repetida e a próxima fase sempre levará em conta que as tarefas da fase anterior foram executadas com sucesso.
A primeira fase, depois da escolha do kernel a ser carregado (geralmente via LILO), é a descompressão e carregamento do kernel. O kernel do Linux é comprimido, o que possibilita, entre outras coisas, a ocupação de menos espaço em disco. Não vou entrar em detalhes sobre o sistema de baixo nível do boot, apenas as partes "influenciáveis", onde podemos alterar o comportamento do sistema para um maior conforto.
Depois da descompressão e carregamento do sistema, começarão a surgir mensagens do kernel, avisando sobre o que está acontecendo, como testes de portas seriais, entre outros. Todas as mensagens do kernel são úteis e devem sempre ser observadas. Caso você precise ver as mensagens do kernel após o boot completo do sistema, não precisa reiniciá-lo, basta digitar dmesg no shell.
Após a inicialização completa do kernel, o sistema passa o controle para alguns scripts, conhecidos como scripts de inicialização ao estilo Sys V. Os scripts podem ser encontrados geralmente no diretório /etc/rc.d, são normalmente três:
rc.sysinit: executado apenas uma vez, durante o boot do sistema. Ajusta algumas coisas, como o relógio e data do sistema, entre outras coisas.
rc: executado quando o runlevel é alterado. Runlevels serão explicados posteriormente. O rc "mata" os processos do atual runlevel, levando em consideração alguns detalhes que serão descritos posteriormente, e inicia os novos processos, característicos do runlevel atual.
rc.local: executado logo após todos os outros scripts de inicialização. É útil para ajustar alguns parâmetros do sistema que devem ser inicializados mas não necessitam da criação de um script completo ao estilo Sys V. Alguns exemplos de programas normalmente incializados nesse script são servidores de fontes "incomuns", restauradores de som, entre outros. Outra função desse script é recriar os arquivos /etc/issue e /etc/issue.net, que são responsáveis pelas mensagens exibidas enquanto o sistema aguarda o login e senha do usuário (nos sistemas Conectiva é comum a presença da imagem gerada pelo linux_logo, com algumas informações sobre o sistema).
Agora o sistema já está inicializado, então o controle é passado para o gerenciador de login, que ficará aguardando a ação do usuário. Se algum usuário realizar o login no sistema, o controle será passado para o shell padrão do usuário, por exemplo o bash. Outras formas de login são discutidas abaixo, junto com a explicação sobre os runlevels.
RunlevelsToda a inicialização do sistema é baseada em runlevels, ou seja, níveis de execução. Os sistemas Linux possuem 6 runlevels:
0 - conhecido como halt, é o runlevel que desliga o sistema;1 - monousuário, inicilializa o sistema sem opções de segurança, no modo monousuário sem rede;
2 - multiusuário, inicializa o sistema com todas as opções de multiusuários e segurança;
3 - multiusuário com rede, o mesmo do runlevel 2, mas com opções de rede ativas, o runlevel mais comum;
4 - não utilizado;
5 - multiusuário em modo gráfico, igual ao runlevel 3, mas inicia o servidor X automaticamente;
6 - reboot, reinicializa o sistema.
Alguns sistemas podem variar, mas o padrão Conectiva é esse. A descrição do sistema de runlevels normalmente pode ser encontrada no arquivo /etc/inittab, onde você também poderá alterar o runlevel padrão do sistema.
Alguns runlevels que merecem destaque são o 1, 3 e 5.
O runlevel 1 nunca deve ser utilizado, a não ser para manutenção do sistema, devido a falta total de segurança.
O runlevel 3 é o mais comum e eu pessoalmente aconselho o seu uso.
O runlevel 5 é o mais indicado para usuários novatos, que dependem completamente do sistema gráfico para trabalhar. Não aconselho o uso do runlevel 5, pois além de gastar recursos de máquina ainda, se a sua placa de vídeo estiver configurada incorretamente, o servidor X tentará forçar a inicialização gráfica e sua tela no mínimo ficará piscando, tornando impossível qualquer comunicação com o sistema, o que também dificultará a reconfiguração da placa de vídeo. A escolha fica por sua conta.
O sistema de init, como foi citado anteriormente, procurará os scripts de incialização em /etc/rc.d. Existem, além dos scripts já citados, muitos outros, dentro do diretório /etc/rc.d/init.d. Existe um alias pré-definido que move o seu diretório atual para o diretório dos scripts do sistema, é o cds, ele é um resumo dos comandos "cd /etc/rc.d/init.d && ls", portanto esse alias é muito prático, acostume-se a usá-lo sempre que precisar alterar alguma coisa a ver com os runlevels.
Os scripts encontrados dentro do diretório /etc/rc.d/init.d possuem um modelo a ser seguido, onde eles devem aceitar no mínimo quatro parâmetros, a saber: stop, start, restart, status. A explicação sobre como escrever scripts Sys V está no documento VIM/BASH (originalmente esse documento se encontra do meu site, mas como o meu site está sofrendo várias reformulações eu resolví diponibilizá-lo neste site também).
O init possui um sistema interessante para verificar quais os scripts que devem ser executados em cada runlevel. Dentro do diretório /etc/rc.d existem vários subdiretórios, com os nomes seguindo o modelo rcX.d, onde X é o numero do runlevel atendido pelo diretório. Isso significa que normalmente temos 6 diretórios seguindo esse modelo, de rc0.d a rc6.d. O script de inicialização, rc, verificará o runlevel atual e, segundo ele, entrará no diretório correto, por exemplo, para um runlevel 3, o diretório rc3.d. Dentro dos diretórios estão links simbólicos para os scripts em init.d que devem ser executados no runlevel. Os links simbólicos possuem a seguinte nomenclatura: EXXnome, onde E pode ser S, de start ou K, de kill, XX indica qual a ordem de execução do script na hierarquia de scripts e nome indica o nome do script na pasta init.d. Quem cria ou destrói os links é um aplicativo, chamado chkconfig.
O chkconfig lê algumas informações no cabeçalho dos scripts Sys V e determina qual a ordem de execução do script, quais os runlevels onde o script será executado com o parâmetro start e quais os runlevels onde o parâmetro utilizado será stop. Para indicar qual parâmetro usar ele cria o link com um prefixo K, de kill, para o parâmetro stop, e S, de start, para o parâmetro start. As páginas do manual do chkconfig explicam corretamente cada parâmetro do mesmo e como utilizá-lo corretamente.
Outro aplicativo normalmente encontrado é o ntsysv, que é uma espécie de front-end para o chkconfig, por meio dele podemos ver quais os serviços estão ativos e quais estão inativos de uma forma bem mais simples que pelo chkconfig.
Observe que não é porque você possui um script em /etc/rc.d/init.d que ele será executado, para ele ser executado, deve ser adicionado ao init via chkconfig ou ntsysv (ou outro aplicativo equivalente). Algumas informações sobre os serviços também podem ser visualizadas, essas informações são inseridas no cabeçalho dos scripts e normalmente tem suporte a vários idiomas, descrevendo o que aquele serviço inicializado pelo script fará no seu sistema.
O shutdown do sistema também é determinado por um runlevel, ou o runlevel 0 (halt) ou o 6 (reboot), permitindo assim que alguns serviços possam ser devidamente desligados antes da queda do sistema, como por exemplo um servidor em impressão ou um gravador de configurações do misturador de som.
Agora que já conhecemos as fases básicas do boot do sistema e também o sistema de inicialização por scripts conhecido como Sys V, podemos personalizar alguns scripts segundo as nossas necessidades, criar alguns serviços e selecionar corretamente aqueles que serão inicializados ou não durante os vários runlevels. Uma última dica: se você quiser alterar o runlevel com o sistema ligado, basta utilizar, como root, init X, onde X é o runlevel que você quer iniciar, ou seja, se você quiser reiniciar o sistema sem usar shutdown, basta digitar "init 6".
Para personalizar, escrever ou entender os scripts Sys V devemos conhecer um mínimo sobre scrips SH. Você poderá obter algumas informações sobre scripts SH/BASH na seção VIM/BASH, além de um modelo de script Sys V e algumas informações valiosas. Outro requisito básico é o domínio de algum editor de textos no modo texto do shell, para que as configurações dos scripts sejam efetuadas com eficiência. Um editor de textos que aconselho é o VIM, fornecido com a grande maioria das distribuições Linux. Você poderá encontrar informações úteis sobre ele na seção VIM/BASH.
Espero que as informações contidas aqui sejam de grande utilidade para você. Boa sorte!
Por Willian Eduardo de Moura Casante.
Distribuição permitida contanto que esta notificação esteja preservada.
São Paulo, 19 de julho de 2006 - A Microsoft Corporation anunciou nesta quarta-feira a aquisição dos sites Winternals e Sysinternals, cujos donos se dedicavam, há 10 anos, a desenvolver e distribuir gratuitamente softwares voltados para solução de problemas e manutenção do sistema operacional Windows.
Os fundadores dos sites, os programadores Mark Russinovich e Bryce Cogswell, passarão a trabalhar para a Microsoft no desenvolvimento de novos produtos e de melhorias nas próximas versões do Windows. Russinovich assumirá o posto de gerente técnico da Divisão de Plataformas e Serviços. Já Cogswell será integrado como arquiteto de software à equipe de Plataforma de Componentes do Windows.
fonte: Wnews Device | Moint point | File Sistem | Options |
/dev/hda4 | / | ext3 | defaults 1 1 |
/dev/hda5 | /var | ext3 | defaults 1 2 |
/dev/hda6 | swap | swap | defaults 0 0 |
/dev/hdb | /mnt/cdrom | iso9660 | defaults,noauto,user 0 0 |
/dev/fd0 | /mnt/floppy | auto | defaults, noauto, user 0 0 |
/dev/hda2 | /mnt/win | vfat | noexec,uid=100,gid=100 0 0 |
none | /proc | proc | defaults 0 0 |
O modelo do arquivo fstab é assim:
[dispositivo] [ponto de montagem] [sistema de arquivos] [opções] [opção para o dump] [opção para o fsck]
dispositivo:
Nesse campo é colocado o dispositivo a ser montado ou um sistema de arquivos remoto. Para montagens NFS deve ser colocado
ponto de montagem:
Ele identifica em qual pasta será montada a partição, para partições swap esse campo deve ser especificado como 'swap', se o nome do ponto de montagem contiver espaços, estes podem ser representados por '\040'. No nosso exemplo na primeira linha coloquei a pasta raiz do Gnu/linux, já na segunda linha identifiquei como a pasta /var que seria montado no sistema.
sistema de arquivos:
Nesse campo você descreve qual o sistema de arquivo. Atualmente os seguintes tipos de sistemas de arquivos são suportados - consulte /proc/filesystems para saber quais sistemas de arquivos são suportados pelo seu kernel:
adfs, affs, autofs, coda, coherent, cramfs, devpts, efs, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, ntfs, proc, qnx4, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, umsdos, vfat, xenix, xfs.
opções:
Segue abaixo explicação de algumas das opções disponíveis no fstab:
noauto: Essa opção faz com que o dispositivo não montado automaticamente durante o boot, é a opção que deve ser usada para disquetes e cd-roms no fstab, pois senão o Gnu/Linux iria tentar monta-los mesmo que não tivessem discos neles.
user: Essa opção é ótima também para discos removíveis, ela permite que qualquer usuário possa montar esse dispositivo.
noexec: Essa opção é muito útil para quando montamos partições windows, pois ele não gerencia os arquivos com permissões como no Gnu/Linux, com isso os arquivos ficam todos como executáveis, se você clicar em cima de um arquivo mp3, usando o konqueror por exemplo, ele vai tentar "executar" o arquivo é claro que sem funcionar, usando essa opção você faz com que isso não ocorra.
uid: Essa opção também é útil quando se monta partições FAT, pois elas não trabalham com permissões de arquivo, assim todas as partições que forem montadas estarão com o dono dos arquivos seja o root. Assim você com um usuário normal não poderia ter total controle desse diretório, com essa opção você pode mudar o dono do arquivo usando o uid dele que pode ser encontrado no arquivo /etc/passwd:
jean:x:144:200::/home/jean:/bin/false
Nesse exemplo o uid do usuário jean seria 144.
gid: Com essa opção você pode mudar o grupo do diretório, na verdade é a mesma função da opção acima, só que faz isso com o grupo.
jean:x:144:200::/home/jean:/bin/false
Nesse exemplo o gid do usuário jean é 200.
umask: serve para indicar quais serão as permissões dos arquivos, já que os sistemas Fat e derivados não tem sistema de permissões. O padrão é a mascára do processo atual. O valor é dado em formato octal. O padrão geralmente é representado por 022, ou seja, bit 'w'(permissão de escrita) apenas para o dono.
Abaixo uma explicação para os valores de umask(fonte www.conectiva.com.br):
A umask funciona retirando permissões, ou seja, a permissão padrão do sistema seria 666, mas com um valor de 022, no caso do superusuário, teríamos 644 (666-022=644), o que significa que quando um arquivo for criado pelo superusuário ele vai ter suas permissões inicias em -rw-r-r--, permitindo escrita e leitura para o dono do arquivo e somente leitura ao grupo ao qual ele pertence e para os demais usuários do sistema. Já no caso dos usuários comuns do sistema, todo arquivo iniciará sua vida com permissões 664 (666-002=664), o que significa leitura e escrita para o dono e para o grupo (no formato absoluto será -rw-rw-r--) e aos outros usuários do sistema permite apenas leitura.
ro: O dispositivo será montado somente para leitura
rw: Monta o sistema de arquivos com permissão de leitura e gravação.
exec: Permite a execução de binários.
suid: Permite o uso dos bits de configuração de identificação do usuário e do grupo.
dev: Interpreta dispositivos especiais de blocos ou caracteres no sistema de arquivos.
defaults: Usa as opções padrão: rw, suid, dev, exec, auto, nouser, e async.
opção para o dump:
Essa opção é usada pelo comando dump para determinar quais sistemas de arquivos precisam ser copiados, caso não tenha sido escrito nada nesse quinto campo o valor dele será considerado zero, e o dump assumirá que esse sistema de arquivos não precisa ser copiado.
opção para o fsck:
Nesse campo você deve colocar a ordem em que os sistemas de arquivos serão verificados durante o boot. A partição raiz ( / ), sempre como 1, e os outros sistemas de arquivos devem ter esse campo a partir de 2 fazendo seqüência de acordo com o número de partições que você quiser montar. Sistemas de arquivos em um mesmo dispositivo, serão verificados seqüencialmente, e sistemas de arquivos em dispositivos diferentes, serão verificados ao mesmo tempo para utilizar o paralelismo disponível com o hardware. Caso esse campo não exista ou esteja com o valor 0 o fsck não irá checar essa partição ao inicializar o Gnu/Linux.
Mais informações sobre essa opções podem ser encontradas com o comando "man mount" ou "man fstab", aqui eu somente coloquei as que julguei mais importantes. Na primeira linha do exemplo você puderam ver que esta com as opções default do sistema, já na linha onde montei o cd-rom utilizei das opções noauto, defaults e user, fazendo com que fique da melhor maneira para trabalhar, é claro que essas opções ficam a seu critério, e suas necessidades.
Vou passar aqui para vocês alguns exemplos usando o comando mount. (Colaboração: Andrei Drusian )
Montando disquete formatado em FAT
# mount -t vfat /dev/fd0 /mnt/floopy
Montando o Cdrom
# mount -t iso9660 /dev/hdX /mnt/cdrom
Montando partição Windows FAT
# mount -t vfat /dev/hdaX /mnt/win
Montando partição Windows NTFS
# mount -t ntfs /dev/hdaX /mnt/win
Montando compartilhamento remoto Windows/SMB
# mount -t smbfs //192.168.0.1/dados /mnt/smb -o username=xxx
Montando compartilhamento remoto NFS
# mount -t nfs 192.168.0.1:/dados /mnt/nfs
Montando uma partição do FreeBSD
# mount -t ufs -o ufstype=44bsd /dev/hdaX /mnt/bsd/
Montando uma partição windows com problemas na exibição de caracteres
Um problema muito comum é quando montamos uma partição FAT, existe o problema com a exibição de caracteres (ç,ã,á,é,í...). Uma maneira de resolver isso é usando as seguintes opções no fstab ou mesmo no mount:
iocharset=iso8859-1
codepage=850
exemplo de linha no fstab:
/dev/hdaX /mnt/win vfat noexec,uid=100,gid=100,iocharset=iso8859-1,codepage=850 0 0
exemplo de mount:
# mount -t vfat -o codepage=850,iocharset=iso8859-1,noexec /dev/hdaX /mnt/win
Esses exemplos foram somente para explicar a função da iocharset e codepage, as outras opções foram somente demonstrativas, ficando ao seu critério quais opções usar nas maneiras de montar o dispositivo.
Ta aí pessoal, um manualzinho bem simplificado e explicadinho sobre o fstab, espero que ajude todos, e tirem quase todas as dúvidas de vocês.
Gostaria de agradecer a Deus pela minha sabedoria, e que sempre me ajude a compartilhar ela com todos os que necessitam.