Jak mogę sprawdzić rzeczywisty rozmiar używany w katalogu NTFS z wieloma dowiązaniami stałymi?

14

Na woluminie NTFS Win7 używam cwrsync, który poprawnie obsługuje --link-dest do tworzenia kopii zapasowych typu „migawka”. Więc mam:

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

Treść 2010-12-02 to w większości dowiązania twarde z powrotem do plików w katalogu 2010-11-28, ale jest kilka nowych lub zmienionych plików tylko w 02.12.2010. W systemie Linux narzędzie „du” powie mi rzeczywisty rozmiar każdego przyrostowego obrazu stanu. W systemie Windows zarówno explorer, jak i du under cygwin są oszukani przez hardlinks i pokazuje, że 2010-12-02 zajmuje nieco więcej miejsca niż 28.11.2010.

Czy istnieje narzędzie systemu Windows, które pokaże poprawne zajęte miejsce?

kbyrd
źródło
Narzędzia rozwiązujące ten problem byłyby bardzo pomocne w uzyskaniu dokładnego obrazu Dlaczego folder / winsxs rośnie tak duży i czy można go zmniejszyć? i
matt wilkie
wydaje się, że jest to de-czynnikowe pytanie i odpowiedzi na normalne użycie dysku: Jak mogę wizualizować wykorzystanie systemu plików w systemie Windows?
matt wilkie

Odpowiedzi:

11

Spróbuj użyć Sysinternals Disk Usage (inaczej znany jako du), w szczególności użycie flag -ui -vbędzie liczyć tylko unikalne wystąpienia i pokaże użycie każdego folderu w miarę jego działania.

O ile wiem, system plików nie pokazuje różnicy między oryginalnym plikiem a twardym dowiązaniem (to jest właśnie sens twardego dowiązania), więc nie można dyskontować ich na podstawie folderu po folderze, ale trzeba to zrobić porównawczo.

Aby przetestować, utworzyłem losowy folder z 6 plikami do. Sklonowałam całą rzecz. Następnie utworzył kilka twardych i miękkich linków w pierwszym folderze, aby odwoływać się do innych plików w pierwszym folderze, a także niektórych w drugim.

