Por que fazer. e .. tem um tamanho de arquivo de 4 kB e 12 kB, respectivamente? [duplicado]

3

Conforme exibido por ls -al , por exemplo:

drwxr-xr-x  9 jb jb 4.0K Mar  8 18:05 ./
drwx------ 49 jb jb 12K Mar 17 14:15 ../

Suponho que essa seja a quantidade mínima de espaço necessária para armazenar os metadados do inode, por exemplo, que retornou por stat , mas não tenho certeza.

    
por John Bensin 17.03.2013 / 21:46

2 respostas

5

. ( dot para d , d para o diretório) é um link físico para seu diretório contido. Você notará que:

ls -di . "$PWD"

retorne o mesmo número de inode. Seu tamanho é o número de bytes que ele precisa (ou possivelmente já precisou) para armazenar seu conteúdo, que é a lista de arquivos que ele referencia (que estão vinculados a ele, que incidentalmente inclui . e .. )

.. (o d irectory d irectory) é um hardlink para o diretório pai, que é o único diretório onde esse diretório é referenciado (diretórios só podem tem um link, se não considerarmos as entradas . e .. ).

Então:

ls -di -- .. "$(dirname -- "$(pwd -P)")"

também retornará o mesmo número de inode.

Portanto, no seu caso .. é maior que . . Ele provavelmente contém mais entradas (ou nos sistemas de arquivos em que o espaço alocado para diretórios nunca é recuperado, .. teve tantas entradas que precisou de 12kB para armazená-las, enquanto . nunca precisou de mais de 4kB).

    
por 17.03.2013 / 22:00
0

Um diretório em um sistema de arquivos típico do tipo Unix é apenas um arquivo especialmente atribuído. Então, é um link simbólico. Alguns sistemas de arquivos semelhantes a Unix são capazes de armazenar um pequeno arquivo, como um piscar simbólico dentro do inode. Isso significa que nenhum bloco deve ser alocado para o arquivo e, como os cálculos de tamanho de arquivo não contam os inodes, o arquivo tem tamanho zero.

Um arquivo cujos dados não podem caber em seu inode deve ocupar algum tipo de unidade mínima de armazenamento que é alocada separadamente do inode. (E, em seguida, o espaço de dados do inode é normalmente convertido em uma matriz de ponteiros para blocos desse armazenamento.)

A estratégia mais simples é que tudo é dividido em blocos indivisíveis, todos do mesmo tamanho, e não há dois arquivos que possam compartilhar o armazenamento em um único bloco. No entanto, alguns sistemas de arquivos como o Berkeley FFS podem dividir blocos em fragmentos atribuídos a arquivos diferentes para reduzir o desperdício.

O tamanho do bloco é decidido no momento da criação do sistema de arquivos, como um compromisso entre o endereçamento de um disco enorme e o desperdício de espaço para arquivos pequenos. Tamanhos de blocos típicos são potências de dois começando por volta de 512 (provavelmente raros hoje em dia).

Como você sabe, todo diretório (não-raiz) contém pelo menos duas entradas, porque mesmo um diretório vazio contém o. e .. links. Se você vir um valor diferente de zero como o tamanho de um diretório completamente vazio, isso indica que, no sistema de arquivos fornecido, essas duas entradas de diretório básicas são muito grandes para caber na pequena área de dados do inode. Portanto, os dados do diretório ocupam um bloco alocado separadamente ou um fragmento de bloco.

Parece que em seu sistema de arquivos, o tamanho do bloco é 4096 e não há fragmentos menores. (Ou então, você tem um tamanho de bloco ainda maior e 4096 é o tamanho de um fragmento.) Um diretório começa a ocupar um bloco / fragmento de 4096, e quando entradas suficientes são adicionadas àquele diretório para ficar sem espaço naquela unidade, diretório cresce para 8192, e depois para 12 kilobytes e assim por diante.

Um valor grande-ish para .. indica que o pai é um diretório considerável, que não tem relação com o tamanho do diretório filho.

    
por 18.03.2013 / 00:14