Mamy duży system plików, w którym pełne du
podsumowanie (użycie dysku) zajmuje ponad dwie minuty. Chciałbym znaleźć sposób na przyspieszenie podsumowania użycia dysku dla dowolnych katalogów w tym systemie plików.
W przypadku małych gałęzi zauważyłem, że du
wyniki wydają się w jakiś sposób buforowane, ponieważ powtarzające się żądania są znacznie szybsze, ale w przypadku dużych gałęzi przyspieszenie staje się znikome.
Czy istnieje prosty sposób na przyspieszenie du
lub bardziej agresywne buforowanie wyników dla gałęzi, które nie zostały zmodyfikowane od poprzedniego wyszukiwania?
A może istnieje alternatywne polecenie, które może szybciej dostarczać podsumowania użycia dysku?
filesystems
cache
disk-usage
Ian Mackinnon
źródło
źródło
du
byłoby złe, ale szybszy skrypt opakowania z identycznym interfejsem byłby dla nas bardzo przydatny. Ponadto spodziewałbym się, że wyniki buforowania zależne od czasu ostatniej modyfikacji (i przy założeniu braku operacji na całym dysku, np. Defragmentacji) dałyby dokładne wyniki: czy czegoś brakuje?find
. Ale potem jestlocate
.StatFs
super szybką ocenę rozmiarów katalogów. W porównaniu do dużych, złożonych katalogów było prawie 1000 razy szybszedu
.Odpowiedzi:
Po ponownym uruchomieniu polecenia du widzisz efekt buforowania dysku. Po odczytaniu bloku jego bufor dyskowy jest przechowywany w pamięci podręcznej bufora, dopóki ten blok nie jest potrzebny. W przypadku du należy przeczytać katalog i i-węzeł dla każdego pliku w katalogu. W tym przypadku wyniki du nie są buforowane, ale można je uzyskać przy znacznie mniejszej liczbie operacji na dysku.
Chociaż można by zmusić system do buforowania tych informacji, ogólna wydajność ucierpiałaby, ponieważ wymagana przestrzeń bufora nie byłaby dostępna dla plików aktywnie uzyskiwanych.
Sam katalog nie ma pojęcia, jak duży jest plik, więc należy uzyskać dostęp do i-węzła każdego pliku. Aby zachować wartość w pamięci podręcznej za każdym razem, gdy plik zmieniał rozmiar, wartość w pamięci podręcznej musiałaby zostać zaktualizowana. Ponieważ plik może być wymieniony w 0 lub więcej katalogach, wymagałoby to, aby i-węzeł każdego pliku wiedział, w których katalogach jest wymieniony. To znacznie skomplikowałoby strukturę i-węzła i zmniejszyłoby wydajność IO. Ponieważ du pozwala uzyskać wyniki przy założeniu różnych rozmiarów bloków, dane wymagane w pamięci podręcznej musiałyby zwiększać lub zmniejszać buforowaną wartość dla każdego możliwego rozmiaru bloku, co dodatkowo spowalnia działanie.
źródło
Jeśli możesz ustalić, że różne hierarchie plików należą do różnych grup, możesz skonfigurować przydziały dysku . Nie podawaj górnego limitu (lub zmień go na rozmiar dysku), chyba że chcesz. Nadal będziesz w stanie od razu powiedzieć, ile z jego (efektywnie nieskończonej) kwoty wykorzystuje grupa.
Wymaga to, aby Twój system plików obsługiwał przydziały dla poszczególnych grup. Linux Ext [234] i zfs Solaris / * BSD / Linux. Byłoby dobrze dla twojego przypadku użycia, gdyby przydziały grupowe brały pod uwagę listy ACL, ale nie sądzę, że tak.
źródło
Typowe użycie
du
można znacznie przyspieszyć za pomocąncdu
.ncdu - NCurses Disk Usage
wykonuje
du
, buforuje wyniki i pokazuje je w przyjemnym gui wiersza poleceń, nieco podobnym dodu -hc -d 1 | sort -h
. Początkowe indeksowanie zajmuje tyle samo czasudu
, ale szukanie faktycznego „winowajcy” wypełniającego cenne miejsce jest przyspieszone, ponieważ wszystkie podkatalogi mają początkowo buforowane informacje.W razie potrzeby podkatalogi można odświeżyć, naciskając [r], a pliki / foldery można usunąć, naciskając [d], przy czym oba z nich aktualizują statystyki dla wszystkich katalogów nadrzędnych. Usunięcie wymaga potwierdzenia.
Jeśli to konieczne, dalsze przyspieszenie można osiągnąć przez nauczanie
ncdu -1xo- / | gzip >export.gz
w kronice towarzyskiej i późniejszy dostęp do niejzcat export.gz | ncdu -f-
, ale oczywiście daje więcej nieaktualnych informacji.źródło
Wolę korzystać z agedu
Agedu to oprogramowanie, które próbuje znaleźć stare i nieregularnie używane pliki, zakładając, że najprawdopodobniej nie będą one potrzebne. (np. Pliki do pobrania, które były przeglądane tylko raz).
źródło
Jak wspomniano przez SHW,
agedu
rzeczywiście stworzył indeks. Po przeczytaniu pomyślałem, że podzielę się innym sposobem na stworzenie indeksulocatedb
. Można utworzyć własną wersjęlocatedb
zdu
wyjściem:awk
przestawia wyjście du tak, aby najpierw miały nazwy plików, dzięki czemufrcode
działa poprawnie. Następnie użyjlocate
tej bazy danych, aby szybko zgłosić użycie dysku:Możesz go rozwinąć, aby dostosować do swoich potrzeb. Myślę, że jest to miłe wykorzystanie zlokalizowanego.
źródło
(patrz https://duc.zevv.nl ) może być tym, czego szukasz.
Duc przechowuje użycie dysku w zoptymalizowanej bazie danych, co zapewnia szybki interfejs użytkownika. Brak czasu oczekiwania po zakończeniu indeksu.
Aktualizacja indeksu jest dla mnie bardzo szybka (mniej niż 10 sekund na około 950 tys. Plików w katalogach 121 tys., 2,8 TB). Ma również GUI i interfejs użytkownika ncurses.
Zastosowanie np .:
Ze strony:
źródło
Mam cronjob skonfigurowany do uruchamiania aktualizowanego co 10 minut. Utrzymuje wszystkie bufory systemu plików ładne i świeże. Równie dobrze możesz użyć tej taniej pamięci RAM do czegoś dobrego. Użyj płyty głównej, patrz „przed” i „po”.
źródło
updatedb
nic nie mówi o użyciu dysku. Jeśli robisz to tylko po to, aby przejechać dysk, narazisz ogólną wydajność.du
jest powolne, ponieważ musisz uzyskać dostęp do metadanych potencjalnie dużej liczby plików, rozproszonych na dysku. Jeśli agresywnie uruchomisz updatedb, metadane wszystkich plików będą musiały być przechowywane w pamięci RAM. Następnym razem, gdy uruchomisz inną operację obciążającą metadane, zamiast wykonywać tysiące wyszukiwań na dyskach, używasz pamięci podręcznej. Zwykle masz niewielką szansę na buforowanie tej konkretnej części metadanych drzewa. Przy moim „ładowaniu pamięci podręcznej metadanych” jest wysoce prawdopodobne, że potrzebne dane są świeżo buforowane. Brak fizycznych poszukiwań == SZYBKO.Jeśli potrzebujesz tylko znać rozmiar katalogu, możesz go znacznie przyspieszyć, po prostu unikając zapisywania informacji na ekranie. Ponieważ suma całkowita jest ostatnim wierszem
du
polecenia, możesz po prostu potokować jątail
.Struktura katalogów o pojemności 2 GB zajmuje sekundę dla pełnego wpisu, ale mniej niż 5 tego w tym formularzu.
źródło
du -hs
jest to wygodniejsze w tym celu.--max-depth 1