Como posso verificar o tamanho real usado em um diretório NTFS com muitos hardlinks?

13

Em um volume Win7 NTFS, estou usando o cwrsync, que suporta --link-dest corretamente para criar backups do tipo "snapshot". Então eu tenho:

z:\backups10-11-28\cygdrive\c\Users\...
z:\backups10-12-02\cygdrive\c\Users\...

O conteúdo de 2010-12-02 é na maioria das vezes voltado para os arquivos no diretório de 2010-11-28, mas existem alguns arquivos novos ou alterados somente em 2010-12-02. No linux, o utilitário 'du' me informará o tamanho real de cada snapshot incremental. No Windows, explorer e du under cygwin são enganados por hardlinks e mostra 2010-12-02 ocupando um pouco mais de espaço do que 2010-11-28.

Existe um utilitário do Windows que mostrará o espaço correto usado de forma aguda?

    
por kbyrd 02.12.2010 / 23:16

5 respostas

10

Tente usar o Uso do disco Sysinternals (também conhecido como du ), usando especificamente o -u e -v flags só contarão ocorrências únicas e mostrarão o uso de cada pasta à medida que ela avança.

Até onde eu sei, o sistema de arquivos não mostra a diferença entre o arquivo original e um link físico (que é realmente o ponto de um link físico), então você não pode descontá-los em uma pasta por pasta. base, mas precisa fazer isso comparativamente.

Para testar, criei uma pasta aleatória com 6 arquivos para. Clonou a coisa toda. Em seguida, criei vários links hard e soft dentro da primeira pasta para referenciar outros arquivos na primeira pasta, e também alguns na segunda.

A execução de du -u -v testFld resulta em (observe os valores ao lado das pastas no KiB):

       104  <path>\testFld\A
        54  <path>\testFld\B
       149  <path>\testFld

Totals:
Files:        12
Directories:  2
Size:         162,794 bytes
Size on disk: 162,794 bytes

A execução de du -u -v testFld\a resulta em:

104  <path>\testFld\a
...

A execução de du -u -v testFld\b resulta em:

74   <path>\testFld\b
...

Observe a incompatibilidade?
Os links simbólicos em A que se referem a arquivos em B são contados apenas contra A durante a execução "completa", e B retorna apenas 54 (mesmo que os arquivos fossem originalmente em B e com link físico de A). Quando você mede B separadamente (ou, se você não usar o sinalizador -u exclusivo), ele contará sua medida "completa" de 74.

    
por 12.12.2010 / 18:25
2

O PowerShell 5 pode ser uma opção. Ele está disponível para o Windows 7, mas eu só testei isso em um servidor 2012 R2 com o abril de 2015 Visualizar

O provedor do sistema de arquivos no PowerShell 5 possui duas novas propriedades LinkType e Target :

ls taskmgr.exe | fl LinkType,Target

isso retorna:

LinkType : HardLink
Target   : C:\Windows\WinSxS\amd64_microsoft-windows-advancedtaskmanager_..._6.3.9600.17..2\Taskmgr.exe

Portanto, agora só posso mostrar todos os arquivos no system32 que não são hardlinks:

cd $env:SystemRoot\System32
ls -Recurse -File -force -ErrorAction SilentlyContinue | ? LinkType -ne HardLink | Measure-Object -Property Length -Sum

isso retorna:

Count    : 844
Sum      : 502,486,831

você pode comparar isso com todos os arquivos:

ls -Recurse -File -force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum

Count    : 14092
Sum      : 2,538,256,262

Portanto, mais de 13.000 arquivos com 2 GB + são hardlinks

    
por 18.07.2015 / 15:08
1

TreeSize Professional (~ $ 55, teste de 30 dias) afirma distinguir o espaço em disco rígido do NTFS. Um teste rápido parece confirmar isso.

O suporte de hardlink não é ativado imediatamente: vá para Ferramentas > Opções > Faça uma varredura , verifique novamente e use Ctrl-1 e Ctrl-2 para alternar entre o espaço Tamanho e Alocado . Alocado é o espaço real usado, enquanto Tamanho é a estatística normalmente reportada por outros programas.

Há uma penalidade de desempenho para ativar o suporte de hardlink (e links simbólicos e montagens também se você quiser também). A paleta de cores é berrante para o meu gosto, mas isso parece ser par para o curso neste gênero. Também tenha cuidado ao clicar na área do gráfico de caixas - é fácil mover acidentalmente uma pasta com um arrastar e soltar errado quando você pretendia expandi-la.

    
por 09.11.2012 / 07:21
0

Acho que alguns fatos precisam ser definidos aqui.

O Windows não pode "detectar" hardlinks, pois cada arquivo é na verdade um link físico para um monte de bytes no disco.

A ferramenta du detecta duplicatas, mas isso também é falso, já que se a pasta A contiver arquivos e B só contiver hardlinks para os arquivos em A, então du de A e du de B retornará o mesma resposta - o tamanho dos arquivos vindos originalmente de A, mas esses arquivos agora também estão em B.

Isso está correto, já que, por exemplo, se você excluiu A, seus arquivos não serão excluídos no disco, porque eles ainda são referenciados por B. Com hard-links, qual arquivo é a fonte e qual é o hard-link é bastante arbitrário e sem sentido.

Produtos como du listarão um diretório enquanto descontam duplicatas. Isso só funcionará se todos os arquivos e links físicos estiverem contidos em um diretório. Muitos produtos de lista de pastas fazem isso.

Conclusão: Com hard-links, a questão de "o tamanho real usado em um diretório NTFS" não tem sentido.

    
por 15.11.2012 / 11:40
0

Eu também faço algumas pesquisas sobre essa questão. Aqui estão os resultados que descobri.

O tamanho da pasta que contém arquivos com link físico em NTFS pode ser considerado em três significados diferentes:

  1. Tamanho incluindo tamanhos de todos os arquivos com link físico (mostrado por WE).
  2. Tamanho de arquivos exclusivos apenas em termos da pasta atual.
  3. Tamanho de arquivos exclusivos apenas em termos de todo o disco.

O número 2 é o mostrado pelo TreeSize Professional, na aba Detalhes, coluna Alocado, se a opção "Rastrear hardlinks NTFS" estiver ativada.

Aqui está um exemplo da pasta winsxs (7,5Gb em oposição a 10):

Receber o valor de número 3 ainda é uma questão para mim. Embora eu fosse capaz de obter um limite inferior usando o Total Commander com o plugin NL_Info. O que eu tenho é um tamanho ocupado por arquivos que têm um único hardlink (arquivos exclusivos). Foi cerca de 5GB para um determinado exemplo.

Então, tentar expandir a resposta harrymc ou dizer em outras palavras.

    
por 08.04.2015 / 23:36