Я нашел обходной путь. с помощью следующей команды можно сбросить флаг разреженности, если в исходном файле spase есть дыры.
filesize=$(stat --format="%s" filename)
ntfsfallocate /dev/sdb1 -l ${filesize} /relative_path_to_mnt_target
Что делать, если в исходном разреженном файле нет дыр? также есть обходной путь.
- сначала измените размер (увеличьте) файл, используя усечение, чтобы создать некоторые дыры.
- umount, используя ntfsfallocate для усечения до исходного размера. demo command:
filesize=$(stat --format="%s" filename)
truncate -s $((filesize + 16 * 1024 * 1024)) /path_to_sparse_file
umount /dev/sdb1
ntfsfallocate /dev/sdb1 -l ${filesize} /relative_path_to_mnt_target
Наконец, вы можете исправить исходный код ntfsfallocate (предоставленный ntfs-3g), чтобы напрямую сбросить флаг разреженности, но я не показываю здесь код c.