1

Пытаясь проверить, успешно ли завершена операция копирования (или, по крайней мере, она не пропустила никаких файлов), я запустил du -b в каталоге источника и назначения, и он показал разницу примерно в 100 КБ.

Итак, я пошел отследить разницу и нашел один (из многих) лист-каталог, где du сообщает о разнице в общем размере для копии и оригинала.

Странно то, что ls -l показывает эти каталоги как абсолютно идентичные!

Вот два вывода в двух разных каталогах:

root@...:/local/.../DCIM/100___12# du -b
5286222389      .
root@...:/local/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus   2236594 Aug  5  2013 IMG_0005.JPG
...

против

root@...:/local_old/.../DCIM/100___12# du -b
5286226485      .
root@...:/local_old/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus   2236594 Aug  5  2013 IMG_0005.JPG
...

Обратите внимание, что размер, сообщаемый du -b , меньше, чем размер, сообщаемый ls -l и отличается для двух каталогов. Весь вывод команды ls -l одинаков для обоих каталогов.

В этом каталоге нет символических ссылок или системных файлов. Это просто набор файлов .jpg (прямое копирование с SD-карты камеры) и файл Thumbs.db, созданный для них Windows (через samba) ...

Я что-то упускаю из-за того, как эти команды должны работать?

(Я использую Debian Wheezy и снимаю uname -a выводит Linux ... 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux)

2 ответа2

3

Оба правы.

  • ls показывает точные байты файлов
  • du показывает использование диска, отличающееся тем, что система хранит файлы с использованием блоков.

Вы можете найти размер блока, который использует ваша файловая система, с помощью этой команды:

blockdev --getbsz <partition>

Например:

blockdev --getbsz /dev/sda1
0

После добавления параметра -a в ls я получил:

root@...:/local/.../DCIM/100___12# du -b
5286222389      .
root@...:/local/.../DCIM/100___12# ls -al --block-size=1
total 5292867584
drwxr-xr-x 2 markus markus     12288 Aug  5  2013 .
drwxr-xr-x 4 markus markus      4096 Aug  5  2013 ..
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
...

против

root@...:/local_old/.../DCIM/100___12# du -b
5286226485      .
root@...:/local_old/.../DCIM/100___12# ls -als --block-size=1
total 5292871680
drwxr-xr-x 2 markus markus     16384 Aug  5  2013 .
drwxr-xr-x 4 markus markus      4096 Aug  5  2013 ..
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
...

Обратите внимание на разницу в размере . -директория, которая точно компенсирует разницу, сообщаемую du -b .

Кроме того, кажется, что общее количество, сообщаемое ls на самом деле в блоках, а не в байтах. Таким образом, ответ вроде того, что предложил @jcbermu , но в обратном направлении:

Да, оба варианта верны , но ls сообщает об общем размере в используемых fs-блоках (но отдельные размеры файлов в байтах) и du -b сообщает о байтах.

Разница между источником и местом назначения, которое я вижу, вызвана разницей в размере, о котором сообщается . , Откуда это, другая история. Возможно, потому что один зарезервировал больше записей каталога в какой-то момент, чем другой. Но, по крайней мере, теперь я больше не беспокоюсь, что что-то пропустили в процессе копирования. Следующим шагом будет выяснить, как сказать du игнорировать . и .. в целом, и это должно решить мою проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .