A adição do conteúdo no início do arquivo resulta na atualização de todos os blocos de dados?

2

No sistema de arquivos Unix (UFS), o arquivo é representado como uma estrutura de inode que possui 15 ponteiros que fazem referência aos blocos diretos ou indiretos.

Tirar as imagens abaixo é um exemplo.

Cada bloco representado como Data no lado direito contém os dados reais do arquivo. E o tamanho desse data block geralmente é 4096 e é decidido durante a criação do sistema de arquivos.

Para um arquivo enorme de 40 MB, ele ocuparia quase 1K de blocos de dados. Diante desse cenário, se acrescentarmos dados a este arquivo, veremos que isso só impactaria o último bloco ou, se não houver espaço no último bloco de dados, ele criará um novo bloco de dados.

Mas se adicionarmos alguns dados (cerca de 200 bytes) no início do arquivo, ele teria efeito cascata nos blocos de dados abaixo e resultaria em mover (ou empurrar) os últimos 200 bytes de cada bloco de dados para os próximos dados bloco?

Da mesma forma, quando excluímos os primeiros 200 bytes do primeiro bloco de dados, ele terá efeito em cascata nos blocos de dados inferiores?

Ou existe uma maneira eficiente que o UFS ou, em geral, sistemas de arquivos empregam para lidar com tais cenários, pode ser que algum espaço de buffer seja reservado para cada bloco de dados?

Obrigado antecipadamente.

    
por Madhusudana Reddy Sunnapu 22.02.2016 / 12:45

1 resposta

4

A maioria dos sistemas de arquivos não suporta a inserção de dados no início de um arquivo, e o Unix não possui uma API para isso. Na maioria dos sistemas operacionais, as únicas maneiras de modificar um arquivo são substituir um segmento (por exemplo, alterar aaaaaaaaaa para aaabbbaaaa ), anexar dados no final (por exemplo, alterar aaaaaaaaaa para aaaaaaaaaacccc ) ou truncar o arquivo (por exemplo, altere aaaaaaaaaa para aaaaa ).

Se você quiser adicionar dados no início de um arquivo, crie um novo arquivo com os dados adicionais e copie o conteúdo do arquivo antigo depois disso.

Isso é verdadeiro tanto para o Unix original quanto para a maioria, senão para todos os modernos (e, mais geralmente, para a maioria dos sistemas operacionais).

    
por 23.02.2016 / 01:53

Tags