Sim, os blocos são melhores, pois são usados no disco físico, mas você precisa obtê-los de uma maneira diferente
Use o os.stat
field st_blocks * 512
. link
os.stat(path)
Perform the equivalent of astat()
system call on the given path. (This function follows symlinks; to stat a symlink uselstat()
.)On some Unix systems (such as Linux), the following attributes may also be available:
st_blocks
- number of 512-byte blocks allocated for filest_blksize
- filesystem blocksize for efficient file system I/O
Geralmente, você terá um tamanho como um múltiplo de st_blksize
, a menos que você esteja usando um desses novos sistemas de arquivos que podem ter tamanhos de blocos variáveis ou duplicados. Você esperaria que o desdobramento dos sistemas de arquivos fosse contabilizado na contagem de blocos pela implementação do sistema de arquivos, mas pensando nisso, o dupe é como links físicos / físicos, mas para dados físicos. Talvez o FS pudesse dividir os blocos em todos os arquivos, ou apenas reportar blocos para um único arquivo ?? Provavelmente não.
Você também precisa considerar os links físicos / físicos. Atualmente, você adicionará o tamanho do alvo dos links (tente lstat
para esses links).
Uma maneira simples de duplicar hard links é dividir o tamanho do bloco pelo número de hard links ( st_nlink
), então, em um drive total, você só conta o inode uma vez, senão você tem que rastrear os números de inode.
A menos que você esteja em um exercício de aprendizado ... como Ouki menciona, use du
, já que outras pessoas já pensaram sobre essas coisas.