Qual é a diferença entre 'fallocate --dig-holes' e 'fallocate --punch-hole' no Linux?

4

Eu entendo totalmente que --dig-holes cria um arquivo esparso no local. Ou seja, se o arquivo tiver furos --dig-holes options remove esses furos:

Vamos analisar de forma bem simplificada, digamos que temos um arquivo enorme chamado não-esparso:

não esparso:

aaaaaaaaaaaaaaaaaaaaaaaaaaaa
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
bbbbbbbbbbbbbbbbbbbbbbbbbbbb
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
cccccccccccccccccccccccccccc

não esparsa tem muitos zeros, supondo que os zeros de intercalação estejam em Gigabytes. fallocate --dig-holes de-aloca o espaço disponível para os zeros (furos) onde o tamanho real do arquivo permanece o mesmo (preservado).

Agora, há --punch-hole o que isso realmente faz? Eu li a man page, ainda não entendi:

-p, --punch-hole
              Deallocates space (i.e., creates a hole) in the byte  range
              starting at offset and continuing for length bytes.  Within
              the specified range, partial filesystem blocks are  zeroed,
              and  whole  filesystem  blocks  are  removed from the file.
              After a successful call, subsequent reads from  this  range
              will  return  zeroes.

Criando buraco, é o oposto da opção --dig-hole , parece que, e por que cavar um buraco não é o mesmo que criar um buraco ?! Socorro! precisamos de um lógico:).

A nomenclatura das duas opções é sinônimo linguisticamente, o que talvez cause confusão.

Qual é a diferença entre --dig-holes e --punch-holes operacionalmente (não logicamente ou linguisticamente, por favor!)?

    
por direprobs 04.09.2017 / 14:49

2 respostas

8

--dig-holes não altera o conteúdo do arquivo, conforme determinado quando o arquivo é lido: ele apenas identifica execuções de zeros que podem ser substituídos por furos.

--punch-hole usa os argumentos --offset e --length para fazer um furo em um arquivo, independentemente do que o arquivo contiver nesse deslocamento: ele funciona mesmo se o arquivo contiver zeros diferentes, mas o conteúdo do arquivo mudar como resultado. Considerando o seu arquivo de exemplo, executar fallocate --punch-hole --offset 2 --length 10 substituiria dez a caracteres por zeros, começando após o segundo.

    
por 04.09.2017 / 15:03
8

Resumindo:

  • --dig-holes torna um arquivo esparso sem modificar seu conteúdo (como visto por um programa lendo-o).
  • --punch-hole cria um furo em um arquivo, possivelmente modificando os dados existentes.

A diferença é que --dig-holes analisa o arquivo para áreas que podem ser tornadas esparsas (usando --offset e --length , se fornecido, para indicar o intervalo no arquivo a ser analisado), enquanto --punch-holes usa --offset e --length para realmente zerar uma parte de um arquivo para criar um furo.

Note também o plural "cavar buracos" versus o singular "furador".

De manual , sobre --dig-holes :

You can think of this option as doing a cp --sparse and then renaming the destination file to the original, without the need for extra disk space.

    
por 04.09.2017 / 15:03