Самый точный отчет об использовании диска?

Поскольку дисковое пространство выделяется в блоках, является ли оно более точным представлением фактического пространства, потребляемого каталогом, чтобы сообщать об этом в блоках против байтов?

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

Изменить: файловая система, о которой идет речь, – ext4, без дедуплирования, без сжатия, fwiw.

Это моя попытка:

def getDirUsage(filepath, block_size=1024): # block_size as reported by os.statvfs() ''' return the number of blocks consumed by a directory ''' total_size = int(math.ceil(os.path.getsize(filepath)/block_size)) # debatable whether this should be included in the size allfiles = os.listdir(filepath) for f in allfiles: p = os.path.join(filepath,f) if os.path.isdir(p): total_size += getDirUsage(p,block_size) else: total_size += int(math.ceil(os.stat(p).st_size/block_size)) return total_size 

  • Как / usr / bin / env знает, какую программу использовать?
  • Почему работает «echo os.system (« / bin / bash »)?
  • Командная строка 7z добавляет файл в плоский каталог 7z-файл
  • Простой веб-сервер python не выполняет сценарии CGI
  • Как установить StackApplet на Debian?
  • Как управлять огромным количеством файлов в оболочке?
  • Что такое эквивалент python для grep -v?
  • Ограничить выполнение пользовательского скрипта
  • 3 Solutions collect form web for “Самый точный отчет об использовании диска?”

    Да, блоки лучше, поскольку они являются физическим диском, но вам нужно получить их по-другому

    Используйте поле os.stat st_blocks * 512 . https://docs.python.org/2/library/os.html#os.stat

    os.stat(path)
    Выполните эквивалент системного вызова stat() по данному пути. (Эта функция следует за символическими ссылками, чтобы установить символическую ссылку lstat() .)

    В некоторых системах Unix (например, Linux) могут быть доступны следующие атрибуты:

    st_blocks – количество 512-байтовых блоков, выделенных для файла
    st_blksize – блокирование файловой системы для эффективного ввода / вывода файловой системы

    Обычно вы будете иметь размер как кратный st_blksize если вы не используете одну из них – новые файловые системы с файловыми системами, которые могут иметь переменные размеры блоков или обход. Вы могли бы надеяться, что де-dupe в упомянутых файловых системах может быть учтен в подсчете блоков при внедрении файловой системы, но, думая об этом, обман подобен мягким / жестким ссылкам, но физическим данным. Может быть, FS может разделить блоки по всем файлам или только блоки отчетов для одного файла? Возможно нет.

    Вам также нужно учитывать мягкие / жесткие ссылки. В настоящее время вы добавите размер целевых ссылок (попробуйте lstat для них). Один простой способ дублирования жестких ссылок состоит в том, чтобы разделить размер блока на количество жестких ссылок ( st_nlink ), поэтому на общем диске вы считаете только st_nlink inode, в противном случае вам нужно отслеживать номера индексных номеров.

    Если вы не участвуете в учении … как упоминает Оуки, просто используйте du как уже думали другие люди об этом.

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

    Как насчет:

    • жесткая ссылка?
    • экзотическая файловая система – внутренний способ выделения дискового пространства (выделение половинного блока)?
    • сжатая файловая система?
    • например, «дедупликация» ?

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

    Системные инструменты

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

    • дю

      От человека du (от FreeBSD, будучи более подробным):

       DESCRIPTION The du utility displays the file system block usage for each file argument and for each directory in the file hierarchy rooted in each directory argument. If no file is specified, the block usage of the hierarchy rooted in the current directory is displayed. 
    • ls -s

      От человека ls :

       -s, --size print the allocated size of each file, in blocks 

      (кажется, что «блоки» – это, по сути, старомодные 1024 байта, а не реальные блоки диска)

    Пример :

     $ dumpe2fs /dev/mapper/vg_centurion-lv_root |head -20 |grep ^Block dumpe2fs 1.41.12 (17-May-2010) Block count: 13107200 Block size: 4096 

    Таким образом, наша корневая файловая система имеет 4k блоков.

     $ ls -l total 88 -rw-------. 1 root root 2510 Mar 20 18:00 anaconda-ks.cfg -rw-r--r--. 1 root root 67834 Mar 20 17:59 install.log -rw-r--r--. 1 root root 12006 Mar 20 17:57 install.log.syslog 

    С du:

     $ du -h anaconda-ks.cfg 4.0K anaconda-ks.cfg 

    И ls:

     $ ls -ls total 88 4 -rw-------. 1 root root 2510 Mar 20 18:00 anaconda-ks.cfg 72 -rw-r--r--. 1 root root 67834 Mar 20 17:59 install.log 12 -rw-r--r--. 1 root root 12006 Mar 20 17:57 install.log.syslog 

    И не забывайте разреженные файлы:

     $ dd if=/dev/null of=MEAN_FILE bs=1024k seek=1024k 0+0 Datensätze ein 0+0 Datensätze aus 0 Bytes (0 B) kopiert, 1,0298e-05 s, 0,0 kB/s $ ls -lh MEAN_FILE -rw-r--r-- 1 yeti yeti 1,0T Apr 3 09:44 MEAN_FILE $ du MEAN_FILE 0 MEAN_FILE 
    Interesting Posts

    Параллельная гостевая vcpu-операция на KVM

    Запуск 2 процесса сельдерея через cron

    Строка состояния экрана GNU – как заставить отображать имена сеансов оболочки?

    Thinkpad T400: приостановка HD не возобновляется

    Отсутствуют символы стека с первичным отчетом perf_event, несмотря на сборник -fno-omit-frame-pointer

    Добавление к CSV-файлу после получения базы данных из базы данных

    Как проверить файловую систему UFS на SPARC с Linux?

    Преобразование одного загрузочного одиночного жесткого диска в RAID 1 без его удаления

    npm проверка обновлений не удалась при входе в систему

    Приоритет интерфейса в лице VPN

    «Ошибка ввода / вывода» при доступе к каталогу

    Grub не загружается с GPT RAID (отказался от ожидания корневого устройства)

    Верно ли, что первая версия Linux была основана на частях Unix?

    Межсетевой экран для разделения трафика равномерно между подключенными пользователями

    Как заверить, что домашние каталоги NIS являются частными?

    Linux и Unix - лучшая ОС в мире.