Por que os sistemas de arquivos baseados em inode NÃO precisam ser reinicializados após a atualização das versões da biblioteca? [duplicado]

3

Estou tentando entender o que é um inode. No entanto, essa passagem da Wikipédia me intriga:

Installation of new libraries is simple with inode filesystems. A running process can access a library file while another process replaces that file, creating a new inode, and an all new mapping will exist for the new file so that subsequent attempts to access the library get the new version. This facility eliminates the need to reboot to replace currently mapped libraries. For this reason, when updating programs, best practice is to delete the old executable first and create a new inode for the updated version, so that any processes executing the old version may proceed undisturbed.

    
por Vorac 13.02.2013 / 03:14

1 resposta

5

Em sistemas de arquivos no estilo Unix, tudo o que o sistema conhece sobre um arquivo (exceto seu nome) é armazenado no inode ou em um local apontado pelo inode. Isso inclui seu conteúdo, propriedade, datas de modificação e permissões. Uma entrada de diretório Unix é apenas um nome e um ponteiro para o inode e é usada apenas quando um processo está abrindo um arquivo. Quando o arquivo estiver aberto, a entrada do diretório é irrelevante.

O que isso significa é que é possível excluir um arquivo que está aberto no momento sem atrapalhar os processos que estão lendo ou gravando esse arquivo. Excluir o arquivo simplesmente remove a entrada do diretório. O inode permanece até que todos os processos tenham fechado o arquivo, ponto no qual o inode e todos os outros dados do arquivo são excluídos (ou pelo menos marcados como não mais em uso e disponíveis para recuperação). Isso é tratado por um campo, chamado "contagem de links", parte da estrutura do inode.

Portanto, se você quiser atualizar uma biblioteca compartilhada que esteja sendo usada por um programa em execução, basta excluir o arquivo da biblioteca. Como o programa já tem o arquivo aberto, ele não será afetado por isso. Então você instala a nova versão da biblioteca como um novo arquivo (que recebe um novo inode).

    
por 13.02.2013 / 04:27