При копировании разреженных файлов с помощью io.Copy() они часто раздуваются существенного размера в месте назначения.
io.Copy() передает необработанные байты, что маскирует наличие дыр в разреженном файле – пробелов, в которых нет данных на самом деле проживает. Эта информация недоступна через стандартные системные вызовы, такие как read(2). Таким образом, io.Copy() не способен сохранять разреженность файлов.
Чтобы решить эту проблему, нам нужно углубиться в работу, используя пакет системных вызовов и ручную обработку. Системные вызовы Lseek(2) со специальными значениями SEEK_HOLE и SEEK_DATA могут использоваться для манипулирования дырами в файлах.
Если вы хотите сохранить разреженность файла во время передачи, ситуация более сложная. Fallocate(2) можно использовать для попытки создания дыр в поддерживаемых файловых системах. Однако в некоторых файловых системах, например, в семействе FAT, отсутствует поддержка дыр.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3