Używamy rsnapshot do tworzenia kopii zapasowych. Przechowuje wiele migawek kopii zapasowej pliku, ale usuwa stare. To jest dobre. Jednak rm -rf
wykonanie ogromnego drzewa katalogów zajmuje około 7 godzin . System plików to XFS. Nie jestem pewien, ile jest plików, ale prawdopodobnie jest to milion.
Czy w ogóle można to przyspieszyć? Czy jest jakieś polecenie, które działa tak samo rm -rf
i nie zajmuje godzin?
find . -delete -name directory
i jest znacznie szybszy niżrm -rf
.Odpowiedzi:
Nie.
rm -rf
wykonuje rekurencyjną, pierwszą analizę głębokości systemu plików, wzywającunlink()
każdy plik. Dwie operacje powodujące powolny przebieg procesu toopendir()
/readdir()
iunlink()
.opendir()
ireaddir()
zależą od liczby plików w katalogu.unlink()
zależy od wielkości usuwanego pliku. Jedynym sposobem, aby przyspieszyć to, jest albo zmniejszenie rozmiaru i liczby plików (co, jak podejrzewam, nie jest prawdopodobne), albo zmiana systemu plików na jeden z lepszymi właściwościami dla tych operacji. Uważam, że XFS jest dobry dla unlink () dla dużych plików, ale nie jest tak dobry dla dużych struktur katalogów. Może się okazać, że ext3 + dirindex lub reiserfs jest szybszy. Nie jestem pewien, jak dobrze radzi sobie JFS, ale jestem pewien, że istnieje wiele testów wydajności różnych systemów plików.Edycja: Wygląda na to, że XFS jest okropny w usuwaniu drzew , więc zdecydowanie zmień swój system plików.
źródło
unlink
że nie robi nic z rzeczywistą zawartością, ale aby wykonaćunlink
wywołanie systemowe, kod systemu plików ma jednak jeszcze więcej pracy, jeśli usunięty link jest ostatnim plikiem i jeśli nie jest on aktualnie otwarty. Jest to oczywiście zależne od systemu plików, ale wtedy może być bardzo zauważalna różnica, gdy usunięty plik jest ogromny.Alternatywnie przenieś katalog na bok, utwórz go ponownie z tą samą nazwą, uprawnieniami i własnością, a następnie uruchom ponownie wszystkie aplikacje / usługi, które dbają o ten katalog.
Możesz wtedy „nice rm” oryginalny katalog w tle, nie martwiąc się o przedłużoną awarię.
źródło
Upewnij się, że masz ustawione odpowiednie opcje montowania dla XFS.
Użycie -ologbufs = 8, logbsize = 256k dla XFS prawdopodobnie potroi wydajność usuwania.
źródło
Jeśli rm wykonuje się efektywnie na poziomie pliku, zajmie to dużo czasu. Dlatego migawki blokowe są tak dobre :).
Możesz spróbować podzielić RM na osobne obszary i spróbować zrobić to równolegle, ale nie mogę oczekiwać, że poprawi to. Wiadomo, że XFS ma problemy z usuwaniem plików, a jeśli jest to duża część tego, co robisz, być może inny system plików to byłby pomysł.
źródło
Dobrze jest używać ionice do operacji intensywnie korzystających z IO, niezależnie od używanego systemu plików.
Proponuję to polecenie:
Będzie dobrze grał w przypadku operacji w tle na serwerze z dużym obciążeniem IO.
źródło
Wiem, że to stare, ale pomyślałem, że podrzuciłem sugestię. Usuwasz te pliki sekwencyjnie, wykonywanie równoległych operacji rm może przyspieszyć.
http://savannah.nongnu.org/projects/parallel/ parallel można powszechnie stosować zamiast xargs
więc jeśli usuwasz wszystkie pliki w deltedir
Pozostawiłoby to tylko puste struktury katalogów do usunięcia.
Uwaga: prawdopodobnie nadal będziesz napotykać ograniczenia systemu plików, jak wspomniano powyżej.
źródło
Czy alternatywną opcją byłoby rozdzielenie danych w taki sposób, aby można było śmieci i odbudować rzeczywisty system plików zamiast rm?
źródło
Co powiesz na zmniejszenie uprzejmości polecenia? Lubić:
źródło