Thursday, October 12, 2006

Linux - Links simbólicos e hardlinks

Um link é um mecanismo que faz referência a outro arquivo ou diretório em outra localização.
Os links são arquivos especiais, e podem ser identificados com o "l" quando executado o comando: ls -la
Exemplo: lrwxr-xr-- 1 roberto roberto 5 2006-10-12 22:40 link -> teste

Conteúdo:
1 - Tipos de links existentes no Linux
2 - Criando links
3 - Exemplos

Obs.: Neste e em outros documentos que eu escrevi a formatação do texto possui os seguintes significados:

- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

1 - Tipos de links existentes no Linux:

Tipo simbólico:

No link tipo simbólico, o link é um arquivo especial de disco do tipo link que tem como conteúdo o caminho para chegar até o arquivo alvo.

Características:
- Pode-se fazer links simbólicos em arquivos e diretórios.
- O link simbólico e o arquivo alvo não precisam estar na mesma partição de disco.
- Se o link simbólico for apagado/movido. Somente o link será apagado/movido.
- Qualquer usuário pode criar/desfazer um link simbólico ( respeitando as permissões ).

Tipo hardlink:

No link tipo hardlink, o link é apontado para o mesmo inode do arquivo alvo, sendo assim, os dois arquivos serão o mesmo.

Características:
- Não é possível fazer um hardlink para um diretório.
- Somente é possível fazer hardlink em arquivos que estejam em uma mesma partição de disco.
- Se o hardlink for apagado/movido, você estará apagando/movendo o arquivo alvo.
- Somente o usuário root pode criar/desfazer hardlinks.

2 - Criando links:

O comando ln é utilizado para criar links entre dois arquivos, ou para um diretório.

Sintaxe:

ln [OPCOES]... [-T] ALVO NOME_LINK (1a forma)
ln [OPCOES]... ALVO (2a forma)
ln [OPCOES]... ALVO... DIRETORIO (3a forma)
ln [OPCOES]... -t DIRETORIO ALVO... (4a forma)

Explicando:

ALVO
Diretório ou arquivo de onde será feito o link.
NOME_LINK
Nome do link que será criado.
OPCOES
-s
Cria um link simbólico.
-v
Modo verbose.

3 - Exemplos:

- Criando um link simbólico chamado "emulador" para o diretório /home/roberto/download/emulador_n64/

$ ln -s /home/roberto/download/emulador_n64/ emulador

Note que o link simbólico é identificado com o "l" no inicio.

$ ls -lah | grep emulador
lrwxrwx--x 1 roberto roberto 36 2006-10-12 22:42 emulador -> /home/roberto/download/emulador_n64/

- Criando um hardlink chamado "texto.txt" apontando para o arquivo "alvo_hardlink.txt":

$ ln alvo_hardlink.txt texto.txt

Note que o arquivo "alvo_hardlink.txt" e o arquivo texto.txt possuiem o mesmo Inode e o mesmo Device.

$ stat alvo_hardlink.txt | grep Inode
Device: 304h/772d Inode: 3057948 Links: 2
$ stat texto.txt | grep Inode
Device: 304h/772d Inode: 3057948 Links: 2

FIM

Referência:
Guia Foca Linux - Comandos

Recursos:
Manual do comando ln


Leia mais...

Sunday, October 08, 2006

Linux - Modo de acesso para novos arquivos e diretórios

Quando um novo arquivo ou diretório é criado, o processo de criação especifica a permissão que o novo arquivo ou diretório deverá ter.
As permissões padrões para novos arquivos ou diretórios criados são aplicadas nas configurações da conta de cada usuário individalmente.

O modo de acesso aplicado por padrão é 0666 para arquivos, e 0777 para diretórios.
O qual permite que o arquivo seja lido e escrito por qualquer usuário do sistema.

Mas na maioria das distribuições Linux, esse valor de permissão de acesso é alterados para que o sistema não fique inseguro.
Normalmente utilizam o valor 0022, mas podemos alterar este valor e especificar um valor personalizado.
Esta permissão padrão é visualizada e alterada através do comando umask.

Conteúdo:

1 - Visualizando o valor atual
2 - Alterando valores do umask
3 - Cálculo feito para aplicar o valor 0077 (u=rwx,g=,o=) no umask para novos arquivos e diretórios

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

1 - Visualizando o valor atual:

Execute o comando umask sem nenhum valor como parâmetro, e ele irá retornar o valor atual do umask.

Exemplo:

$ umask
0022

Execute o comando umask com a opção -S, e ele irá retornar o valor simbólico da permissão atual.

Exemplo:

$ umask -S
u=rwx,g=rx,o=rx

2 - Alterando valores do umask:

Para alterar os valores do umask, é necessário executar o comando umask com a permissão de usuário, grupo e outros usuários que queremos "retirar" para novos arquivos ou diretórios criados.
Estes valores indicam a permissão que queremos subtrair (retirar) do valor padrão. E devem ser passados como parâmetro para o comando umask.
Lembrando que o valor padrão para arquivos é 666, e para diretórios é 777.

Exemplo:

Se você gostaria de manter seus novos arquivos e diretórios com mais privacidade, desabilitando acesso para grupo ou outros usuários, você deve utilizar o comando umask com o valor octal: 0077 ou com o valor simbólico: u=rwx,g=,o=
Escolha o modo que você mais gosta, os dois fazem a mesma coisa.

- Usando valor modo octal:

$ umask 0077
$ touch novo_arquivo.txt
$ mkdir novo_diretorio
$ ls -la
drwx------ 2 root root 48 Oct 8 15:21 .
drwxr-xr-x 28 roberto roberto 1.6K Oct 8 15:21 ..
-rw------- 1 root root 0 Oct 8 15:21 novo_arquivo.txt
drwx------ 2 root root 48 Oct 8 15:21 novo_diretorio

- Usando valor modo simbólico:

$ umask u=rwx,g=,o=
$ touch novo_arquivo.txt
$ mkdir novo_diretorio
$ ls -la
drwx------ 2 root root 48 Oct 8 15:21 .
drwxr-xr-x 28 roberto roberto 1.6K Oct 8 15:21 ..
-rw------- 1 root root 0 Oct 8 15:21 novo_arquivo.txt
drwx------ 2 root root 48 Oct 8 15:21 novo_diretorio

3 - Cálculo feito para aplicar o valor 0077 (u=rwx,g=,o=) no umask para novos arquivos e diretórios:

- Arquivos:

Permissão PADRÃO dos arquivos: 0666 ou u=rw,g=rw,o=rw
Valor que queremos retirar: 0077 ou u=,g=rw,o=rw
Resultado, arquivos terão permissão: 0600 ou u=rw,g=,o=

- Diretórios:

Permissão PADRÃO dos diretórios: 0777 ou u=rwx,g=rwx,o=rwx
Valor que queremos retirar: 0077 ou u=,g=rwx,o=rwx
Resultado, diretórios terão permissão: 0700 ou u=rwx,g=,o=

Agora quando você quiser alterar a permissão padrão dos novos arquivos ou diretórios é só fazer o cálculo de subtração do valor padrão e do valor a ser passado para o umask, para obter a permissão que o novo arquivo ou diretório vai ter.

Referência:
LPI Linux Certification in a Nutshell
IBM DeveloperWorks - Linux LPI - Tópico 104.

Recursos:
Manual do comando umask



Leia mais...

Saturday, September 30, 2006

Linux - Permissões de Acesso Especiais

O controle de acesso em arquivos e diretórios é a segurança fundamental para qualquer sistema multi-usuário.

Os sistemas de arquivos nativos do Linux implementam controle de acesso utilizando algumas propriedades dos arquivos/diretórios.

Conteúdo:

1 - Lembrando como as permissões básicas funcionam:
2 - Permissões de Acesso Especiais:
3 - SUID ( Set User ID):
3.1 - Exemplo
3.2 - Comandos
4 - SGID ( Set Group ID ):
4.1 - Exemplo
4.2 - Comandos
5 - Sticky ( Sticky bit):
5.1 - Exemplo
5.2 - Comandos

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

