Unikanie ekstremalnej fragmentacji skompresowanych obrazów systemowych w systemie plików NTFS

8

Wyjaśnienie problemu

Przechowuję obrazy dysku systemu Windows utworzone za pomocą wbadmin na dysku NTFS, i stwierdziłem, że kompresja to kompresja NTFS daje 1,5-2 × oszczędność miejsca, wciąż dając pełną dostępność do przywracania.

Ale w trakcie kompresji plik jest niesamowicie pofragmentowany, zwykle ponad 100 000 fragmentów obrazu dysku systemowego.

Przy takiej fragmentacji defragmentacja trwa bardzo długo (wiele godzin na obraz). Niektóre defragmentatory nawet nie mogą sobie z tym poradzić, po prostu pomijają plik lub ulegają awarii.

Źródłem problemu jest, jak sądzę, ten plik skompresowany przez fragmenty, które są zapisywane osobno.

Pytanie

Czy istnieje dobry (szybki) sposób na defragmentację pliku obrazu przy jednoczesnym zachowaniu jego kompresji (lub kompresji bez powodowania ekstremalnej fragmentacji)? Czy może być jakieś narzędzie do szybkiej defragmentacji pliku do ciągłego wolnego miejsca lub jakieś narzędzie (lub metoda) do tworzenia niefragmentowanego skompresowanego pliku z istniejącego nieskompresowanego?

Uwagi oparte na komentarzach / odpowiedziach:

  1. Zewnętrzne (do jądra systemu Windows) narzędzia kompresji nie są w moim przypadku opcją. Nie mogą dekompresować pliku w locie (do dekompresji pliku 10 Gb potrzebuję 10 Gb za darmo, co nie zawsze jest pod ręką, a także zajmuje dużo czasu); nie są dostępne, gdy system jest uruchamiany z dysku DVD w celu odzyskania (dokładnie wtedy, gdy potrzebuję obrazu). Proszę, przestań je oferować, chyba że utworzą plik skompresowany transaprentowo na NTFS, takich jak compact.exe.
  2. Kompresja NTFS nie jest taka zła dla obrazów systemowych. Jest raczej dobry z wyjątkiem fragmentacji. A dekompresja nie zajmuje dużo czasu procesora, nadal zmniejszając wąskie gardło We / Wy, co daje wzrost wydajności w odpowiednich przypadkach (niefragmentowany skompresowany plik ze znacznym współczynnikiem).
  3. Narzędzia do defragmentacji defragmentują pliki bez względu na to, czy są one skompresowane. Jedynym problemem jest liczba fragmentów, która powoduje niepowodzenie defragmentacji bez względu na to, czy fragmentowany plik jest skompresowany czy nie. Jeśli liczba fragmentów nie jest wysoka (około 10000 jest już w porządku), skompresowany plik zostanie zdefragmentowany i pozostanie skompresowany i nienaruszony.
  4. Współczynnik kompresji NTFS może być dobry, w zależności od plików. Obrazy systemowe są zwykle kompresowane do najwyżej 70% ich pierwotnego rozmiaru.

    Para zrzutów ekranu dla tych, którzy w to nie wierzą, ale oczywiście możesz wykonać własne testy.

  5. Naprawdę zrobiłem odbudowę z obrazów skompresowanych NTFS, zarówno pofragmentowanych, jak i niefragmentowanych, działa, proszę, zaufaj mi lub po prostu sprawdź to sam. rem: jak odkryłem około rok temu, nie działa w systemie Windows 8.1. Parapet działa w systemie Windows 7, 8 i 10.

Oczekiwana odpowiedź:

działająca metoda lub program dla Windows do:

  1. skompresuj plik (z kompresją NTFS i zachowaj go dostępnym do odzyskiwania systemu Windows) bez tworzenia wielu fragmentów (być może na innej partycji lub zrobienia skompresowanej kopii; musi być co najmniej 3 razy szybszy na HDD niż compact+ defrag),

    lub

  2. szybko (co najmniej 3 razy szybciej niż Windows defragmentuje na HDD) defragmentacja niszcząco pofragmentowanego pliku, na przykład zawierającego 100K + fragmentów (po defragmentacji musi pozostać skompresowany).

