Próbowałem użyć rsnapshot do tworzenia kopii zapasowych, ale nie mogę go używać . Chociaż jest w stanie różnicować katalog (50 GB) i duplikować go (twarde linkowanie każdego pliku) w ciągu kilku minut, a cały katalog mogę cp w około pół godziny, jego usunięcie zajmuje znacznie ponad godzinę. Nawet przy bezpośrednim użyciu rm -rfv
uważam, że wykonanie pojedynczego pliku może zająć do pół sekundy, podczas gdy polecenia cp
i są link
wykonywane natychmiast.
Dlaczego rm jest taki wolny? Czy istnieje szybszy sposób rekurencyjnego usuwania linków? Nie ma dla mnie sensu, że kopiowanie pliku powinno zająć mniej czasu niż usunięcie go.
System plików, nad którym pracuję, to zewnętrzny dysk pamięci, podłączony przez USB i typu fuseblk (co myślę, że oznacza, że to NTFS). Mój komputer działa pod Ubuntu Linux.
Wyjście z góry:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
źródło
fuseblk
nie oznacza, że dysk jest NTFS, oznacza jedynie, że jest on zamontowany jako urządzenie FUSE. To może być prawie wszystko.Odpowiedzi:
Ostatecznie, bez względu na to, co robisz,
rm
musi działaćunlink
na każdym pliku, który chcesz usunąć (nawet jeśli wywołujeszrm -r
katalog macierzysty). Jeśli jest wiele plików do usunięcia, może to zająć dużo czasu.Po uruchomieniu są dwa szczególnie czasochłonne procesy
rm -r
:readdir
, śledzony przez,unlink
.Znalezienie wszystkich plików, a następnie przejrzenie każdego pojedynczego pliku, aby go usunąć, może zająć naprawdę bardzo długo.
Jeśli okaże się, że jest to „bezużyteczne”, ponieważ powoduje, że katalog nie nadaje się do użytku przez pewien czas, rozważ przeniesienie katalogu nadrzędnego przed jego usunięciem. Spowoduje to zwolnienie tej nazwy do ponownego użycia przez program, bez nadmiernej niedogodności.
Zakładając, że system plików to tak naprawdę system plików NTFS (nie jest to jasne z twojego pytania), system plików NTFS jest na ogół dość powolny w usuwaniu dużych plików. Możesz rozważyć użycie bardziej odpowiedniego systemu plików do swoich celów (nowsze systemy plików ext mają całkiem niezłą wydajność usuwania, jeśli nie masz innych szczególnych potrzeb). Sam FUSE również nie jest szczególnie szybki. Możesz rozważyć, czy możesz to zrobić w sposób, który nie korzysta z BEZPIECZNIKA.
źródło
Dlaczego rm jest taki wolny? Nie mam pojęcia. Ale znam szybszy sposób:
Aktualizacja: Ta odpowiedź na Serverfault zawiera kilka wyjaśnień. Wygląda na to, że rsync usuwa pliki w określonej kolejności, która powoduje, że drzewo systemu plików pozostaje zrównoważone i nigdy nie potrzebuje ponownego równoważenia. rm po prostu usunie pliki i spowoduje wiele przywracania równowagi podczas ich usuwania. Istnieją pewne informacje o zrównoważenie tutaj .
źródło
rm -rf
?rsync
nadal maunlink()
wszystkie pliki wtest/
, i to prawdopodobnie zajmuje czas.unlink(2)
w katalogu (i pamiętać, aby zrobić tofsck
później) ...Cóż, kiedyś miałem podobny problem z twoim. Odkryłem, że twoje „wa” jest wysokie, możesz użyć
sprawdzenie, czy zużycie dysku jest wysokie, jeśli tak, oznacza to, że dysk jest dość zajęty. Sprawdź, czy niektóre inne procesy ciągle zapisują na dysk.
Dla uproszczenia użyj
aby sprawdzić, czy b jest wysokie lub r < b . To wskazuje na coś złego. W twojej sytuacji myślę, że dysk IO jest oryginalnym powodem.
źródło