Existe sistema de arquivos que me permite inserir algum bloco no meio do arquivo em O (1)?

6

Assumindo

  • temos um arquivo enorme F .
  • nós gostamos de colocar "em volta" buscar s um novo bloco vazio (preenchido com zeros) no tempo O (1) (ou seja, sem reescrever toda a parte em reminiscência)
  • "em volta" significa que podemos arredondar s para o blockisze do sistema de arquivos mais próximo, e o bloco para inserir também pode ser um bloco de sistema de arquivos

Existe um systemcall / filesystem que permitiria isso?

Se não, é uma boa ideia imitar esse comportamento usando btrfs_clone (mentined aqui ) e como ?

    
por Grzegorz Wierzowiecki 07.05.2016 / 08:49

1 resposta

3

Cite esta resposta :

As of Linux 4.1, fallocate(2) supports the FALLOC_FL_INSERT_RANGE flag, which allows one to insert a hole of a given length in the middle of a file without rewriting the following data. However, it is rather limited: the hole must be inserted at a filesystem block boundary, and the size of the inserted hole must be a multiple of the filesystem block size. Additionally, in 4.1, this feature was only supported by the XFS filesystem, with Ext4 support added in 4.2.

De fallocate (1) :

fallocate -d [-o offset] [-l length] filename
(...)
       -d, --dig-holes
              Detect  and  dig  holes.   This  makes  the  file  sparse in-place, without using extra disk space.  The minimum size of the hole depends on
              filesystem I/O block size (usually 4096 bytes).  Also, when using this option, --keep-size is implied.  If no range is specified by --offset
              and --length, then the entire file is analyzed for 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.

              See --punch-hole for a list of supported filesystems.
(...)
       -p, --punch-hole
(...)
              Supported for XFS (since Linux 2.6.38), ext4 (since Linux 3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).
    
por 23.05.2017 / 14:40