LogicDaemon
źródło
Uważam, że kompresja NTFS jest dość dziwna (ponieważ testy w świecie rzeczywistym wykazują jedynie spadek o 2–5%). Ponadto NTFS ma pewne zabezpieczenia dotyczące fragmentacji plików (takie jak kronikowanie). Jak duże są pliki (przed i po)? Ponadto na zdjęciu wygląda na to, że Defraggler nie może defragmentować skompresowanych plików.
Doktoro Reichard,
1
1. Możesz sam zrobić obraz systemu Windows i go skompresować. Jest naprawdę łatwo skompresowany co najmniej 1,5x (60-70% lub oryginalny rozmiar). 2. Tak, Defraggler i inne defragmentatory CAN defragmentują skompresowane pliki. To jest prawdziwe doświadczenie.
LogicDaemon,
Również współczynnik kompresji jest nie na temat, ale tutaj są prawdziwe obrazy prawdziwych świeżo zainstalowanych systemów Windows 7 Professional (głównie 32-bitowych, 3 lub 4 64-bitowych) ze standardowym zestawem oprogramowania: i.imgur.com/C4XnUUl .png
LogicDaemon
@DoktoroReichard zależy to od zawartości plików. Pliki tekstowe i rzadkie będą miały bardzo dobry współczynnik kompresji. Zazwyczaj unikam plików już skompresowanych, takich jak pliki zip, obrazy, pliki audio / wideo ... a po kompresji często stwierdzam, że rozmiar zmniejszył się o 10-20%
phuclv

Odpowiedzi:

4

Unikanie fragmentacji

Sekret polega na tym, aby na początku nie zapisywać nieskompresowanych plików na dysku.

Rzeczywiście, po skompresowaniu już istniejącego dużego pliku, zostanie on strasznie podzielony ze względu na naturę lokalnego algorytmu kompresji NTFS.

Zamiast tego można całkowicie uniknąć tej wady, zmuszając system operacyjny do kompresji zawartości pliku w locie, przed zapisaniem go na dysku. W ten sposób skompresowane pliki będą zapisywane na dysku jak zwykłe pliki - bez niezamierzonych przerw. W tym celu musisz utworzyć skompresowany folder. (W ten sam sposób, w jaki zaznaczasz pliki do skompresowania, możesz oznaczać foldery do skompresowania.) Następnie wszystkie pliki zapisane w tym folderze będą kompresowane w locie (tj. Zapisywane jako strumienie skompresowanych bloków). Pliki skompresowane w ten sposób mogą nadal być nieco pofragmentowane, ale będzie to dalekie od bałaganu, jaki powoduje kompresja NTFS w miejscu.

Przykład

Obraz systemu 232 skompresowany NTFS do 125 Mb:

  • Kompresja lokalna stworzyła aż 2680 fragmentów!
  • Kompresja w locie stworzyła 19 fragmentów.

Defragmentacja

Prawdą jest, że skompresowane pliki NTFS mogą stanowić problem dla niektórych narzędzi do defragmentacji. Na przykład narzędzie, którego zwykle używam, nie może skutecznie sobie z nimi poradzić - spowalnia do indeksowania. Nie martw się , stary sprawdzony Contig z Sysinternals wykonuje defragmentację skompresowanych plików NTFS szybko i bez wysiłku!

Slider2k
źródło
2

Czytanie artykułu w Wikipedii o kompresji NTFS :

Pliki są kompresowane w 16-klastrowych porcjach. W przypadku klastrów 4 kB pliki są kompresowane w porcjach po 64 kB. Jeśli kompresja zmniejszy 64 kB danych do 60 kB lub mniej, NTFS traktuje niepotrzebne strony o wielkości 4 kB jak puste klastry plików rzadkich - nie są zapisywane.

Pozwala to na rozsądne czasy losowego dostępu - system operacyjny musi tylko podążać za łańcuchem fragmentów.

Duże pliki kompresowalne stają się jednak bardzo fragmentaryczne, ponieważ każdy fragment o wielkości <64 KB staje się fragmentem.

Najpierw pierwsze. WBAdmin jest w istocie narzędziem do tworzenia kopii zapasowych, które przywraca pełny system za pomocą kamery. Oczekuje się, że plik wyjściowy jest duży (> 4 Gb). Jak pokazuje cytat, duże pliki szybko ulegają fragmentacji. Wynika to ze sposobu kompresji NTFS: nie według plików, ale według sektorów.

Dobrą analogią jest podzielenie ciasta na kilka pudeł, z których niektóre nie są puste. To jest plik początkowy. Część kompresyjna ściska kawałki ciasta, pozostawiając miejsce w pudełkach. Ponieważ kawałki ciasta nie są ze sobą połączone, ze względu na utworzoną przestrzeń, kawałki tworzące ciasto ulegają rozdrobnieniu.

Nadal jestem sceptycznie nastawiony do tego, że NTFS podaje taki rodzaj kompresji. Zgodnie z testem przeprowadzonym przez MaximumCompression na wielu plikach, NTFS uzyskuje najniższy wynik w stopniu kompresji, a mianowicie 40%. Z własnego doświadczenia mogę powiedzieć, że jest znacznie niższy, w rzeczywistości tak niski, że nigdy nie zadałem sobie trudu, aby go użyć, ani nie widziałem jego efektów.