1 - Lembrando como as permissões básicas funcionam:

No Linux há três modelos de controle de acesso básicos: Read, Write e Execution.

Veja um exemplo de permissão básica na figura abaixo:



O Tipo do Objeto significa:

d => diretório
b => arquivo de bloco
c => arquivo especial de caractere
p => canal
s => socket
- => arquivo normal

Já os outros caracteres significam:

r => significa permissão de leitura (read);
w => significa permissão de gravação (write);
x => significa permissão de execução (execution);
- => significa permissão desabilitada.

Explicando um pouco mais:

Leitura (r):
Em arquivos, permite examinar o conteúdo do arquivo.
Em diretórios permite listar conteúdo do diretório.

Escrita (w):
Em arquivos, permite escrever, remover e alterar o arquivo.
Em diretórios, permite criar e remover arquivos dentro do diretório.

Execução (x):
Em arquivos, permite executar um arquivo como um programa.
Em diretório, permite ler e escrever em arquivos dentro do diretório.

Sendo que os três primeiros rwx primeiros pertencem ao Dono do arquivo, e os outros três rwx pertencem ao Grupo e por fim os últimos três rwx pertencem há outros usuários que não fazem parte do grupo.

2 - Permissões de Acesso Especiais:

Mas somente as três permissões básicas (rwx), não dão toda flexibilidade para controlar acesso aos arquivos e diretórios.
Por isso o Linux tem mais três modelos especiais para controle de acesso, chamados suid (set user id), sgid (set group id) e Sticky (Sticky bit).

Veja um exemplo de permissão especial na figura abaixo:



3 - SUID ( Set User ID):

A propriedade SUID é somente para arquivos executáveis e não tem efeito em diretórios.

Nas permissões básicas, o usuário que executou o programa é dono do processo.
Mas, em arquivo executável com a propriedade SUID aplicada, o programa rodará com o ID do dono do arquivo, não com o ID do usuário que executou o programa.
Normalmente o usuário dono do programa executável é também dono do processo sendo executado.
Ou seja, quando um arquivo/programa executável tem o controle de acesso SUID, ele é executado como se ele estivesse iniciado pelo dono do arquivo/programa.

A permissão de acesso especial SUID pode aparecer somente no campo Dono.

3.1 - Exemplo:

Um exemplo para arquivo executável com a propriedade SUID é o arquivo /usr/bin/passwd.
Ou seja, quando executamos o comando passwd com qualquer usuário normal, o processo é executado com ID do usuário root ( como se o usuário root tivesse executado o comando passwd), pois somente o usuário root tem permissão para alterar o arquivo /etc/passwd.

# ls -lah /usr/bin/passwd
-rwsr-xr-x 1 root root 27K 2006-04-03 10:37 /usr/bin/passwd

3.2 - Comandos:

- Aplicando SUID:

Aplicando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):

# chmod u+s programa.sh
# ls -lah programa.sh
-rwsr-xr-x 1 root roberto 0 2006-09-26 22:57 programa.sh

Aplicando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# chmod 4750 programa.sh
# ls -lah programa.sh
-rwsr-x--- 1 root roberto 0 2006-09-26 22:57 programa.sh

- Retirando SUID:

# chmod u-s programa.sh
# ls -lah programa.sh
-rwxr-x--- 1 root roberto 0 2006-09-26 22:57 programa.sh

- Procurando SUID:

Procurando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):

# find /home/roberto -perm u=s
/home/roberto/programa.sh

Procurando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# find /home/roberto -perm -4000
/home/roberto/programa.sh

4 - SGID ( Set Group ID ):

A propriedade SGID tem a mesma função que o SUID para arquivos executáveis.
Mas, a propriedade SGID tem um efeito especial para os diretórios.

Quando SGID é aplicado em um diretório, os novos arquivos que são criados dentro do diretório assumem o mesmo ID de Grupo do diretório com a propriedade SGID aplicado.

A permissão de acesso especial SGID pode aparecer somente no campo Grupo.

4.1 - Exemplo:

Se no diretório /home/roberto tem o grupo casa e tem o SGID habilitado, então todos os arquivos dentro do diretório /home/roberto serão criados com o grupo casa.
Esta é um importante atributo para um equipe, assumindo que todos os arquivos compartinhados devem ter o mesmo grupo.

4.2 - Comandos:

- Aplicando SGID:

Aplicando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# chmod g+s /home/equipe
# ls -lah /home/equipe
total 0
drwxr-sr-x 2 roberto equipe 48 2006-09-26 23:21 .

Aplicando a propriedade SGID em um diretório executável utilizando formato octal (2):

# chmod 2750 /home/equipe
# ls -lah /home/equipe
total 0
drwxr-s--- 2 roberto equipe 48 2006-09-26 23:21 .

- Retirando SGID:

# chmod g-s /home/equipe
# ls -lah /home/equipe
total 0
drwxr-xr-x 2 roberto equipe 48 2006-09-26 23:21 .

- Procurando SGID:

Procurando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# find /home -perm /g=s
/home/equipe

Procurando a propriedade SUID em um diretório executável utilizando formato octal (2):

# find /home -perm -2000
/home/equipe

5 - Sticky ( Sticky bit):

Em arquivos executáveis, a propriedade Sticky faz com que o sistema mantenha uma imagem do programa em memória depois que o programa finalizar.
Esta capacidade aumenta o desempenho, pois será feito um cache do programa para a memória, e da próxima vez que ele for executado, será carregado mais rápido.

Em diretórios, a propriedade Sticky impede que outros usuários deletem ou renomeam arquivos dos quais não são donos.
Isso normalmente é utilizado para aumentar a segurança, pois o diretório estará em modo append-only ( somente incremente )
Sendo assim, somente o usuário que é Dono do arquivo, poderá deletar ou renomear os arquivos dentro de um diretório com a propriedade Sticky aplicada.

A permissão especial Sticky, pode ser especificada somente no campo outros usuários das permissões de acesso.

5.1 - Exemplo:

No diretório /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários, mas nenhum pode apagar arquivos dos outros.
Então é interessante aplicar a propriedade Sticky no diretório /tmp.

5.2 - Comandos:

- Aplicando Sticky:

Aplicando a propriedade Sticky em um arquivo executável utilizando formato octal (1)

# chmod 1750 programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x--T 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh

Aplicando a propriedade Sticky em um arquivo executável utilizando formato simbólico (t):

# chmod o+t programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x--T 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh

Aplicando a propriedade Sticky em um diretório utilizando formato simbólico (t):

# chmod o+t /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwt 8 root root 264 2006-09-26 23:22 .

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# chmod 1777 /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwt 8 root root 264 2006-09-26 23:22 .

- Retirando Sticky:

# chmod o-t /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwx 8 root root 264 2006-09-26 23:22 .

- Procurando Sticky:

Aplicando a propriedade Sticky em um diretório utilizando simbólico (t):

# find /home/roberto/ -perm /o=t
/home/roberto/programa_pesado.sh

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# find /home/roberto/ -perm -1000
/home/roberto/programa_pesado.sh

Referência:
Guia Foca Linux - Permissões especiais
LPI Linux Certification in a Nutshell
IBM DeveloperWorks - Linux LPI - Tópico 104.

Recursos:
Manual do comando chmod

Leia mais...

Monday, September 18, 2006

Linux - Quota de Disco

Quotas de Disco permitem controlar o uso do disco por usuário ou grupo, ou por ambos ( usuário e grupo ).
São normalmente utilizadas em sistemas multi-usuários e não em sistemas mono-usuário ( Desktop )
E é gerenciada somente pelo usuário root.

Atualmente temos 3 tipos de Quotas de Disco: vfsold (versão 1), vfsv0 (versão 2 ) e xfs (quota de disco para o sistema de arquivos XFS).
Neste artigos iremos cobrir a versão mais utilizada: vfsv0 ( versão 2 ).

