padla@ds:~$ ls -lah .gitconfig
-rwxrwxrwx 1 padla users 49 May 15 16:35 .gitconfig
padla@ds:~$ du -h .gitconfig
4.0K .gitconfig
Файл ".gitconfig" имеет размер 49 байт, но на диске занимает 4 килобайта (размер физического сектора)
Создаем дырявый файл, размером 1 гиг:
padla@ds:~$ truncate -s1G file_0
Смотрим размеры:
padla@ds:~$ ls -lah file_0
-rwxrwxrwx+ 1 padla users 1.0G Jun 19 08:25 file_0
padla@ds:~$ du -sh file_0
0 file_0
Файл имеет размер 1 гигабайт, на диске занимает 0 байт.
Смотрим размер всех файлов в текущей директории
padla@ds:~$ find . -maxdepth 1 -type f -exec ls -la --block-size=1K {} \;|awk '{print $9,"\t",$5,"\tls,килобайт"}'>>/dev/shm/size
padla@ds:~$ find . -maxdepth 1 -type f -exec du -sk {} \;|awk '{print $2,"\t",$1,"\tdu,килобайт"}'>>/dev/shm/size
padla@ds:~$ sort -k 1 /dev/shm/size
При разнице больше 4 килобайт файл дырявый.
При наличии большого количества нулей в файле, его можно преобразовать в дырявый:
cp --sparse=always _исходный_файл_ _дырявый_файл_
Подозреваю, что некоторые пакеты могут такой тип копирования использовать по умолчанию.