Najlepszym sposobem uniknięcia fragmentacji jest przestanie polegać na NTFS. Większość defraggerów nie rozwinie lub nie przeniesie skompresowanych plików. Gdyby tak się stało, NTFS nie byłby w stanie rozwinąć plików lub gdyby mógł, ponieważ proces defragmentacji wypełniłby resztki miejsca po kompresji (4kB), rozszerzenie podzieliłoby pliki, ponieważ plik nie być zapisane w sąsiadujących ze sobą klastrach.

To powiedziawszy, a jeśli nie musisz stale czytać pliku, użyj niektórych formatów zalecanych w powyższym linku. 7z i rar są dość wydajne (tzn. Kompresują się w wysokich stosunkach w przyzwoitym czasie). Jeśli zależy Ci na przestrzeni, a nie na czasie, wybierz algorytm typu PAQ (chociaż będziesz bardzo długo kompresował i dekompresował pliki). Dostępne są również szybkie algorytmy.

Jeśli musisz stale czytać plik, nie kompresuj go wcale. NTFS jest po prostu zbyt niechlujny.

Doktoro Reichard
źródło
To źródło (ref. W Wikipdii) faktycznie zawiera dobre, choć techniczne, informacje o całym procesie.
Doktoro Reichard,
współczynnik kompresji jest nie na temat, ale tutaj są prawdziwe obrazy prawdziwych świeżo zainstalowanych systemów Windows 7 Professional (głównie 32-bitowych, 3 lub 4 64-bitowych) ze standardowym zestawem oprogramowania: i.imgur.com/C4XnUUl.png Dzięki kompresji naprawdę oszczędzam miejsce na dysku. Mogę później defragmentować pliki, ale to trwa zbyt długo.
LogicDaemon,
I o „unikaniu” kompresji NTFS: robię to od lat i działa prawie bezbłędnie, z wyjątkiem fragmentacji. Naprawdę nie należy go używać do plików, do których często uzyskiwany jest dostęp z powodu problemów z wydajnością, ale większość plików wykonywalnych i tekst są bardzo dobrze skompresowane. Ponadto pliki zapisywane sekwencyjnie, takie jak dzienniki, nie są pofragmentowane, ale nadal są kompresowane. I oczywiście skompresowane obrazy systemowe są doskonale przywracane, robione to wiele razy i nie trzeba ich jawnie „rozszerzać”, oczywiście dzieje się to automatycznie przez sterownik NTFS w pamięci blokowej.
LogicDaemon,
1
Naprawdę nie mogę się kłócić z wynikami (i dla przypomnienia podałem rzeczywiste wyniki testów, które były podobne do twoich i moje osobiste doświadczenie, które wydaje się być przestarzałe). Link, który podałem w komentarzu, zawiera informacje o tym, dlaczego nie można uniknąć problemu fragmentacji. Również w artykule w Wikipedii stwierdzono, że podczas rozruchu system Windows nie załadował jeszcze biblioteki kompresji dla systemu plików NTFS, nie jest też pewien procesu odzyskiwania. Może to zapewnić wgląd.
Doktoro Reichard,
Dzięki, ale to nie jest odpowiedź, którą chciałem uzyskać :) Miałem nadzieję, że będzie sposób na skompresowanie, ale nie pofragmentowanie pliku, poprzez zapisanie go sekwencyjnie lub przez bloki wielkości takie same jak fragment kompresji. Lub istnieje naprawdę skuteczny program do defragmentacji, który może szybko defragmentować pojedyncze pliki, gdy jest wystarczająco dużo ciągłego wolnego miejsca.
LogicDaemon,
0

Chociaż nie do końca to, o co poprosił OP, miałem dobre doświadczenie z oprogramowaniem zewnętrznym o nazwie Paragon. NTFS z definicji niszczy twój system plików okropnie, gdy kompresujesz (a czasem nawet zapisujesz) pliki. Rozciąga się to na zużywanie wielu wpisów MFT i ... To źle. Sterownik NTFS Microsoftu nawet nie usuwa tego, gdy plik jest defragmentowany. Dlatego wymagane są narzędzia innych firm. Paragon pozwala uruchomić go jako system operacyjny sam w sobie (obraz ISO) lub zainstalować w innym systemie operacyjnym Windows z dostępem do docelowego systemu plików. Następnie możesz zdefragmentować zarówno plik MFT, jak i pliki. Według mojej wiedzy jest to jedyny sposób, aby naprawić ten brak w systemie plików NTFS, bez formatowania woluminu.