Conteúdo

1 - Habilitar Quotas de Disco
2 - Editar limites de Quotas de Disco
3 - Checar Quotas de Disco
4 - Gerenciar Quotas Ultrapassadas
5 - Aviso de limite de quota ultrapassado

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

1 - Habilitar Quotas de Disco

Para habilitar Quota de Disco é necessário que seu kernel tenha suporte.
Os kernel 2.4 e 2.6 tem total suporte necessário. Já versões anteriores do kernel tem suporte incompleto a Quota de disco, e será necessário recompilar o kernel para ter suporte a Quota de Disco.

Neste artigo estou utilizando o kernel 2.6.15-23-386.

Após isso é necessário instalar as ferramentas para manipular as quotas.

Utilizando a ferramenta APT-GET:

# apt-get install quota

Agora vamos habilitar quota de disco para a partição de disco que queremos utilizar quotas.
Para isso, é necessário editar o arquivo de configuração das tabelas de sistemas de arquivos: /etc/fstab
E incluir as opções "usrquota" (para quota por usuários), e/ou "grpquota" (para quota por grupos).

No exemplo abaixo estamos habilitando quota de disco para usuários e grupos na partição /dev/hda4 montado em /share:

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/hda2 / reiserfs notail 0 1
/dev/hda4 /share ext3 defaults,usrquota,grpquota 0 2
/dev/hda3 /mnt/win98 vfat defaults,utf8,umask=007,gid=46 0 1
/dev/hda1 none swap sw 0 0
/dev/hdd /media/cdrom0 udf,iso9660 user,noauto 0 0

Obs.: Somente sistemas de arquivos ext2, ext3 e xfs possuem suporte a quota de disco no Linux.

Após editar o arquivo /etc/fstab e habilitar a quota de disco no ponto de montagem /share, será necessário remontar para aplicar as alterações feitas.

# mount -o remount,rw /share

Obs.: Se você incluir quota de disco para o diretório raiz do sistema "/", será necessário reiniciar o sistema.

Execute o comando mount para verificar se as opções de quotas estão habilitadas.

Exemplo:

# mount | grep share
/dev/hda4 on /share type ext3 (rw,usrquota,grpquota)

Utilizando os comandos quotachek, quotaon e quotaoff:

O comando quotacheck é utilizado para checar quotas de disco em todos os sistemas de arquivos em /etc/fstab.
E também é utilizado para criar os arquivos com informações sobre as quotas: aquota.user e aquota.group

O comando quotaon é utilizado para habilitar a checagem de quota de disco.
Já o comando quotaoff desabilita quotas de disco no sistema.

Ambos os comandos quotacheck e quotaon são normalmente incluídos nos scripts de inicialização do sistema, para checar e habilitar a quota de disco após você reiniciar seu computador.

Agora iremos criar os arquivos com informações sobre as quotas dos usuários e grupos.

No exemplo abaixo as seguintes opções serão passada para os comandos quotacheck e quotaon:

-a Checa todos os sistemas de arquivos em /etc/fstab que estão habilitados como "automount".
-u Checa quotas de usuários ( opção padrão )
-g Checa quotas de grupos
-v Mostra mais detalhes na saída do comando ( modo verbose )

Então vamos aos comandos:

# quotacheck -augv
quotacheck: Quota for users is enabled on mountpoint /share so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.

# quotaon -augv
quotaon: using /share/aquota.group on /dev/hda4 [/share]: Device or resource busy
quotaon: using /share/aquota.user on /dev/hda4 [/share]: Device or resource busy

Agora vamos verificar se os arquivos aquota.user e aquota.group foram criados em /share:

# cd /share
# ls -lah
total 37K
drwxr-xr-x 3 root root 4,0K 2006-09-16 17:10 .
drwxr-xr-x 23 root root 616 2006-09-16 14:16 ..
-rw------- 1 root root 6,0K 2006-09-16 17:10 aquota.group
-rw------- 1 root root 6,0K 2006-09-16 17:10 aquota.user
drwx------ 2 root root 16K 2006-09-16 14:13 lost+found

Obs.: Perceba que os arquivos aquota.user e aquota.group tem permissão de leitura e escrita somente para o usuário root, já que somente o usuário root pode gerenciar quotas no sistema.

2 - Editar limites de Quotas de Disco

Os arquivos aquota.user e aquota.group são arquivos binários, e não podem ser editados diretamente por um editor de textos.
Para editar o limite de quotas de disco, utilizamos o comando: edquota ( de editar quota )
O comando edquota extrai as informações dos arquivos aquota.user e aquota.group, em todos os pontos de montagem que as quotas estão habilitadas, e cria um arquivo temporário, e abre um editor para para que você possa ajustar as quotas.
Consulte o manual para mais informações sobre o comando edquota.
Sintaxe:
edquota [ -u | -g ] [ -F format-name ] [ -f filesystem ] -t

Exemplo:

# edquota roberto

GNU nano 1.3.10 Arquivo: /tmp//EdP.ac3bZ0u

