du-s - очевидный размер VS du-s

Если я понимаю правильно, Вы хотите полную командную строку процесса.

В соответствии с Linux или *BSD, передача ww к ps команда, чтобы сказать этому не усекать командные строки.

ps -A ww

Можно извлечь просто аргументы (включая название команды) путем передачи -o args кому: ps.

ps -o args -A ww

В соответствии с Linux, можно передать -C java перечислять только процессы, выполняющие названную команду java.

ps -o args -C java ww

Другой способ получить неограниченную ширину вместо терминальной ширины состоит в том, чтобы передать по каналу через другую программу.

ps -o args -C java | cat

В соответствии с Linux, можно получить целую командную строку процесса от /proc/$pid/cmdline где $pid идентификатор процесса. Командная строка хранится однозначно с пустыми байтами для разделения аргументов, таким образом, это хорошо, даже если аргументы содержат пробелы.

7
13.12.2014, 00:33
2 ответа

«очевидный размер» файла - насколько действительными данные на самом деле в файле. Это фактическое количество данных, которые можно прочитать из файла. Ориентированные на блокировке устройства могут храниться только с точки зрения блоков, а не байтов. В результате использование диска всегда округляется до следующего самых высоких блоков. «Блок» в этом случае может не приравнивать к физическому блоку на устройстве хранения, в зависимости от того, как файловая система выделяет пространство.

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

Ничего из этого не учитывает обработку редких файлов, что не может поддерживаться в зашифрованной файловой системе.

10
27.01.2020, 20:16

Пример минимальной детализации блоков

Давайте немного поиграем, чтобы посмотреть, что происходит.

mountговорит мне, что я нахожусь в разделе ext4, смонтированном в /.

Я нахожу размер блока с помощью:

stat -fc %s.

, что дает:

4096

Теперь давайте создадим несколько файлов с размерами1 4095 4096 4097:

#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
  dd if=/dev/zero of=f bs=1 count="${size}" status=none
  echo "size     ${size}"
  echo "real     $(du --block-size=1 f)"
  echo "apparent $(du --block-size=1 --apparent-size f)"
  echo
done

и результаты:

size     1
real     4096   f
apparent 1      f

size     4095
real     4096   f
apparent 4095   f

size     4096
real     4096   f
apparent 4096   f

size     4097
real     8192   f
apparent 4097   f

Итак, мы видим, что все, что ниже или равно 4096, фактически занимает 4096байт.

Затем, как только мы пересекаем 4097, она поднимается до 8192, что равно 2 * 4096.

Тогда ясно, что диск всегда хранит данные на границе блока 4096байт.

Что происходит с разреженными файлами?

Я не исследовал точное представление, но ясно, что --apparentпринимает его во внимание.

Это может привести к тому, что видимые размеры превысят фактическое использование диска.

Например:

dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f

дает:

8192    f
1073741825      f

Связанные:https://stackoverflow.com/questions/38718864/how-to-test-if-sparse-file-is-supported

Что делать, если я хочу хранить кучу мелких файлов?

Некоторые возможности::

Библиография:

Протестировано в Ubuntu 16.04.

5
27.01.2020, 20:16

Теги

Похожие вопросы