Одно и то же содержимое папки, но разный размер на разных дисках. Почему?

Одно и то же содержимое папки, но разный размер на разных дисках. Почему?

У меня есть три копии одной и той же папки, но размеры у них разные. Почему?

У меня есть папка "Documents", которую я скопировал с зашифрованного lvm на жестком диске моего настольного компьютера на зашифрованный раздел luks на внешнем диске. Затем я скопировал эту папку с внешнего диска на зашифрованный lvm на жестком диске моего ноутбука.

Итак, у меня есть три копии одной и той же папки:

  • Рабочий стол
  • Внешний диск
  • Ноутбук

Я использовал diffнастольный компьютер и внешний диск --> никакой разницы.

Я использовал diffноутбук и внешний диск --> никаких различий.

Но у меня для этих трех случаев предусмотрены папки разного размера.

я использовал

du -bs --apparent-size Documents

для измерения размеров. Вот результаты:

  • Рабочий стол: 1735750760
  • Внешний диск: 1735742568
  • Ноутбук: 1735746664

Итак, мы замечаем, что есть небольшая разница между размерами. Небольшая разница, но все же есть. Мне было интересно, почему так. У вас есть объяснение?

решение1

Вы, возможно, заметили, что разница между разными папками заключается в следующем:

    Desktop:        1735750760
                  -       8192
    External drive: 1735742568  
                  +       4096  
    Laptop:         1735746664  

По моему опыту, такие различия в блоках 4K обычно возникают из-за изменений размеров каталогов. Если вы сравните размеры самих каталогов (в файловых системах ext они обычно кратны 4K), вы можете обнаружить разницу.
(например, каталоги иногда становятся меньше, когда они реструктурируются во время операции копирования, и удаленные записи таким образом очищаются)

Чтобы найти каталоги, которые отличаются по размеру, вам придется сравнить каталоги друг с другом. Следующий скрипт может помочь вам в этом:

#!/bin/bash
DIR1="${1%/}/"
DIR2="${2%/}/"

diff \
  <(find $DIR1 -type d -printf "%k %p\n" | sed -e "s|$DIR1||" | sort -k2) \
  <(find $DIR2 -type d -printf "%k %p\n" | sed -e "s|$DIR2||" | sort -k2)

Скопируйте код в новый файл (например, dircomp.sh) и сделайте его исполняемым chmod +x dircomp.sh. Затем назовите его как ./dircomp.sh /home/lemenhir/ /media/lemenhir/ExternalDrive/.

Теперь вывод должен содержать только каталоги с разными размерами и может выглядеть следующим образом:

< 4 Documents/Appartement/Bail
> 8 Documents/Appartement/Bail

где строки, начинающиеся с, <выводят список каталогов, расположенных в каталоге, указанном в качестве первого параметра (например, /home/lemenhir/), а строки, начинающиеся с, >выводят список каталогов, расположенных в каталоге, указанном в качестве второго параметра (например, /media/lemenhir/ExternalDrive/).

Если отображаются одиночные строки, то каталог не существует в противоположном каталоге.

Надеюсь это поможет.

Связанный контент