Disk quotas for user roberto (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/hda4 10020 12000 13000 3 5 6

Explicando para que serve cada coluna:

Filesystem - Partição que terá a quota do usuário/grupo editada. No exemplo /dev/hda4.
blocks - Número máximo de blocos (especificado em Kbytes) que o usuário possui atualmente. No exemplo 10020 Kbytes.
soft - Restrição mínima de espaço em disco usado. No exemplo 12000 Kbytes.
hard - Limite máximo aceitável de uso em disco para o usuário/grupo sendo editado. O sistema de quotas nunca deixará este limite ser ultrapassado. No exemplo 13000 Kbytes.
inodes - Número máximo de arquivos ( inodes ) que o usuário possui atualmente na partição especificada. No exemplo 3 inodes.
soft - Restrição mínima de número de arquivos que o usuário/grupo possui no disco. No exemplo 5 inodes.
hard - Restrição máxima de número de arquivos que o usuário/grupo possui no disco. No exemplo 6 inodes.

Ou seja, temos:

- O sistema de arquivos onde a quota está habilitada. ( Filesystem )
- Limite soft e hard para o número máximo de blocos.
- Limite soft e hard para o número máximo de inodes.

Quando o limite soft é atingido, o usuário é alertado por ter ultrapassado sua quota com a mensagem "hda4: warning, user file quota exceeded." (quota do usuário excedida).
Quando o limite hard é atingido, o usuário é alertado com a mensagem "hda4: write failed, user file limit reached." e posteriormente com a mensagem "mkdir: não é possível criar o diretório `novo_dir': Disk quota exceeded". E o usuário será bloqueado para criar novos arquivos ou diretórios. O limite hard nunca será ultrapassado.

Para desativar as restrições de quota coloque "0" no campo soft ou hard.

O limite soft, é válido somente por um determinado tempo, após expirar este tempo, o valor do limite soft é utilizado como limite hard. Lembrando que o hard nunca poderá ser ultrapassado.

Para alterar o tempo que o limite soft é expirado, utilizamos o comando edquota -t para modificar estes valores na partição especificada:

# edquota -t

GNU nano 1.3.10 Arquivo: /tmp//EdP.aE3dnlb

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda4 3days 7days

Explicando as colunas:

Filesystem - Sistema de arquivos que terá o período de tolerância modificado.
Block grace period - Tempo máximo de tolerância para usuários/grupos que ultrapassaram sua quota soft de espaço em disco antes de passar a valer como hard. No exemplo, o usuário tem 3 dias para excluir possíveis arquivos ou contactar o administrador para redimensionar o tamanho de quota. O valor padrão é 7 dias.
Inode grace period - Tempo máximo de tolerância para usuários/grupos que ultrapassaram sua quota soft de número de arquivos gravados antes de passar a valer como hard. No exemplo, o usuário tem 7 dias para excluir possíveis arquivos ou contactar o administrador para analisar seu tamanho de quota. O valor padrão é 7 dias.

Ou seja, temos:

- O sistema de arquivos onde a tolerância está habilitada. ( Filesystem )
- O número de dias para o limite soft para o número máximo de blocos.
- O número de dias para o limite soft para o número máximo de inodes.

Observações:
- O comando quotacheck deverá ser executado na partição sempre que novas restrições/limites forem editados com o edquota. Isto atualiza os arquivos aquota.user e aquota.group.

Primeiro desative o sistema de quotas, com o comando:

# quotaoff -augv

Execute o comando para checar as quotas:

# quotacheck -augv

Após isso é necessário ativar as quotas com o comando:

# quotaon -augv

Por este motivo é recomendável fazer isso em modo monousuário. Se você possuir quotas de disco na partição raiz "/" será necessário reiniciar o sistema.

- Para dar tempo de eliminar arquivos e não ser pego desprevenido com o bloqueio de gravação do limite hard. O sistema lhe mostrará mensagens alertando que o limite soft foi ultrapassado e que está próximo de atingir o limite hard.
Lembrando que o limite hard nunca poderá ser ultrapassado.

- Quando o usuário exclui seus arquivos e volta a ficar abaixo dos limites soft da quota, o tempo de tolerância é resetado aos valores padrões especificados por edquota -t.

- As quotas de espaço em disco podem ser definidas automaticamente para os novos usuários adicionados ao sistema colocando o espaço em disco na variável QUOTAUSER=numero do arquivo /etc/adduser.conf. Isto será equivalente a digitar o comando edquota -q QUOTA novo_usuário.

Copiando quotas

Agora imagine você editando quotas de disco para cada usuário. Seria uma tarefa trabalhosa se você tiver muitos usuários.
Para resolver este problema utilizamos o parâmetro -p do comando edquota.
Ele duplica a quota do usuário especificado para cada um dos outros usuáros especificados.
Este é o mecanismo normalmente utilizado para clonar quotas de um usuário para um grupos de usuários.

Exemplo:

# edquota -p roberto mario andre jsilva

Limites para Grupo

Você pode também usar o comando edquota para retringir o espaço em disco para o grupo dono dos arquivos.
Por exemplo: Podemos limitar o total de arquivos criados ou espaço em disco para todos os membros do grupo devel para 50 MB e 5000 arquivos, como mostra o exemplo abaixo:

# edquota -g devel

3 - Checar Quotas de Disco

O comando quota -v é utilizado para exibir a quota para o usuário passado como parâmetro, e o sistema de arquivos ao qual o usuário esta associado.

Exemplo:

# quota -v roberto
Disk quotas for user roberto (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda4 10028 12000 13000 4 5 6

Quando o usuário ultrapassar o limite da quota, será exibida um "*" ( asterisco ) ao lado do limite ultrapassado.

Exemplo:

# quota -v roberto
Disk quotas for user roberto (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda4 10028 12000 13000 6* 5 6

Obs.: Note na coluna "files" o asterisco "*" ao lado do número 6, indicando que a quota foi ultrapassada.

4 - Gerenciar Quotas Ultrapassadas

Quando precisamos gerenciar e verificar o uso de quotas de todos os usuários/grupos do sistema o comando quota se torna trabalhoso.
Para facilitar podemos utilizar o comando repquota. Que faz uma listagem organizada por partições, listando dados como grace time, limites soft e hard para blocos e inodes, podendo mostrar as quotas de todos os usuários e grupos do sistema.

Exemplo:

# repquota -augv
*** Report for user quotas on device /dev/hda4
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 141244 0 0 4 0 0
roberto -+ 10028 12000 13000 6 5 6 6days

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000

*** Report for group quotas on device /dev/hda4
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 141244 0 0 4 0 0
roberto -- 10028 0 0 6 0 0

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2,000000

5 - Aviso de limite de quota ultrapassado

O comando warnquota checa a quota de disco para cada sistema de arquivos com quota ativada e envia e-mails com uma mensagem de aviso para os usuários que ultrapassaram o limite soft estabelecido.
Quando um grupo ultrapassa o limite soft estabelecido, um e-mail é enviado para o usuário especificado em /etc/quotagrpadmins.
Normalmente o comando warnquota é rodado periodicamente como um serviço no utilitário cron.
Consulte o manual do comando warnquota para mais informações.

Sintaxe:
warnquota [ -ugsid ] [ -F quotaformat ] [ -q quotatab ] [ -c configfile ] [ -a adminsfile ]

Fim.

Referência:
IBM DeveloperWorks - Linux LPI - Tópico 104.
Guia Foca Linux

Recursos:
Quota HOWTO


Leia mais...

Friday, September 08, 2006

Linux - Sistema de Arquivos

O Linux suporta diferentes sistemas de arquivos.
Cada um com suas vantagens, desvantagens e características.

Atualmente uma importante característica dos atuais sistemas de arquivos, são os sistemas de arquivos com "journaling", o qual leva a preferência, sobre os outros sistemas de arquivos que não tem "journaling".
Neste artigo irei descrever como manipular os principais sistemas de arquivos disponíveis para Linux.

- Conteúdo:

1 - Sistemas de arquivos suportados pelo Linux:
1.0 - O sistema de arquivos ext2:
1.1 - O sistema de arquivos ext3:
1.2 - O sistema de arquivos ReiserFS:
1.3 - O sistema de arquivos XFS:
1.4 - O sistema de arquivos SWAP:
1.5 - O sistema de arquivos VFAT:
2 - Criando Sistemas de Arquivos:
2.0 - Criando um sistema de arquivos Ext3 na partição /dev/hda4:
2.1 - Vamos agora criar um sistema de arquivos ReiserFS na partição /dev/hda3:
2.2 - Vamos agora criar um sistema de arquivos VFS na partição /dev/hda5:
2.3 - Criando um espaço para troca de dados com a memória RAM (SWAP):
3 - Criando sistema de arquivos em um arquivo:
3.0 - Usando o comando dd:
3.1 - Formatando o arquivo através do comando: mkfs
3.2 - Mountanto/acessando através do comando: mount
4 - Visualizando sistemas de arquivos criados:

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

Journaling é um recurso que permite recuperar um sistema após um desastre no disco ( quando um disco está sujo ), em uma velocidade muito maior que nos sistemas de arquivos anteriores ( sem journaling ).

1 - Sistemas de arquivos suportados pelo Linux:

A lista de sistemas de arquivos suportados pelo Linux é muito grande, mas pode ser vista uma referência aqui.
Mas, neste artigo irei discutir somente os sistemas de arquivos mais comuns.
Segue abaixo uma breve descrição sobre os sistemas de arquivos mais comuns disponíveis para o Linux:

1.0 - O sistema de arquivos ext2:

O sistema de arquivos ext2 é conhecido como "Second Extended FileSystem" foi desenvolvido para ser mais "eficiênte" que o sistema de arquivos "Minix", seu antecessor.
O Minix era muito utilizado nas primeiras versões do Linux, e foi utilizado por muitos anos.
O sistema de arquivos ext2 não possui journaling e foi substituido pelo sistema de arquivos ext3.

1.1 - O sistema de arquivos ext3:

O sistema de arquivos ext3 é uma versão do ext2 com suporte a journaling.
Portando o ext3 tem as mesmas características do ext2, mas com suporte journaling.
Essa característica foi uma evolução e tornou o ext3 um sistema de arquivos muito estável e robusto.
Como no ext3 só foi adicionado o suporte a journaling, podemos converter um sistema de arquivos ext2 para ext3, adicionado suporte a journaling, e também podemos converter um sistema de arquivos ext3 para ext2, removendo o suporte a journaling.

1.2 - O sistema de arquivos ReiserFS:

O sistema de arquivos ReiserFS foi criado recentemente. Mas atualmente quase todas as distribuições Linux o suportão.
Sua performace é muito boa, principalmente para um número muito grande de arquivos pequenos.
ReiserFS também possui suporte a journaling.

1.3 - O sistema de arquivos XFS:

O sistema de arquivos XFS também possui suporte a journaling.
Foi desenvolvido originalmente pela Silicon Graphics e posteriormente disponibilizado o código fonte. O XFS é considerado um dos melhores sistemas de arquivos para banco de dados, pois é muito rápido na gravação.
XFS utiliza muitos recursos de cache com memória RAM, e para utilizar XFS é recomendado utilizar sistemas que possuem redundância de energia.

1.4 - O sistema de arquivos SWAP:

SWAP é um espaço reservado para troca de dados com a memória RAM.
Em alguns lugares ele não é mensionado como um Sistema de arquivos.
Mas resolvi descrever aqui pois faz parte deste artigo.

1.5 - O sistema de arquivos VFAT:

O sistema de arquivos VFAT é também conhecido como FAT32 ( M$ Windows ).
O sistema de arquivos VFAT não possui suporte a journaling.
E é utilizado normalmente para transferir dados entre sistemas M$ Windows e o Linux instalados no mesmo disco, pois pode ser lido e escrito por ambos os sistemas operacionais.
O sistema de arquivos VFAT está longe de ser um sistema de arquivos utilizado para Sistemas Linux, exeto para compartinhamento/compatibilidade entre o M$ Windows e Linux.
Se você utilizar VFAT no Linux, esteja certo de perder alguns atributos, tal como: Permissão de execução, links simbólicos entre outras coisas.

Ambos os sistemas de arquivos ext3 e ReiserFS são maduros o bastante para serem utilizados como padrão no Linux.
Esses dois são os mais utilizados pelas distribuições Linux.

2 - Criando Sistemas de Arquivos:

Para criar sistemas de arquivos utilizamos o comando: mkfs ( de "fazer sistema de arquivos" )
E o comando: mkswap para fazer espaços para troca de dados com a memória RAM.

O comando mkfs é um "front-end" para vários outros comandos para criação dos mais diversos e comuns sistemas de arquivos.
Para saber quais sistemas de arquivos é atualmente suportado pelo seu Linux, digite comando abaixo:

$ ls /sbin/mk*
/sbin/mkdosfs /sbin/mkfs.ext2 /sbin/mkfs.msdos /sbin/mkfs.xfs
/sbin/mke2fs /sbin/mkfs.ext3 /sbin/mkfs.reiser4 /sbin/mkreiser4
/sbin/mkfs /sbin/mkfs.jfs /sbin/mkfs.reiserfs /sbin/mkreiserfs
/sbin/mkfs.cramfs /sbin/mkfs.minix /sbin/mkfs.vfat /sbin/mkswap

No exemplo acima estão os sistemas de arquivos suportados pelo meu sistema: Kubuntu 6.06 LTS Dapper Drake, Kernel: 2.6.15-23-38.

Existem mais de um forma/comando para criar um sistema de arquivos.
Por exemplo, para criar um sistema de arquivos ext3, na partição /dev/hda4, podemos utilizar um dos seguintes comandos:

# mkfs.ext3 /dev/hda4

Ou

# mkfs -t ext3 /dev/hda4

Ou

# mke2fs -j /dev/hda4

A sintaxe para o comando mkfs é:

mkfs [opções] dispositivo [blocos]

onde

Opções:
-t tipo : especifica o tipo de sistema de arquivos a ser criado. O padrão é ext2.
-c : checa o dispositivo a procura de blocos defeituosos durante a criação do sistema de arquivos.

* dispositivo : é o arquivo especial correspondente ao dispositivo.
* blocos : é quantidade de blocos a ser utilizada pelo sistema de arquivos.

Para mais informações, consulte o manual do comando mkfs.

Agora vamos a prática !

Primeiro lembre-se que quando você utiliza o comando mkfs e seus derivados, você esta "formatando" a partição passanda como parâmetro.
Então não utilize o mkfs em partições que contenham dados importantes. Você estará apagando os dados da partição.
Abaixo irei mostrar alguns exemplo, lembre-se de substituir o nome da partição.

2.0 - Criando um sistema de arquivos Ext3 na partição /dev/hda4:

# mkfs -t ext3 /dev/hda4
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1026144 inodes, 2050295 blocks
102514 blocks (5.00%) reserved for the super user
First data block=0
63 block groups
32768 blocks per group, 32768 fragments per group
16288 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

2.1 - Vamos agora criar um sistema de arquivos ReiserFS na partição /dev/hda3:

# mkfs -t reiserfs /dev/hda3
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Many persons came to www.namesys.com/support.html, and got a question answered
for $25, or just gave us a small donation there.

Oleg Drokin was the debugger for V3 during most of the time that V4 was under
development, and was quite skilled and fast at it. He wrote the large write
optimization of V3.


Guessing about desired format.. Kernel 2.6.15-23-386 is running.
Format 3.6 with standard journal
Count of blocks on the device: 2050288
Number of blocks consumed by mkreiserfs formatting process: 8274
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: da877e16-506d-4687-845a-0bf5eeed7862
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/hda3'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/hda3.


2.2 - Vamos agora criar um sistema de arquivos VFS na partição /dev/hda5:


# mkfs -t vfat /dev/hda5
mkfs.vfat 2.11 (12 Mar 2005)

Todas os sistemas de arquivos acima podem ser montados com a ferramenta "mount" e incluída no arquivo /etc/fstab.
Exemplo:

# mount -t vfat /dev/hda5 /mnt/win


2.3 - Criando um espaço para troca de dados com a memória RAM (SWAP):

Para criar um sistema de arquivos tipo SWAP iremos utilizar a ferramenta: mkswap
É necessário a partição ser do tipo "swap", código 82.

# mkswap /dev/hda6
Configurando área de troca versão 1, tamanho = 8422617 kB
sem rótulo, UUID=3f8c0bcc-5409-4951-8939-cba0d1e8da71

É necessário ativar a partição de troca com o comando abaixo:

# swapon /dev/hda6

Para desativar utilize o comando:

# swapoff /dev/hda6

Enfim, você pode criar vários outros sistemas de arquivos de forma similar.
Mas verifique antes se o sistema de arquivos é suportado pelo seu kernel e verifique também o tipo da partição a qual você deseja formatar.

3 - Criando sistema de arquivos em um arquivo:

A criação de sistemas de arquivos não está limitada apenas a partições de disco.
Também podemos criar um sistema de arquivos em arquivos.

3.0 - Usando o comando dd:

Vamos utilizar o comando dd para criar um arquivo vazio de 1 GB.

# dd if=/dev/zero of=/tmp/arquivo-ext2 bs=1024 count=1000000
1000000+0 records in
1000000+0 records out

3.1 - Formatando o arquivo através do comando: mkfs

# mkfs -t ext3 /tmp/arquivo-ext3
mke2fs 1.38 (30-Jun-2005)
/tmp/arquivo-ext3 is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
125184 inodes, 250000 blocks
12500 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
15648 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Obs.: Ele primeiro dirá que o arquivo arquivo-ext2 não é um dispositivo de bloco especial (uma partição de disco) e perguntará se deve continuar, responda com y

3.2 - Mountanto/acessando através do comando: mount

# mount -t ext3 /tmp/arquivo-ext2 /mnt/arquivo-ext3/ -o loop=/dev/loop/0

Obs.: Foi usado o parâmetro -o loop para dizer ao comando mount para usar os recursos de loop do kernel para montar o sistema de arquivos.

4 - Visualizando sistemas de arquivos criados:

Há varias formas de visualizar os sistemas de arquivos existentes nas partições.
Abaixo segue as formas mais utilizadas:

Através do arquivo /proc/mounts:

# cat /proc/mounts
rootfs / rootfs rw 0 0
none /sys sysfs rw 0 0
none /proc proc rw,nodiratime 0 0
udev /dev tmpfs rw 0 0
/dev/hda2 / reiserfs rw 0 0
/dev/hda2 /dev/.static/dev reiserfs rw 0 0
tmpfs /var/run tmpfs rw 0 0
tmpfs /var/lock tmpfs rw 0 0
usbfs /proc/bus/usb usbfs rw 0 0
tmpfs /lib/modules/2.6.15-23-386/volatile tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
tmpfs /var/run tmpfs rw 0 0
tmpfs /var/lock tmpfs rw 0 0
/dev/hda3 /mnt/win98 vfat rw,nodiratime,gid=46,fmask=0007,dmask=0007,codepage=cp437,iocharset=iso8859-1,utf8 0 0

Através do comando: df -T

# df -T
Sist. Arq. Tipo 1K-blocos Usad Dispon. Uso% Montado em
/dev/hda2 reiserfs 10233024 2298764 7934260 23% /
varrun tmpfs 75416 52 75364 1% /var/run
varlock tmpfs 75416 4 75412 1% /var/lock
udev tmpfs 75416 68 75348 1% /dev
devshm tmpfs 75416 0 75416 0% /dev/shm
lrm tmpfs 75416 18856 56560 26% /lib/modules/2.6.15-23-386/volatile
/dev/hda3 vfat 10231424 1836824 8394600 18% /mnt/win98

Fim.

Referência:
IBM DeveloperWorks - Linux LPI - Tópico 104.

Recursos:
Ext3 - Gentoo Linux
Guia Foca GNU/Linux - Capítulo 5 - Discos e Partições
FileSystem na Wikipedia

Leia mais...

Sunday, September 03, 2006

Linux - Manipulando partições de disco.

Neste artigo irei descrever como manipular partições de disco no Linux utilizando a ferramenta fdisk.
Veja abaixo a lista de conteúdo deste artigo:

1 - Dispositivos de bloco e partições
1.0 - Dispositivo de Bloco
1.1 - Partições de Disco

2 - Exibindo informações sobre partições
2.0 - Utilizando "fdisk" para exibir partições

3 - Particionando disco com a ferramenta "fdisk"
3.0 - Criando uma nova partição primária
3.1 - Criando uma nova partição estendida
3.2 - Criando partições lógicas apartir da partição estendida
3.3 - Alterando o tipo da partição
3.4 - Excluindo partições existentes
3.5 - Alterando a flag de partição "bootável"
3.6 - Saindo do "fdisk" sem salvar as alterações feitas
3.7 - Saindo do "fdisk" e salvando alterações feitas

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

1 - Dispositivos de bloco e partições

1.0 - Dispositivo de Bloco:

Um dispositivo de bloco é uma camada de abstração para algum dispositivo de armazenamento que pode ser formatado em blocos. Blocos individuais podem ser acessados independentemente de outros blocos. Tal acesso é frequentemente chamado de "random access" ou "acesso aleatório".

Essa camada de abstração para acesso aos blocos de dispositivos de armazenamento, permitem programas acessarem estes dispositivos de bloco sem problemas, mesmo que o dispositivo abaixo dessa camada de abstração não parece ser o que realmente é.

Exemplo: Dispositivos como disquete, disco rígido, CD, ou qualquer outro dispositivo virtual pode ser acessado por essa camada de abstração.

No Linux, os dispositivos estão localizados no diretório /dev.
Neste diretório podemos encontrar diversos dispositivos. Os dispositivos de bloco são identificados com o caractere "b" e os dispositivos de caractere são identificados com o caracterer "c".

Exemplo:

$ cd /dev
$ ls -l

brw-rw---- 1 root disk 8, 2 2006-08-30 10:40 sda2
brw-rw---- 1 root disk 8, 5 2006-08-30 10:40 sda5
brw-rw---- 1 root plugdev 8, 16 2006-08-30 10:41 sdb
brw-rw---- 1 root plugdev 8, 17 2006-08-30 10:41 sdb1
crw-rw---- 1 root audio 14, 1 2006-08-30 10:41 sequencer
crw-rw---- 1 root audio 14, 8 2006-08-30 10:41 sequencer2
crw-rw---- 1 root root 21, 0 2006-08-30 10:41 sg0

Também podemos exibir somente os dispositivos de bloco com o comando abaixo:

$ cd /dev/ ; ls -l | grep "^b"

Descrevendo o comando acima: Primeiro entra do diretório /dev/, depois executa o comando ls -l e a saída é redirecionada para o grep, que por sua vez exibe apenas os dispositivos iniciados com o caracterer "b" de "bloco".

1.1 - Partições de Disco:

Para alguns dispositivos de bloco, tal como disquetes e CD/DVD, é comum ter somente um único sistema de arquivos.
No entanto, com disco rígido e alguns dispositivos de armazenamento USB ( Pen-drive ), é possível dividir um dispositivo em vários pedaços, ou seja, ter várias partições diferentes no mesmo dispositivo.

Com isso concluimos que disquetes, Zip-disks e CD-ROMs/DVD não possuem tabela de partição. Tabelas de partição são exclusivos dos discos rígidos e de "pen-drive".

Partições podem ter diferentes tamanhos e diferentes sistemas de arquivos.
Com isso, um único disco pode ser usado para vários propósitos.
Por exemplo: Podemos instalar em um único disco rígido, vários sistemas operacionais diferentes, incluindo FreeBSD, Solaris, Linux ou Microsoft Windows, entre outros. Todos compartilhando o mesmo disco rígido.

Existem três tipos de partições: Primária, extendida e lógica.
Um disco IDE pode ter no máximo 63 partições, já um SCSI são limitados a 15 partições.
Sendo que em discos IDE temos no máximo: 4 primárias ou 3 primárias e somente uma extendida e até 59 lógicas por disco.

O Linux enumera as partições primárias ou extendida de 1 até 4. Podemos ter apenas uma partição extendida por disco.
Então, como exemplo um dispositivo hda pode ter as seguintes partições: /dev/hda1, /dev/hda2, /dev/hda3 e /dev/hda4. Ou apenas uma partição primária ( /dev/hda1 ) e uma outra partição extendida ( /dev/hda2 ).
As partições lógicas se iniciam em /dev/hda5 e é necessário ter uma partição extendida para poder criar partições lógicas dentro.

2 - Exibindo informações sobre partições:

As informações sobre partições são armazenadas na "tabela de partições", que é localizada na trilha "0" do disco rígido (MBR).
Essa tabela, lista informações sobre o início e o fim de cada partição, informações sobre o tipo de sistema de arquivos e se alguma partição esta marcada como "bootável" ou não.

Para criar ou deletar partições, é necessário editar essa tabela de partição usando um programa designado para este trabalho.
Neste artigo iremos utilizar o programa em modo texto "fdisk", mas existe muitos outro programas que podem realizar esta tarefa, incluindo programas executados sobre janelas ( Gparted ).

2.0 - Utilizando "fdisk" para exibir partições:

Para exibir a tabela de partição, utilizamos o comando "fdisk" com a opção -l.
No exemplo abaixo, estou listando o disco /dev/sda:

# fdisk -l /dev/sda

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 9541 76638051 83 Linux
/dev/sda2 9542 9729 1510110 5 Extended
/dev/sda5 9542 9729 1510078+ 82 Linux swap / Solaris

Agora vamos entender o que cada um dos campos acima diz:

Disk /dev/sda: 80.0 GB, 80026361856 bytes = Mostra o tamanho total do disco.
255 heads, 63 sectors/track, 9729 cylinders = Mostra a geometria do disco
Units = cylinders of 16065 * 512 = 8225280 bytes = mostra o resultado da multiplicação de cilindros por blocos de 512 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 9541 76638051 83 Linux
/dev/sda2 9542 9729 1510110 5 Extended
/dev/sda5 9542 9729 1510078+ 82 Linux swap/Solaris

Primeira coluna: A coluna "Device" exibe o nome das partições existentes.
Segunda colula: A coluna "Boot" exibe as partições ativas como bootável. No exemplo a partição /dev/sda1 esta ativada.
Terceira coluna: A coluna "Start" exibe o cilindro inicial.
Quarta coluna: A coluna "End" exibe o cilindro final.
Quinta coluna: A coluna "Blocks" exibe numeros de blocos em 1k ( 1024 bytes ).
Sexta coluna: A coluna "Id" exibe informação sobre o tipo da partição.
Sétima coluna: A coluna "System" exibe o nome do tipo da partição.

3 - Particionando disco com a ferramenta fdisk:

Acima mostrei como exibir informações sobre sua partição com ferramenta "fdisk". E a ferramenta "fdisk" providencia um ambiente interativo para editar a tabela de partição, criar ou remover partições.

Aviso: Antes de modificar sua tabela de partição, faça backup das informações que julgar importantes e não realize nenhuma mudança com partições importantes em uso.
E tenha certeza que você saiba o que está fazendo antes de executar alguma ação. Pois o "fdisk" não irá fazer muitas confirmações, e suas alterações não podem ser desfeitas.

Para iniciar o "fdisk" em modo interativo, passe como parâmentro para ele o nome do disco ao qual você deseja editar.
Segue um exemplo abaixo:

# fdisk /dev/hda

O número de cilindros para este disco está configurado para 4865.
Não existe nada de errado, mas isto é maior que 1024,
e pode em certas configurações causar problemas com:
1) programas que executam em tempo de inicialização (versões velhas do LILO)
2) inicialização e programas de particionamento de outros OSs
(p.ex., DOS FDISK, OS/2 FDISK)

Comando (m para ajuda):

Agora você está em modo interativo. Você pode digitar "m" para exibir a ajuda do fdisk.
Segue exemplo abaixo:

Comando (m para ajuda): m
Comando - ação
a alterna a opção "inicializável"
b edita rótulo BSD no disco
c alterna a opção "compatibilidade"
d exclui uma partição
l lista os tipos de partição conhecidos
m mostra este menu
n cria uma nova partição
o cria uma nova tabela de partições DOS vazia
p mostra a tabela de partições
q sai sem salvar as alterações
s cria um novo rótulo de disco Sun vazio
t altera a identificação da partição para o sistema
u altera as unidades das entradas mostradas
v verifica a tabela de partições
w grava a tabela no disco e sai
x funcionalidade adicional (somente para usuários avançados)

Comando (m para ajuda):

Agora vamos verificar as partições existentes como o comando "p".
Segue exemplo abaixo:

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux

Como visto no exemplo acima, a capacidade do é 40 GB ( 40020664320 bytes ).
Mas nosso disco possui 2 partições criadas: Linux swap/Solaris e Linux.
Fazendo a soma dos blocos das 2 partições 257040 + 10233405 o total é de: 10490445 Kbytes ( 10 GB ).
Agora sabemos que existe 30 GB livre para podermos criar mais partições ( bricar com o "fdisk" ).

3.0 - Criando uma nova partição primária:

Nós agora iremos criar uma nova partição primária através do comando "n" ( de new ).
É necessário digitar "n" para criar a nova partição, "p" para criar uma partição primária e o informar um número entre 1 á 4 para informar o numero da partição.
Obs.: Lembre-se que podemos ter apenas 4 partições primárias, para o nosso exemplo irei criar a nova partição primárias número 3.

Segue o exemplo abaixo para criar uma partição primária de aproximadamente 8 GB (8201181 Kbytes):

Comando (m para ajuda): n
Comando - ação
e estendida
p partição primária (1-4)
p
Número da partição (1-4): 3
Primeiro cilindro (1-4865, padrão 1): 3606
Último cilindro ou +tamanho ou +tamanho M ou +tamanho K (3606-4865, padrão 4865): +8201181K

Agora vamos verificar quais partições estão criadas com o comando "p":

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux
/dev/hda3 3606 4627 8209215 83 Linux

Comando (m para ajuda):

3.1 - Criando uma nova partição estendida:

Agora iremos criar uma partição extendida com o resto do disco:
Segue o exemplo abaixo:

Comando (m para ajuda): n
Comando - ação
e estendida
p partição primária (1-4)
e
Partição selecionada 4
Primeiro cilindro (1-4865, padrão 1): 4628
Último cilindro ou +tamanho ou +tamanho M ou +tamanho K (4628-4865, padrão 4865):
Usando valor padrão 4865

Comando (m para ajuda):

Como visto, não foi necessário informar o último cilindro ou tamanho, pois se você não especificar nada, ele assume que o padrão é o resto do espaço livre do disco.

Para exibir as partições criadas, utilize o comando "p":
Segue o exemplo abaixo:

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux
/dev/hda3 3606 4627 8209215 83 Linux
/dev/hda4 4628 4865 1911735 5 Estendida

Comando (m para ajuda):

3.2 - Criando partições lógicas apartir da partição estendida:

A partição estendida não "ocupa espaço em disco", mas server somente para pordermos criar as partições lógicas sobre ela. Não é possível criar partições lógicas sem ter uma partição estendida.

Agora vamos criar uma partição lógica sobre a partição extendida que acabamos de criar.
Primeiro, iremos criar uma partição lógica de 1048576 Kbytes ( 1 GB ).
Depois iremos criar a segunda partição lógica com o resto do espaço livre do disco.
Segue o exemplo abaixo:

Criando a primeira partição lógica:

Comando (m para ajuda): n
Primeiro cilindro (4628-4865, padrão 4628): 4628
Último cilindro ou +tamanho ou +tamanho M ou +tamanho K (4628-4865, padrão 4865): +1048576K

Exibindo a partição criada com o comando "p":

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux
/dev/hda3 3606 4627 8209215 83 Linux
/dev/hda4 4628 4865 1911735 5 Estendida
/dev/hda5 4628 4759 1060258+ 83 Linux

Criando a segunda partição lógica com o resto do disco:

Comando (m para ajuda): n
Primeiro cilindro (4760-4865, padrão 4760): 4760
Último cilindro ou +tamanho ou +tamanho M ou +tamanho K (4760-4865, padrão 4865):
Usando valor padrão 4865

Exibindo a partição criada com o comando "p":

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux
/dev/hda3 3606 4627 8209215 83 Linux
/dev/hda4 4628 4865 1911735 5 Estendida
/dev/hda5 4628 4759 1060258+ 83 Linux
/dev/hda6 4760 4865 851413+ 83 Linux

Agora temos duas partições lógicas criadas sobre a partição estendida.

3.3 - Alterando o tipo da partição:

Para alterar o tipo da partição utilizamos o comando "t" ( de type ).
Depois escolhemos qual partição queremos alterar, em seguida escolhemos o código e hexadecimal correspondente ao tipo de partição que queremos ter.
Se você não sabe qual é o código hexadecimal relacionado a partição que você quer escolher, utilize opção "L", para exibir os tipos disponíveis.

No exemplo abaixo iremos alterar o tipo da partição /dev/hda3, de "83 Linux" para "c W95 FAT32 (LBA)".

Comando (m para ajuda): t
Número da partição (1-6): 3
Código hexadecimal (digite L para listar os códigos): L

0 Vazia 1e FAT16 Win95 Esc 80 Minix antigo be Inicialização
1 FAT12 24 DOS NEC 81 Linux antigo/Mi bf Solaris
2 root XENIX 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT1
3 usr XENIX 3c Recuperação d 83 Linux c4 DRDOS/sec (FAT1
4 FAT16
5 Estendida 41 Boot PReP PPC 85 Estendida Linux c7 Syrinx
6 FAT16 42 SFS 86 Conjunto de vol da Dados Não-FS
7 HPFS ou NTFS 4d QNX4.x 87 Conjunto de vol db CP/M / CTOS / .
8 AIX 4e QNX4.x 2ª part 88 Linux texto pla de Utilitário Del
9 AIX inicializá 4f QNX4.x 3ª part 8e Linux LVM df BootIt
a Gerenc. Inicial 50 DM OnTrack 93 Amoeba e1 Acesso DOS
b W95 FAT32 51 DM6 OnTrack Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 DM6 OnTrack Aux a0 Hibernação IB eb sist. arq. BeOS
f Win95 (LBA) Par 54 DM6 OnTrack a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 FAT12 Escondida 56 Golden Bow a7 NeXTSTEP f0 Inicialização
12 Diagnóstico Co 5c Edisk Priam a8 Darwin UFS f1 SpeedStor
14 FAT16 Escondida 61 SpeedStor a9 NetBSD f4 SpeedStor
16 FAT16 Escondida 63 GNU HURD ou Sys ab Inicialização f2 DOS secundário
17 HPFS ou NTFS Es 64 Novell Netware b7 sist. arq. BSDI fd Detecção auto
18 AST SmartSleep 65 Novell Netware b8 permuta BSDI fe LANstep
1b Partição Esco 70 Multi-Boot Disk bb Assistente de I ff BBT
1c FAT32 Win95 Esc 75 PC/IX
Código hexadecimal (digite L para listar os códigos): c
O tipo da partição 5 foi alterado para c (W95 FAT32 (LBA))

Comando (m para ajuda):

Exibindo a partição alterada com o comando "p":

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux
/dev/hda3 3606 4627 8209215 c W95 FAT32 (LBA)
/dev/hda4 4628 4865 1911735 5 Estendida
/dev/hda5 4628 4759 1060258+ 83 Linux
/dev/hda6 4760 4865 851413+ 83 Linux

Comando (m para ajuda):

Note acima que a partição /dev/hda3 agora é do tipo: c W95 FAT32 (LBA)

3.4 - Excluindo partições existentes:

Para excluir partições utilizamos a opção "d" ( de delete ).
Em seguida escolhemos qual partição excluir.

Aviso: Muito cuidado ao excluir as partições, pois uma vez excluída, será excluido todos os dados existentes na partição.
Você ainda pode desfazer esta ação, saindo do "fdisk" sem salvar as alterações, utilizando a opção "q" de "quit".

Para o nosso exemplo, iremos excluir a partição /dev/hda6:

Comando (m para ajuda): d
Número da partição (1-6): 6

Exibindo a partição deletada com o comando "p":

Comando (m para ajuda): p

Disco /dev/hda: 40.0 GB, 40020664320 bytes
255 cabeças, 63 setores/trilha, 4865 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Dispositivo Boot Início Fim Blocos Id Sistema
/dev/hda1 2300 2331 257040 82 Linux swap / Solaris
/dev/hda2 * 2332 3605 10233405 83 Linux
/dev/hda3 3606 4627 8209215 c W95 FAT32 (LBA)
/dev/hda4 4628 4865 1911735 5 Estendida
/dev/hda5 4628 4759 1060258+ 83 Linux

Comando (m para ajuda):

Note acima que a partição /dev/hda6, não existe mais, pois foi excluida.
Você agora tem espaço em disco para criar mais uma partição.

3.5 - Alterando a flag de partição "bootável":

A sinalização de "partição bootável" é necessária para dizer qual partição primária será iniciada pela BIOS no processo do "post".
Partições estendidas não podem ser marcadas como "bootável".
Tanto o LILO quanto o GRUB, ou qualquer outro gerenciador de discos necessita estar em uma partição bootável.
Você pode notar que a partição atualmente bootável é a partição /dev/hda2 (Linux), que está sinalizada com * na coluna "Boot".
Na partição /dev/hda2 temos o Linux com o LILO instalado, então não será necessário alterar a partição "bootável".
Mas se a partição /dev/hda3 estivesse marcada como "bootável", e quisemos utilizar o Linux com o LILO como gerenciador de boot, deveriamos alterar a partição "bootável" para /dev/hda2.

Para alterar a partição bootável utilize o comando: a

3.6 - Saindo do "fdisk" sem salvar as alterações feitas:

As vezes é necessário, desfazer as alterações realizadas no "fdisk" estando ainda em modo interativo. Ou mesmo sair do "fdisk" sem salvar as alterações.
Para isso utilize o comando "q" ( de quit ).
Veja o exemplo abaixo:

Comando (m para ajuda): q

3.7 - Saindo do "fdisk" e salvando alterações feitas:

Todas as alterações que nós realizamos até agora com o "fdisk" foram feitas utilizando a memória RAM.
Mas agora devemos gravar essas alterações no disco.
Você deve ter certeza de que tudo está correto, pois essa ação não tem volta. Liste as partições com o comando "p" para certificar que está tudo correto.

No exemplo abaixo, iremos salvar as alterações na tabela de partição (MBR)

Comando (m para ajuda): w
A tabela de partições foi alterada!

Chamando ioctl() para reler tabela de partições.

AVISO: Re-leitura da tabela de partição falhou com erro 16: Device or resource busy.
O kernel ainda está usando a tabela antiga.
A nova tabela será usada no próximo reboot.
Sincronizando discos.
root@roberto-desktop:~#

Obs.: Como visto acima, em alguns sistemas onde existem partições em uso, as alterações teram efeito somente após um reboot do micro.
Após reiniciar seu computador, execute o comando: fdisk -l /dev/hda para listar suas partições.

Fim.

Referência:
IBM DeveloperWorks - Linux LPI - Tópico 104.

Recursos:
Guia Foca GNU/Linux - Capítulo 5 - Discos e Partições.
fdisk(8) - Linux man page.


Leia mais...

Tuesday, August 29, 2006

Linux - Configurando Proxy no APT-GET

O "apt-get" é uma ferramenta de gerenciamento de pacotes para Sistemas Debian e sistemas baseados no Debian.

Neste artigo irei demostrar como configurar um servidor Proxy Transparente ou com Autenticação para utilização dessa famosa ferramenta de manipulação de pacotes.

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

- Configurando "apt-get" com Proxy Transparente:

Primeiro edite o arquivo de variáveis de ambiente com o comando abaixo:

# vi /etc/environment

Obs.: No exemplo eu utilizei o editor vi, mas pode ser qualquer outro editor de texto simples.

E inclua o seguinte conteúdo no arquivo "environment":

http_proxy="http://192.168.1.254:3128"
ftp_proxy="http://192.168.1.254:3128"

Acquire {
HTTP::Proxy 192.168.1.254:3128;
FTP::Proxy 192.168.1.254:3128;
};

alias wget="wget -Y on"

Obs.: No exemplo acima eu configurei o proxy para o protocolo HTTP e FTP.
Você também deve informar o endereço e a porta do seu Servidor Proxy (SQUID), no exemplo foi utilizado o IP: 192.168.1.254 e a Porta: 3128, altere para o IP e Porta do seu servidor de proxy e salve o arquivo.

Agora vamos editar o arquivo de configuração do APT-GET:

# vi /etc/apt/apt.conf

E adicione as seguintes linhas:

Acquire{
HTTP::proxy "http://192.168.1.254:3128";
FTP::proxy "http://192.168.1.254:3128";
}

Obs.: Novamente altere as informações de IP e Porta para do seu servidor de proxy e salve o arquivo.

Agora vamos alterar o arquivo: /etc/profile

# echo "export http_proxy ftp_proxy" >> /etc/profile

Pronto !

- Configurando "apt-get" para Proxy com Autenticação:

Para "apt-get" para Proxy com Autenticação é necessário incluir o usuário e senha, como EXEMPLO irei utilizar o usuario "roberto" e a senha "123mudar".

Primeiro edite o arquivo de variáveis de ambiente com o comando abaixo:

# vi /etc/environment

E inclua o seguinte conteúdo no arquivo "environment":

http_proxy="http://roberto:123mudar@192.168.1.254:3128"
ftp_proxy="http://roberto:123mudar@192.168.1.254:3128"

Acquire {
HTTP::Proxy roberto:123mudar@192.168.1.254:3128;
FTP::Proxy roberto:123mudar@192.168.1.254:3128;
};
alias wget="wget --proxy-user=roberto --proxy-passwd=senha"

Obs.: Não esqueça de alterar o IP: 192.168.1.254, Porta: 3128, Usuario: roberto e Senha: 123mudar para as informações corretas do seu servidor de proxy e o salve o arquivo.



Referência:
Viva o Linux

Recursos:
Google

Apt-get

Leia mais...