¿Cómo puedo verificar el tamaño real utilizado en un directorio NTFS con muchos enlaces duros?


14

En un volumen Win7 NTFS, estoy usando cwrsync que admite --link-dest correctamente para crear copias de seguridad de tipo "instantánea". Así que tengo:

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

El contenido de 2010-12-02 es principalmente enlaces de nuevo a archivos en el directorio 2010-11-28, pero hay algunos archivos nuevos o modificados solo en 2010-12-02. En Linux, la utilidad 'du' me indicará el tamaño real tomado por cada instantánea incremental. En Windows, explorer y du under cygwin son engañados por enlaces duros y muestra 2010-12-02 ocupando un poco más de espacio que 2010-11-28.

¿Existe una utilidad de Windows que muestre el espacio correcto utilizado de forma aguda?


Las herramientas para abordar esto serían muy útiles para obtener una imagen precisa de ¿Por qué la carpeta / winsxs crece tanto y puede hacerse más pequeña? y
matt wilkie el

Esta parece ser la pregunta y las respuestas de-factor para el uso normal del disco: ¿Cómo puedo visualizar el uso del sistema de archivos en Windows?
Matt Wilkie

Respuestas:


11

Trate de usar Uso Sysinternals disco (de otro modo conocido como du), específicamente el uso de la -uy -vbanderas sólo se contarán los sucesos únicos, y mostrarán el uso de cada carpeta a medida que avanza.

Hasta donde yo sé, el sistema de archivos no muestra la diferencia entre el archivo original y un enlace duro (ese es realmente el punto de un enlace duro), por lo que no puede descartarlos carpeta por carpeta, pero Necesito hacer esto comparativamente.

Para probar, creé una carpeta aleatoria con 6 archivos. Clonado todo el asunto. Luego creó varios enlaces duros y blandos dentro de la primera carpeta para hacer referencia a otros archivos en la primera carpeta, y también a algunos en la segunda.

du -u -v testFldResultados en ejecución (tenga en cuenta que los valores al lado de las carpetas están en 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 en ejecución en:

104  <path>\testFld\a
...

du -u -v testFld\bResultados en ejecución en:

74   <path>\testFld\b
...

¿Nota la falta de coincidencia?
Los enlaces simbólicos en A que se refieren a archivos en B solo se cuentan contra A durante la ejecución "completa", y B solo devuelve 54 (a pesar de que los archivos estaban originalmente en B y vinculados desde A). Cuando mide B por separado (o, si no usa la -ubandera única), contará su medida "completa" de 74.


1
Gracias, no sabía nada sobre el sysinternals du, solo el cygwin. Aparentemente, el cygwin du hace lo que quiero, simplemente no pensé en probarlo antes de comenzar la recompensa.
kbyrd

Esta respuesta confunde la función de la -ubandera. Obtiene la medida "completa" si usa la -ubandera. Sin él, solo cuenta 1 instancia de cualquier archivo vinculado. Lo dice en los documentos: docs.microsoft.com/en-gb/sysinternals/downloads/du y las pruebas lo verifican.
martixy

2

PowerShell 5 puede ser una opción. Está disponible para Windows 7, pero solo lo probé en un Servidor 2012 R2 con la Vista previa de abril de 2015

El proveedor del sistema de archivos en PowerShell 5 tiene dos nuevas propiedades LinkTypey Target:

ls taskmgr.exe | fl LinkType,Target

esto devuelve:

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

Entonces ahora solo puedo mostrar todos los archivos en system32 que no son enlaces duros:

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

esto devuelve:

Count    : 844
Sum      : 502,486,831

puedes comparar eso con todos los archivos:

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

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

Entonces, más de 13,000 archivos con 2GB + son enlaces duros


1

TreeSize Professional (~ $ 55, 30 días de prueba) afirma que distingue el espacio en disco NTFS. Una prueba rápida parece confirmar esto.

El soporte de Hardlink no está activado de inmediato: vaya a Herramientas> Opciones> Escanear , vuelva a escanear, luego use Ctrl-1y Ctrl-2para cambiar entre Tamaño y espacio asignado . Asignado es el espacio real utilizado, mientras que Tamaño es la estadística que normalmente informan otros programas.

Hay una penalización de rendimiento por activar el soporte de enlace duro (y también enlaces simbólicos y monturas si así lo desea). La paleta de colores es llamativa para mi gusto, pero eso parece ser normal para el curso en este género. También tenga cuidado al hacer clic en el área del gráfico de cuadro: es fácil mover accidentalmente una carpeta con un arrastrar y soltar por error cuando solo tenía la intención de expandirla.


1

Creo que algunos hechos deben establecerse aquí.

Windows no puede "detectar" enlaces duros, ya que cada archivo es en realidad un enlace duro a un grupo de bytes en el disco.

La herramienta du detecta duplicados, pero eso también es falso, ya que si la carpeta A contiene archivos y B solo contiene enlaces duros a los archivos en A, entonces du de A y du de B devolverán la misma respuesta: el tamaño de los archivos originalmente de A, pero estos archivos ahora también están en B.

Esto es realmente correcto, ya que, por ejemplo, si eliminó A, sus archivos no se eliminarán en el disco, ya que B. todavía hace referencia a ellos. bastante arbitrario y sin sentido.

Los productos como du enumerarán un directorio mientras descuentan los duplicados. Esto solo funcionará si todos los archivos y enlaces duros están contenidos en un directorio. Muchos productos de lista de carpetas hacen eso.

Conclusión: Con los enlaces duros, la cuestión del "tamaño real utilizado en un directorio NTFS" no tiene sentido.


1

También investigo un poco sobre esta cuestión. Aquí están los resultados que descubrí.

El tamaño de la carpeta que contiene archivos enlazados en NTFS puede considerarse en tres significados diferentes:

  1. Tamaño, incluidos los tamaños de todos los archivos enlazados (que WE muestra).
  2. Tamaño de archivos únicos solo en términos de la carpeta actual.
  3. Tamaño de archivos únicos solo en términos de todo el disco.

El número 2 es lo que muestra TreeSize Professional, en la pestaña Detalles, columna Asignada, si la opción "Rastrear enlaces duros NTFS" está habilitada.

Aquí hay un ejemplo para la carpeta winsxs (7.5Gb en oposición para 10):

imagen

Recibir el valor número 3 sigue siendo una pregunta para mí. Aunque pude obtener un límite inferior usando Total Commander con el complemento NL_Info. Lo que tengo es un tamaño ocupado por archivos que tienen un solo enlace duro (archivos únicos). Fue alrededor de 5 Gb para un ejemplo dado.

Así que tratando de expandir harrymc responder o decir en otras palabras.


0

Puede usar ln.exe para mostrar el "tamaño verdadero" de un árbol de directorios:

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

Solo detectará enlaces duros debajo de esa carpeta de inicio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.