Algum arquivo é copiado quando eu movo arquivos de uma pasta para outra pasta no mesmo disco?

3

Ou apenas a referência foi alterada? É uma questão geral. Não é realmente específico do Ubuntu.

BTW: Eu tentei o sudo fdisk -l, não parece dar a imagem completa.

    
por empedokles 08.08.2014 / 23:06

2 respostas

2

Um arquivo no * nix consiste em três coisas:

  • Os dados no disco
  • Um inode que aponta para os dados em um disco e armazena itens úteis como tempos de acesso e modificação, permissões, etc, etc. Eles variam de acordo com o sistema de arquivos.
  • Um (ou muitos) hardlinks que fornecem o local (caminho e nome de arquivo) e apontam para o inode.

Com efeito, o sistema está editando o hardlink, mas isso pode causar conflitos de simultaneidade, então o que realmente acontece é que o sistema cria um novo hardlink e depois exclui o antigo.

Sou o último, mas aqui , mas vou tentar encontrar uma fonte técnica para isso.

    
por Oli 08.08.2014 / 23:09
2

Eu realmente tenho lido sobre isso recentemente, e embora tenha sido especificamente sobre ext2, eu acredito que ext3 e ext4 são semelhantes, se não o mesmo.

Vamos chamar seu disco rígido físico sda . No nível mais alto, seu disco é primeiro dividido em partições separadas. Cada partição recebe seu próprio sistema de arquivos que decide como gerenciar arquivos nessa partição. Por exemplo, você pode ter o Windows em sda1 usando o sistema de arquivos NTFS, o Ubuntu em sda2 usando o sistema de arquivos ext4 e o Swap em sda3 que não usa um sistema de arquivos. Perto do começo de sda , antes das partições começarem, são duas coisas. Primeiro, o setor de inicialização, que sua BIOS carrega na inicialização e provavelmente contém o grub. Segundo, a tabela de partições, que lista os detalhes sobre onde todas as partições começam e terminam no disco. Você pode descobrir detalhes sobre suas partições usando sudo fdisk -l .

Dentro da partição ext4 em sda2 , a partição é dividida em grupos de blocos. Dentro de um grupo de blocos é primeiro o superbloco, que fornece informações importantes sobre o sistema de arquivos e o espaço livre. Depois de mais algumas áreas usadas pelo sistema de arquivos, estão os inodes. Cada inode inclui uma lista dos locais de até 12 blocos de dados. Cada inode também pode ter uma referência para até três outros inodes. A área final no grupo de blocos é para dados reais e é dividida em blocos (tipicamente 4 KB cada).

Todo diretório, arquivo e link possui um inode exclusivo. Os dados nos arquivos estão contidos em muitos blocos de disco diferentes que podem estar em qualquer lugar no disco. O inode do arquivo lista onde encontrar todos os blocos de dados potencialmente dispersos. Da mesma forma, o conteúdo de cada diretório é armazenado como dados da mesma maneira.

Quando você abre um arquivo, por exemplo /home/user/contacts.txt , o computador encontra o inode do diretório raiz, que sempre sabe onde encontrar. O inode lista os locais de todos os blocos de dados que descrevem o conteúdo do diretório. Em seguida, o computador pesquisa os blocos de dados em busca de uma entrada chamada "home". A entrada para o diretório home informa onde encontrar o inode para home no disco. Em seguida, ele procura nesse inode, procura os blocos especificados para user e repete o processo para localizar o arquivo contacts.txt , cujo inode lista os blocos que contêm o conteúdo do arquivo.

Se você quiser mover contacts.txt para /home , primeiro terá que fazer tudo o que foi descrito acima para encontrar o inode do arquivo. Em seguida, o computador precisa navegar até o inode para /home (que será rápido porque o Linux mantém um cache dos inodes de diretórios acessados recentemente chamado cache dentry) e adiciona contacts.txt aos blocos de dados do diretório. Em seguida, ele tem que navegar até o inode de user e pesquisar seus blocos de dados para contacts.txt e excluir sua entrada.

Portanto, se os dois locais estiverem na mesma partição, os blocos de dados do arquivo nunca serão realmente movidos. A referência do inode para o arquivo simplesmente será movida dos blocos de dados do diretório de origem para os blocos de dados do diretório de destino. Se um local estiver em uma partição diferente, que conta como um sistema de arquivos totalmente separado, a entrada do arquivo do inode será excluída, seus blocos de dados serão copiados e uma nova entrada do inode será criada nos blocos de dados do diretório relevante.

Há também mais uma coisa que acontece em segundo plano em ext3 e ext4 . Chama-se journaling e ajuda a garantir a integridade do sistema de arquivos, apesar de falhas. Sempre que ocorre uma operação de arquivo, o sistema de arquivos escreve uma entrada no diário descrevendo o que vai fazer. A entrada é excluída apenas quando todas as operações descritas forem concluídas. Dessa forma, quando um computador é inicializado após uma falha no meio das operações de arquivo, ele imediatamente vê as entradas pendentes no diário e pode tentar corrigir os problemas.

Fonte: Modern Operating Systems 3e por Andrew S. Tanenbaum

    
por TheSchwa 09.08.2014 / 00:22

Tags