[Reprint] buracos de arquivo (Perfuração) e sua aplicação

furos de arquivo (Perfuradas) e sua aplicação

http: // blog.jcix.top/2018-09-28/hole_punching/

 

O comprimento de um arquivo e sua quantidade real de espaço em disco é provável que seja diferente, que envolve principalmente o conceito de arquivos esparsos (arquivo esparso), e os furos de arquivo (orifício de perfuração) são. Estas duas características necessárias para suportar o sistema de sistema operacional e arquivos, Linux é atualmente ext4, outros sistemas de arquivos XFS e suporte a esses recursos.

arquivos esparsos (arquivo esparso)

Saiba arquivo coeficiente mais intuitiva exemplo é a criação de um arquivo e, em seguida, usar lseek a um, a escrever algo real maior compensado neste offset, em seguida, a quantidade real de espaço em disco é pequeno, mas o tamanho do arquivo, mas relativamente grande. Por exemplo:

 

 

lsA -sopção para imprimir o espaço em disco ocupado pelo arquivo na primeira coluna:

 

 

Pode ser visto, o comprimento dos dois documentos são 3 bytes e 98K bytes, mas o espaço em disco é o mesmo, ou seja, a menor unidade de armazenamento do sistema de arquivos 4 KB. Isso ocorre porque não há uso file_sparse blocos de disco 100.000 antes de offset.

furos de arquivo (Perfuradas)

Exemplos superior ficheiro disperso é escrito por um deslocamento no arquivo vazio obtido de 3 bytes. E em alguns casos, iniciar um arquivo não é escassa, ele ocupou uma série de espaço em disco, em seguida, se algum do arquivo de dados no meio de nenhum uso, temos de reduzir o espaço em disco ocupado por arquivos, você só pode arquivo furos (perfuração) caminho de arquivo não-esparsos em um arquivo esparso.

O método específico é pelo fallocatesistema de chamada. Através man 2 fallocate, podemos ver o fallocateprotótipo chamada é a seguinte: [1]

 

 

uso geral desta chamada pode ser chamado de "alocação": designado modecomo 0, em seguida, [vai apresentar offsetoffset+len) para escrever a área de conteúdo é zero.

Vamos utilizá-lo para fazer tocas arquivo, essa utilização pode ser correspondentemente chamados "deallocation": Nós especificamos modea FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZEeste tempo [ offsetoffset+len) área do bloco será "buracos", a fim de reduzir o uso do disco de arquivo.

É por causa do fallocatemodo de "alocação", as chamadas do sistema para um arquivo cheio de zero, para que possamos usar apenas um presente para chamar primeiro "alocação", então a função arquivo de teste perfuração "deallocation".

Nota : Embora a página homem afirmou contém apenas fcntl.hpode ser, mas nos meus CentOS 7 sistemas também precisa incluir linux/falloc.ho contrário, o seguinte erro de compilação:

 

 

Nossas rotinas de teste são as seguintes:

 

 

O resultado:

 

 

Você pode ver se ele é usado struct statno st_blockscampo ou lsa -sopção de nos dizer "file_withhole" Este arquivo foi atingido um buraco de 600 KB (1000 K -> 400 K) .

Buracos nas aplicações de compressão de páginas MySQL

página em meus artigos anteriores analisaram MySQL InnoDB compressão transparente  [2] , este mecanismo de compressão é escavando baseado em arquivo. Ensaio blog pode olhar em detalhe, nas instruções simples abaixo:

InnoDB以InnoDB页为单元进行存储,对于一般的情况,InnoDB页默认为16KB,文件系统默认为4KB。当InnoDB要存储一个页时,会对16KB进行压缩,压缩后大小为12KB,那么12KB到16KB之间的内容会首先被填零,然后用fallocate作“deallocation”打洞,这样额外的一个文件系统块就因压缩而被节约了;同样,若压缩后的页小于8 KB或小于4 KB,那么分别就可以节约8 KB 或 12 KB。


[1] fallocate – manipulate file space, http://man7.org/linux/man-pages/man2/fallocate.2.html

[2] MySQL InnoDB透明页压缩的简单分析, http://blog.jcix.top/2017-04-16/transparent_page_compression/

Acho que você gosta

Origin www.cnblogs.com/jinanxiaolaohu/p/12490773.html
Recomendado
Clasificación