bsdtar
(pelo menos de libarchive
3.1.2) é capaz de detectar seções esparsas usando FS_IOC_FIEMAP
ioctl nos sistemas de arquivos que a suportam (embora também suporte várias outras APIs), no entanto , pelo menos no meu teste, por incrível que pareça, ele não é capaz de manipular os arquivos tar
que ele mesmo gera (parece um bug, no entanto).
No entanto, usar o GNU tar
para extraí-los funciona, mas o GNU tar não pode manipular alguns dos atributos estendidos que o bsdtar suporta.
Então
bsdtar cf - sparse-files | (cd elsewhere && tar xpf -)
funciona desde que os arquivos não tenham atributos ou sinalizadores estendidos.
Ele ainda não funciona para arquivos totalmente esparsos (apenas zeros), pois o FS_IOC_FIEMAP
ioctl retorna 0 extent e parece que bsdtar
não manipula corretamente (outro bug?).
star
( Schily tar ) é outra implementação de tar de código aberto que pode detectar arquivos esparsos (use a opção -sparse
) e não possui esses bugs de bsdtar
(mas não é empacotado por muitos sistemas).