У меня есть сервер Solaris 10, который смонтировал удаленную файловую систему через NFS. Я считаю, что удаленная система - это NetApp, но это не ясно.

Когда я запускаю df -h <mountpoint>, я получаю размер 12T, используется 10T с емкостью 87%.

Когда я переключаюсь на точку монтирования и запускаю ls -A |xargs du -s, я получаю около 8 мегабайт. Я пришел к выводу, что du рекурсивно спускается и суммирует все размеры файлов, но, похоже, здесь этого не происходит.

Как изгородь, я побежал

find <mountpoint> -ls | awk '{total=total+$7}END{print total}'

Ответ 13006791645. При делении на 1024^3 (1073741824) получается около 12,1 терабайт.

Таким образом, может показаться, что find -ls и df более или менее совпадают. Почему дю потерпел неудачу так серьезно?

PS: команда ls -A также захватывает скрытые каталоги снимков, но find ничего не находит (кроме «обнаружен цикл»).

0
Jeff Schaller 28 Ноя 2019 в 04:09
du -s дает общее количество для каждого имени, указанного в командной строке, если вы не используете --total (только GNU du, у меня нет под рукой Solaris, чтобы проверить, какие параметры принимает эта версия du) . Итак, вы сложили все числа, заданные ls -A |xargs du -s? Почему бы просто не сделать du -s $mountpoint?
 – 
wurtel
28 Ноя 2019 в 10:57
Маловероятно, что люди используют gdu в Solaris. В особенности потому, что это слишком глупо, чтобы понимать файлы расширенных атрибутов.
 – 
schily
28 Ноя 2019 в 14:36
1024^3 байта - это гибибайт, а не терабайт. 7-е поле в -ls – это размер файла, а не его использование на диске.
 – 
Stéphane Chazelas
6 Дек 2019 в 18:50

1 ответ

du -s сообщает блоками по 512 байт. Ваше сравнение с df -h не может быть выполнено, поскольку du не сообщает данные, читаемые человеком.

Чтобы сравнить оба значения, используйте либо du -sh <mountpoint>, либо /usr/xpg4/bin/df -P, чтобы df также сообщал в единицах по 512 байт.

Согласно man du:

Файлы с несколькими ссылками будут учитываться и записываться только для одной записи. Запись каталога, выбранная в отчете, не указана. По умолчанию размеры файлов записываются в единицах по 512 байт с округлением до следующей единицы в 512 байт.

Попробуйте /usr/xpg4/bin/df -P получить 512 байт, сообщенные df:

bash-3.2$ /usr/xpg4/bin/df -P /var
Filesystem            512-blocks        Used   Available Capacity  Mounted on
rpool/ROOT/s10/var
                      1147797504    66061270   954397119     7%    /var

И сравните с du -s:

bash-3.2$ du -s /var
65976060        /var

Или сравните:

bash-3.2$ df -h /var              
Filesystem             size   used  avail capacity  Mounted on
rpool/ROOT/s10x_u11wos_24a/var
                       547G    32G   455G     7%    /var

С участием:

bash-3.2$ du -hs /var   
  31G   /var
0
Lambert 6 Дек 2019 в 18:41