On Mon, 16 Jul 2001, Heber Blain Goncalves wrote:

> - Onde ficam armazenados no disco esses inodes? Na FAT?

Existem 4 �reas de um filesystem num dispositivo (disco): boot,
superblock, inodetable, datablocks.  O boot tem tamanho fixo
(normalmente) e no superblock est�o as informa��es de tamanho do
filesystem, n�mero de inodes, free datablocks table.  Existem muitas
c�pias do superblock espalhadas num dispositivo, para permitir que se
recupere o resto do sistema mesmo que o v�rios dos superblocks sejam
perdidos.


> - Por usar o mesmo inode, o hardlink ocuparia menos espaco em disco do
> que o symlink?

Sim.  Um hardlink ocupa apenas uma entrada num diret�rio, n�o "gasta"
outro inode.  O symbol link n�o "garante" que o conte�do do arquivo
(inode+databloks) continuem existindo se o arquivo principal for
removido (o symbol link passa a apontar para um arquivo inexistente).


> - Em que situacao eu utilizaria um hardlink, ja que me eh costumeiro
> somente criar symlinks?

Muitas coisas usam hardlink.  A mais comum � ter um �nico programa com
v�rios nomes (gzip/gunzip, sendmail/newaliases/mailq, ...).

       ls -l `which gzip gunzip sendmail newaliases mailq`

Ah, o sendmail usa link simb�lico... :)

symbol link pode apontar para qualquer coisa, j� hardlink tem que
apontar para algo que tenha um inode, e um inode no MESMO filesystem
do diret�rio onde ele vai ser associado a um nome de arquivo.

Sistema de "news" tem um arquivo por mensagem e cada �rea est� num
diret�rio, s� que uma mensagem pode estar em v�rias �reas
(crossposting) e usa-se hardlink para evitar excesso de arquivos
duplicados.  A diferen�a de uso de disco nesses casos � mostruosa.


A aplica��o mais comum com hardlinks (e realmente VITAL para o
funcionamento de v�rios aplicativos no Unix) � para se criar arquivos
de forma controlada, evitando que v�rias tasks usem um mesmo recurso,
criando uma situa��o onde somente UMA task ter� direito de usar o
recurso.

O recurso � usualmente um arquivo como um mailbox, um arquivo de
dispositivo como /dev/ttyS1, ...

Imagine uma situa��o onde v�rios programas podem estar querendo
acessar um mesmo recurso, um arquivo por exemplo.  Uma situa��o t�pica
� o mailbox do usu�rio:

       - O procmail � acionado pelo sendmail quando chega uma mensagem

       - O POP server vai ler a caixa postal

       - Um programa local (pine, mutt) podem querer abrir a caixa
         postal

O sistema � multitask, essas tasks podem todas, num mesmo momento,
querer acessar a caixa postal do usu�rio em /var/spool/mail/logname, e
alterar o conte�do desse arquivo.

Se n�o houver conten��o de acesso entre as tasks, vai sair besteira
com 100% de certeza.

Existe a t�cnica chamada de "lockfile" onde um outro arquivo � criado,
e somente UMA task ter� controle sobre esse arquivo, e essa task ent�o
poder� acessar o arquivo de interesse sabendo que s� ela tem direito
de alterar o conte�do.

O kernel GARANTE que a opera��o de "ln" e "mv" s�o "at�micas", isto �,
somente UMA task vai receber OK quando tentar mover/linkar um arquivo
com outro nome, de forma que somente essa task ter� o "direito" de
acesso ao recurso.  A opera��o � equivalente aos comandos:

        echo $$ >tmp_file_de_nome_unico
        ln tmp_file_de_nome_unico file.lock

"tmp_file_de_nome_unico" � um arquivo que somente a task sabe o nome,
e deve ser construido de forma a n�o coincidir com qualquer outro nome
que outra task queira usar.

"file.lock" � um nome padronizado e que todas as tasks que quiserem
usar o determinado recurso devem "concordar em usar".  Para mailbox �
/var/spool/mail/logname.lock.

O conte�do do lockfile tamb�m �, usualmente, o "task number" da task
que est� querendo o recurso ($$ num shellscript).  Isso permite que um
programa inspecione o file.lock e descubra que a task_number al�
armazenada j� n�o est� mais rodando no sistema, e com isso o programa
pode eliminar o "dead lockfile" e tentar obter o controle sobreo
lockfile novamente.

Um "dead lockfile" � o resultado de algum problema que impediu a task
que tinha controle sobre o lockfile de remove-lo ao finalizar a
opera��o (bug, reset, "kill -9", ...).

A task que "conseguiu sucesso" na chamada do ln passa ent�o a poder
fazer o que quiser com o mailbox, e no final ela deve eliminar o
lockfile.

As outras tasks ficam executando "sleep N" e tentando novamente mover
seu "tmp_file_de_nome_unico" para "file.lock" para poder acessar a
caixa postal (e verificando se n�o � um dead lockfile).

Os kernels hoje em dia tem a fun��o de "lock", mas existem muitas
coisas que ainda usam lockfile por "tradi��o", e os programas mant�m
essa tradi��o para garantir que sempre ir�o funcionar da mesma forma
em qualquer unix-like.

A atomicidade das fun��es de ln e mv s�o garantidas desde o projeto
original do primeiro Unix criado, e nenhum unix-like vai quebrar essa
caracter�stica do filesystem.

Por isso � imposs�vel querer usar um filesystem como FAT ou samba para
serem "nativamente" os root-filesystems de um sistema Unix: n�o h�
como simular opera��es elementares como essas nestes sistemas de
aquivos.


--- Wagner                      [EMAIL PROTECTED]



Assinantes em 16/07/2001: 2250
Mensagens recebidas desde 07/01/1999: 123249
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista: 
            mailto:[EMAIL PROTECTED]

Responder a