Sistema de arquivos “extents” e “clusters”

1

Estou tentando aprender sobre o HFS + e ele se refere a "extensões".

Wikipedia

Fork Data Attribute records contain references to a maximum of eight extents that can hold larger attributes. Extension Attributes are used to extend a Fork Data Attribute record when its eight extent records are already used.

  1. Qual é a extensão e como ela é usada?
  2. Os sistemas de arquivos que usam extensões também usam clusters?
  3. Como as extensões e os clusters são diferentes?

Eu li a entrada da Wikipedia para extensões e tudo o que ela diz é: Eles são blocos contíguos de memória reservada. Sem contexto, isso não tem significado.

    
por rubixibuc 17.02.2012 / 05:42

2 respostas

5

(Disclaimer: Eu sei sobre sistemas de arquivos em geral, mas não HFS especificamente.)

Um cluster é um grupo de setores de disco alocados como uma unidade. Geralmente é um pequeno poder de dois. Por exemplo, se um sistema de arquivos aloca espaço em unidades de 4 kilobytes, mas o tamanho do setor físico do disco é de 512 bytes, um cluster corresponderá a um grupo de 8 setores. Os clusters também são chamados de "blocos" ou "unidades de alocação".

Em poucas palavras, um cluster é a menor unidade de armazenamento em um sistema de arquivos, no mesmo sentido em que um setor é a menor unidade de armazenamento no disco subjacente. Eles podem ser os mesmos (por exemplo, um sistema de arquivos usando clusters de 4k em um disco com 4k setores físicos) ou podem ser diferentes (você pode criar um sistema de arquivos FAT com clusters de 64k, mas nenhum disco tem esse tamanho).

Uma extensão significa um intervalo contíguo de clusters em algum lugar no disco, descrito por um número de cluster inicial e um comprimento (quantos clusters após o início). Eles são usados para rastrear onde o conteúdo de um arquivo está localizado no disco. Idealmente, todo o conteúdo de um arquivo deve ser armazenado em uma região contígua, de modo que possa ser descrito por um único registro de extensão, mas se o arquivo estiver fragmentado, cada parte será descrita por um registro de extensão separado.

    
por 17.02.2012 / 07:16
2

Acho que a Apple tenta ocultá-lo, mas a descrição técnica completa do formato de volume HFS + pode ser encontrada em seu website de desenvolvedor aqui:

Nota técnica TN1150
Formato de volume HFS Plus

Aqui estão alguns bits relevantes para sua pergunta:

HFS Plus allocates space in units called allocation blocks; an allocation block is simply a group of consecutive bytes. The size (in bytes) of an allocation block is a power of two, greater than or equal to 512, which is set when the volume is initialized. This value cannot be easily changed without reinitializing the volume. Allocation blocks are identified by a 32-bit allocation block number, so there can be at most 2^32 allocation blocks on a volume. Current implementations of the file system are optimized for 4K allocation blocks. Note: For the best performance, the allocation block size should be a multiple of the sector size. If the volume has an HFS wrapper, the wrapper's allocation block size and allocation block start should also be multiples of the sector size to allow the best performance.

Então, basicamente, o que a Microsoft chama de "clusters" em FAT e NTFS, a Apple chama de "blocos de alocação" no HFS +. Isso responde à sua segunda pergunta: Sim, o HFS + é um exemplo de um sistema de arquivos que usa extensões e clusters blocos de alocação . E para esse assunto, o NTFS também usa extensões e clusters.

HFS+ tracks which allocation blocks belong to a fork by maintaining a list of the fork's extents. An extent is a contiguous range of allocation blocks allocated to some fork, represented by a pair of numbers: the first allocation block number and the number of allocation blocks. For a user file, the first eight extents of each fork are stored in the volume's catalog file. Any additional extents are stored in the extents overflow file, which is also organized as a B-tree.

Portanto, no HFS +, uma extensão é uma execução contígua de blocos de alocação usados para armazenar um arquivo * ou uma parte de um arquivo. Se o arquivo estiver fragmentado, ele usa uma extensão por fragmento. Pelo que posso dizer, isso combina com a maneira como as discussões de internos do NTFS usam o termo "extensões" também.

* file: Tecnicamente, eu deveria ter dito "fork" aqui, mas como ninguém usa mais forks de recursos, o fato de o HFS + suportar "forks" e "resource" separados para cada arquivo é apenas um anacronismo histórico.

    
por 17.02.2012 / 09:41