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

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

Если файл размером 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 

  • У меня есть несколько python на моем компьютере? и как удалить один из них?
  • Как можно скрыть короткие клавиши X11 программой Python?
  • Библиотека библиотеки Python конфликтует с более низкой версией
  • ошибки сертификата, пытающиеся создать virtualenv на старом Ubuntu
  • Запуск сценария Python в фоновом режиме при загрузке
  • readline - почему он делает только возврат каретки, а не линию при достижении конца строки?
  • Расположение автомонтированных USB-устройств
  • Отказ Jupyter от CentOS запрещен
  • 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

    Linux Mint 17.1 XFCE не имеет предустановленной поддержки принтера. Могу ли я добавить его и точно как?

    apt-get не полностью удаляет зависимости, которые он установил

    не удается создать стандартное разрешение файла

    Как я могу получить много адресов из многих траекторий с помощью сценария bash без ошибок?

    Проблема с rsyslog conf file

    Как заменить строку в файлах, кроме строки, начинается с #

    Печать полей с помощью awk

    Использование клавиш VI для редактирования команд оболочки в UNIX

    grep-блок строк

    Как проверить, какой пользователь несет ответственность за использование определенного порта?

    Предотвратите запуск второго экземпляра моего программного обеспечения

    Есть ли способ генерировать вывод команды без использования bashrc / bash_profile?

    RasPi – USB-микрофон заблокирован

    Как создать пакет Archlinux с нуля

    Как редактировать текст в любом месте с любимым редактором в Linux?

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