Uruchamianie du -u -v testFldwyników w (zauważ, że wartości obok folderów są w 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

Uruchamianie du -u -v testFld\awyników w:

104  <path>\testFld\a
...

Uruchamianie du -u -v testFld\bwyników w:

74   <path>\testFld\b
...

Zauważ niedopasowanie?
Dowiązania symboliczne w A, które odnoszą się do plików w B, są liczone tylko do A podczas „pełnego” uruchomienia, a B zwraca tylko 54 (mimo że pliki były pierwotnie w B i zostały połączone na stałe z A). Kiedy mierzysz B osobno (lub, jeśli nie użyjesz -uunikalnej flagi), policzymy jego „pełną” miarę 74.

DMA57361
źródło
1
Dzięki, nie wiedziałem o sysinternals du, tylko cygwin. Najwyraźniej cygwin du robi też to, czego chcę, po prostu nie pomyślałem o wypróbowaniu go przed rozpoczęciem nagrody.
kbyrd
Ta odpowiedź myli funkcję -uflagi. Masz „full” środek jeśli korzystać z -uflagą. Bez niego zlicza tylko 1 instancję dowolnego pliku połączonego na stałe. Mówi tak w dokumentacji: docs.microsoft.com/en-gb/sysinternals/downloads/du, a testowanie to weryfikuje.
martixy
2

Opcją może być PowerShell 5. Jest dostępny dla systemu Windows 7, ale przetestowałem to tylko na serwerze 2012 R2 z wersją zapoznawczą z kwietnia 2015 r

Dostawca systemu plików w programie PowerShell 5 ma dwie nowe właściwości LinkTypei Target:

ls taskmgr.exe | fl LinkType,Target

to zwraca:

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

Teraz mogę wyświetlać tylko wszystkie pliki w systemie 32, które nie są dowiązaniami stałymi:

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

to zwraca:

Count    : 844
Sum      : 502,486,831

możesz to porównać ze wszystkimi plikami:

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

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

Tak więc ponad 13 000 plików o pojemności 2 GB + to twarde linki

Peter Hahndorf
źródło
1

TreeSize Professional (~ 55 USD, 30-dniowa wersja próbna) twierdzi, że wyróżnia miejsce na dysku twardym w systemie NTFS. Szybka próba zdaje się to potwierdzać.

Obsługa twardego łącza nie jest włączana od razu: przejdź do Narzędzia> Opcje> Skanuj , ponownie skanuj, a następnie użyj Ctrl-1i, Ctrl-2aby przełączać się między rozmiarem a przydzielonym miejscem. Przydzielone to rzeczywiste zajęte miejsce, podczas gdy Rozmiar to statystyki zwykle zgłaszane przez inne programy.

Włączenie obsługi hardlink wiąże się z obniżeniem wydajności (a także dowiązań symbolicznych i montowań, jeśli tego chcesz). Paleta kolorów jest jak na mój gust jaskrawa, ale wydaje się, że jest odpowiednikiem kursu w tym gatunku. Zachowaj także ostrożność podczas klikania w obszarze wykresu pudełkowego - łatwo jest przypadkowo przenieść folder z błędnym przeciągnięciem i upuszczeniem, gdy chcesz go tylko rozwinąć.

matowe wilkie
źródło
1

Myślę, że pewne fakty muszą zostać tu przytoczone.

System Windows nie może „wykryć” dowiązań twardych, ponieważ każdy plik jest tak naprawdę dowiązaniem twardym do pęczka bajtów na dysku.

Narzędzie du wykrywa duplikaty, ale jest to również fałsz, ponieważ jeśli folder A zawiera pliki, a B zawiera tylko dowiązania twarde do plików w A, wówczas du z A i du z B zwrócą tę samą odpowiedź - rozmiar plików pochodzących pierwotnie z A, ale te pliki są teraz również w B.

Jest to w rzeczywistości poprawne, ponieważ na przykład, jeśli usunąłeś A, to jego pliki nie zostaną usunięte na dysku, ponieważ nadal są do nich odniesienia B. W przypadku twardych linków, który plik jest źródłem, a który twardym linkiem jest dość arbitralne i bez znaczenia.

Produkty takie jak du wyświetlą katalog przy jednoczesnym dyskontowaniu duplikatów. Działa to tylko wtedy, gdy wszystkie pliki i twarde łącza znajdują się w jednym katalogu. Robi to wiele produktów z listą folderów.

Wniosek: w przypadku twardych linków pytanie „rzeczywisty rozmiar używany w katalogu NTFS” nie ma znaczenia.

harrymc
źródło
1

Robię również badania dotyczące tego pytania. Oto wyniki, które odkryłem.

Rozmiar folderu zawierającego pliki dowiązane w systemie plików NTFS można rozpatrywać w trzech różnych znaczeniach:

  1. Rozmiar, w tym rozmiary wszystkich plików dowiązanych na twardo (co pokazuje WE).
  2. Rozmiar unikatowych plików tylko w odniesieniu do bieżącego folderu.
  3. Rozmiar unikalnych plików tylko w odniesieniu do całego dysku.

Liczba 2 jest pokazana przez TreeSize Professional, w zakładce Szczegóły, kolumna Przydzielone, jeśli włączona jest opcja „Śledź twarde łącza NTFS”.

Oto przykład folderu winsxs (7,5 GB w przeciwieństwie do 10):

wizerunek

Otrzymanie wartości numer 3 jest nadal dla mnie pytaniem. Chociaż udało mi się uzyskać niższą granicę, używając Total Commander z wtyczką NL_Info. Mam rozmiar zajmowany przez pliki, które mają tylko jeden hardlink (unikalne pliki). Dla tego przykładu było to około 5 Gb.

Więc próbuję rozwinąć odpowiedź harrymca lub powiedzieć innymi słowy.

tschesseket
źródło
0

Możesz użyć ln.exe, aby pokazać „prawdziwy rozmiar” drzewa katalogów:

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

Wykryje tylko twarde linki poniżej tego folderu początkowego.

Limer
źródło