Al copiar archivos dispersos usando io.Copy(), a menudo se inflan dramáticamente en tamaño en el destino.
io.Copy() transfiere bytes sin procesar, lo que enmascara la presencia de agujeros en un archivo disperso: los espacios donde no hay datos realmente reside. No se puede acceder a esta información a través de llamadas al sistema estándar como read(2). Como tal, io.Copy() es incapaz de preservar la escasez de archivos.
Para solucionar esto, debemos profundizar más utilizando el paquete syscall y el manejo manual. Las llamadas al sistema Lseek(2), con valores especiales SEEK_HOLE y SEEK_DATA, se pueden usar para manipular agujeros en archivos.
Si desea mantener la escasez de un archivo durante la transferencia, la situación es más complicada. Fallocate(2) se puede emplear para intentar la creación de agujeros en sistemas de archivos compatibles. Sin embargo, algunos sistemas de archivos carecen inherentemente de soporte completo, como la familia FAT.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3