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


14

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

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

O conteúdo de 02/12/2010 é na maioria dos casos, links diretos para arquivos no diretório 28/11/2010, mas existem alguns arquivos novos ou alterados apenas em 02/12/2010. No linux, o utilitário 'du' me dirá o tamanho real obtido por cada instantâneo incremental. No Windows, explorer e du under cygwin são enganados por hardlinks e mostram que o dia 02/12/2010 ocupa um pouco mais de espaço do que o 28/11/2010.

Existe um utilitário do Windows que mostre o espaço correto usado de maneira correta?


As ferramentas para resolver isso seriam muito úteis para obter uma imagem precisa de Por que a pasta / winsxs cresce tão grande e pode ser reduzida? e
matt wilkie

esta parece ser a pergunta e as respostas de fator negativo para o uso normal do disco: Como posso visualizar o uso do sistema de arquivos no Windows?
Matt Wilkie

Respostas:


11

Tente usar o uso de disco do Sysinternals (também conhecido como du), usando especificamente os sinalizadores -ue -vcontará apenas ocorrências exclusivas e mostrará o uso de cada pasta à medida que 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 (esse é realmente o ponto de um link físico), portanto você não pode descontá-los em uma pasta por pasta, mas precisa fazer isso comparativamente.

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

du -u -v testFldResultados em execução (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

du -u -v testFld\aResultados em execução :

104  <path>\testFld\a
...

du -u -v testFld\bResultados em execução :

74   <path>\testFld\b
...

Observe a incompatibilidade?
Os links simbólicos em A, que se referem aos arquivos em B, são contados somente contra A durante a execução "completa" e B retorna apenas 54 (mesmo que os arquivos estivessem originalmente em B e tivessem ligações físicas de A). Quando você mede B separadamente (ou, se você não usar a -ubandeira exclusiva), ela contará sua medida "completa" de 74.


1
Obrigado, eu não sabia sobre o sysinternals du, apenas o cygwin. Aparentemente, o cygwin du faz o que eu quero também, só não pensei em experimentar antes de começar a recompensa.
Kbyrd

Esta resposta confunde a função da -ubandeira. Você obtém a medida "completa" se usar a -ubandeira. Sem ele, ele conta apenas 1 instância de qualquer arquivo com link físico. É o que diz o documento: docs.microsoft.com/en-gb/sysinternals/downloads/du e o teste o verifica.
martixy 27/07/19

2

O PowerShell 5 pode ser uma opção. Está disponível para o Windows 7, mas só o testei em um Server 2012 R2 com a visualização de abril de 2015

O provedor do sistema de arquivos no PowerShell 5 possui duas novas propriedades LinkTypee 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

Então 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

Então, mais de 13.000 arquivos com 2 GB ou mais são hardlinks


1

O TreeSize Professional (~ $ 55, 30 dias de teste) alega distingir o espaço em disco do NTFS no hardlink. Um teste rápido parece confirmar isso.

O suporte a hardlink não está pronto para uso: vá em Ferramentas> Opções> Digitalizar , digitalize novamente, use Ctrl-1e Ctrl-2para alternar entre Tamanho e Espaço alocado . Alocado é o espaço real usado, enquanto Tamanho é a estatística normalmente relatada por outros programas.

Há uma penalidade de desempenho por ativar o suporte a hardlink (e links simbólicos e montagens também se você desejar). A paleta de cores é extravagante para o meu gosto, mas isso parece ser o 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 apenas expandi-la.


1

Eu acho que alguns fatos precisam ser definidos aqui.

O Windows não pode "detectar" os hardlinks, pois cada arquivo é realmente um hardlink para vários bytes no disco.

A ferramenta du detecta duplicatas, mas isso também é falso, pois se a pasta A contém arquivos e B contém apenas links físicos para os arquivos em A, então du de A e du de B retornam a mesma resposta - o tamanho dos arquivos originalmente de A, mas agora esses arquivos também estão em B.

Na verdade, isso está correto, pois, por exemplo, se você excluiu A, seus arquivos não serão excluídos no disco, porque ainda são referenciados por B. Com links físicos, qual arquivo é a fonte e qual é o link físico é bastante arbitrário e sem sentido.

Produtos como du listarão um diretório enquanto descontam duplicatas. Isso funcionará apenas 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 links físicos, a questão "do tamanho real usado em um diretório NTFS" não faz sentido.


1

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

O tamanho da pasta que contém arquivos vinculados no NTFS pode ser considerado em três significados diferentes:

  1. Tamanho, incluindo tamanhos de todos os arquivos com links físicos (mostrados 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 que é mostrado pelo TreeSize Professional, na guia Detalhes, coluna Alocado, se a opção "Rastrear hardlinks NTFS" estiver ativada.

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

imagem

Receber o valor número 3 ainda é uma pergunta para mim. Embora eu tenha conseguido obter um limite inferior usando o Total Commander com o plugin NL_Info. O que eu tenho é um tamanho ocupado por arquivos que possuem apenas um hardlink (arquivos exclusivos). Foi cerca de 5 GB para um determinado exemplo.

Então, tentando expandir harrymc responda ou diga em outras palavras.


0

Você pode usar o ln.exe para mostrar o "tamanho real" de uma árvore de diretórios:

ln.exe --truesize z:\backups\.

Ele detectará apenas hardlinks abaixo dessa pasta inicial.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.