du помилково повідомляє про порожній каталог


13

Я використовую ці команди:

du -sh --apparent-size ./*
du -sh ./*

обидва звіти:

4.0K    ./Lightroom_catalog_from_win_backup
432M    ./Lightroom catalog - wine_backup

при цьому ці каталоги містять:

$ll ./"Lightroom catalog - wine_backup"
total 432M
-rwxrwx--- 1 gigi gigi 432M Mar 18  2018 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 1 gigi gigi  227 Nov 21  2015 zbackup.bat
$ll ./Lightroom_catalog_from_win_backup
total 396M
-rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 3 gigi gigi  227 Dec 17 09:35 zbackup.bat

Чому duзвітування 4.0Kдля ./Lightroom_catalog_from_win_backup та як я можу змусити його звітувати правильно?

PS: інша інформаційна система:

$stat --file-system $HOME
  File: "/home/gigi"
    ID: 5b052c62a5a527bb Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 720651086  Free: 155672577  Available: 119098665
Inodes: Total: 183050240  Free: 178896289

$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial

Спираючись на відповіді, що вже були дані, що /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'повертається?
doneal24

ls -li ./*/"Lightroom 5 Catalog Linux.lrcat" 36831321 -rwxrwx--- 1 gigi gigi 432M Mar 18 2018 ./Lightroom catalog - wine_backup/Lightroom 5 Catalog Linux.lrcat 36833201 -rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 ./Lightroom_catalog_from_win_backup/Lightroom 5 Catalog Linux.lrcat
adrhc

1
Це створює проблему з відповідями, оскільки файл з кількістю посилань три не враховується в іншому місці duкоманди. Отже, у вашому робочому каталозі є лише два підкаталоги?
doneal24

ні, у мене є приблизно 15 інших
adrhc

Відповіді:


23

Я можу відтворити, якщо файли мають посилання:

~ mkdir foo bar
~ dd if=/dev/urandom of=bar/file1 count=1k bs=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00985276 s, 106 MB/s
~ ln bar/file1 foo/file1
~ du -sh --apparent-size foo bar
1.1M    foo
4.0K    bar

Це очікувана поведінка. З документів GNUdu :

Якщо два або більше жорстких посилань вказують на один і той же файл, враховується лише одна з жорстких посилань. Порядок аргументів файлів впливає на підрахунок посилань, а зміна порядку аргументу може змінити числа та записи, які виводиться.

Якщо вам справді потрібні повторні розміри жорстких посилань, спробуйте -lваріант:

' -l'
' --count-links'
Порахуйте розмір усіх файлів, навіть якщо вони вже з’явилися (як міцне посилання).

~ du -sh --apparent-size foo bar -l
1.1M    foo
1.1M    bar

15

Зверніть увагу, як складається кількість посилань 3на два файли Lightroom 5 Catalog Linux.lrcatта zbackup.batв Lightroom_catalog_from_win_backup.

Це означає, що ці два файли десь важко пов'язані (додаткові назви) для інших файлів. Під час запуску duв каталозі або наборі файлів кожне жорстке посилання враховується лише один раз.

Приклад:

$ ls -l
total 41024
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file1
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file2

$ du -h file1
10.0M   file1

$ du -h file2
10.0M   file2

$ du -h .
10.0M   .

Така поведінка явно обумовлена стандартом POSIX для duутиліти :

Файл, який виникає кілька разів під одним операндом файлів і має кількість посилань більше 1, рахується та записується лише для одного запису.

Деякі duреалізації мають нестандартні параметри для відключення такої поведінки. Для GNU duце робиться за допомогою -lопції.


3

Це майже напевно працює правильно. duрахує кожен файл лише один раз незалежно від того, скільки разів на нього посилається. Цілком імовірно, що ваші два каталоги містять один і той же набір файлів із жорстким зв’язком.

Сторінка людей для GNU duпропозицій -l, --count-linksщоб відключити цю стандартну оптимізацію (див , man duщоб перевірити , якщо ваша реалізація включає в себе це). Або ви запускаєте duдвічі, один раз для кожного каталогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.