(Nie mam żadnego związku z narzędziem lub jego twórcą poza tym, że to jedyna rzecz, która faktycznie działała)

Dzisiaj, 2 lata po pozornym zadaniu pytania, wolę zalecić deduplikację - może to dać 90% oszczędności na dysku, jeśli obrazy są „trochę” inne. Serwer Nano W2016 wewnątrz maszyny wirtualnej działa naprawdę dobrze, ale podejrzewam, że nawet FreeNAS lub cokolwiek innego używającego ZFS mogłoby to obsłużyć.

Mikrofon
źródło
jakikolwiek adres URL lub nazwa bardziej szczegółowa niż tylko „Paragon”? Google mnie nie rozumie. Znam firmę o nazwie Paragon, ale nic nie wiem o jej produktach, które defragmentują pliki NTFS (istnieje narzędzie do defragmentacji MFT, ale nie mam problemów z MFT). I dzięki za sugestię ZFS, przyjrzę się jej, ale znowu potrzebuję jej, aby móc uruchomić się w terenie, aby szybko odzyskać w miejscu.
LogicDaemon,
-1

Windows ostatnio traktuje pliki ZIP jak foldery. Pliki ZIP mogą być bardziej skompresowane niż pliki skompresowane NTFS i nie są z natury pofragmentowane, w przeciwieństwie do NTFS.

Dlaczego nie przetestować jednego z obrazów dysku przez kompresję za pomocą 7-zip w formacie ZIP i sprawdzić, czy można go bezpośrednio użyć do przywracania?

Jeśli nie, graj z parametrami kompresji 7-zip, aby zmaksymalizować kompresję przy użyciu najlepszego formatu, np. 7z. Możesz zwiększyć kompresję daleko poza NTFS, a tym samym udostępnić znacznie więcej miejsca na dysku - choć najszybszą dekompresją byłby drugi dysk fizyczny lub pamięć RAM, najlepiej na innym kablu kontrolera i IO.

FWIW, kompresja się opłaca w przypadku dysków SSD innych niż sandman dla dysków systemowych i plików niemedialnych - mniejsze zużycie dysku SSD, więcej miejsca i szybsze operacje we / wy dla plików nieskompresowanych. Zobacz http://www.tomshardware.com/reviews/ssd-ntfs-compression,3073-9.html

Pliki wideo, grafiki i inne skompresowane pliki danych (takie jak .XLSX) są już bardzo skompresowane, więc nie ma w tym żadnej korzyści z kompresji NTFS. Ani w bazach danych, ani w poczcie Outlook z losowymi aktualizacjami. Ale pliki wykonywalne, txt, html itp. Mają wiele zalet.

Kompresja jest również zawsze korzystna dla małych plików, np. Jeśli skompresowany <64 KB, tylko jeden fragment. Problemem byłoby odzyskiwanie tylko w przypadku problemów z dyskiem.

Tomek
źródło
1
Człowieku, mylisz się na wiele sposobów… Głównie Windows nigdy nie traktował plików ZIP jak folderów. Istnieją techniczne powody, dla których tak się nie stanie (w zasadzie tylko sekwencyjny dostęp do zawartości plików). Explorer, chociaż pozwala zarządzać zamkami błyskawicznymi podobnie jak foldery (ale w bardzo ograniczony sposób, nie wyodrębnia nawet innych plików, gdy otwieram HTML z zip), nie jest Windows. I w pytaniu wyjaśniłem, dlaczego osobne narzędzia, czy to Explorer, czy 7-Zip, nie pasują (patrz „Uwagi na podstawie komentarzy / odpowiedzi”)
LogicDaemon
przy okazji, zwróć uwagę na „mniejsze zużycie na dysku SSD”: jeśli dysk SSD nie ma wystarczająco dużej pamięci podręcznej, oznacza to 2 razy więcej zużycia. Ponieważ podczas zapisywania skompresowanego pliku system Windows najpierw zapisuje nieskompresowane klastry, a następnie kompresuje je i zapisuje te skompresowane (a następnie usuwa nieskompresowane). W końcu to powoduje fragmentację tematu mojego pytania. Dyski SSD firmy Samsung na łączu (zepsute btw, usunięcie „plików” z ogona) rzeczywiście mają wystarczająco dużą pamięć podręczną.
LogicDaemon
nie, system Windows nigdy nie traktuje plików zip i cab jako folderów. Możesz przeglądać ich zawartość (nazwy plików / folderów) bezpośrednio na moim komputerze, ale nie możesz uzyskać do nich przejrzystego dostępu jak obraz dysku lub skompresowany plik NTFS. Nadal musisz wyodrębnić plik w archiwum, gdzie go wyświetlić / edytować
phuclv