Co sprawia, że ​​jedna strona programu rsync jest tak zajęta?

11

Mam maszynę Debian w mojej sieci LAN, która służy jako serwer zapasowy dla innych. Ma cztery dyski twarde połączone w programowe urządzenie RAID 5 md, na tym LVM i na tym btrfs. Kopie zapasowe są tworzone przy użyciu rsync, a dla dużego systemu plików zajmuje to ponad godzinę. Przez długi czas myślałem, że niewiele mogę z tym zrobić.

Ostatnio jednak zauważyłem, że aktywność HDD była bardzo różna na obu końcach transferu. Podczas gdy strona wysyłająca, działająca w Gentoo i korzystająca głównie z ext4, nie miała prawie żadnego We / Wy dysku, strona odbierająca była ciągle zajęta. Ponieważ większość danych nie zmienia się między transferami, uważam, że odczyty metadanych powinny stanowić większość danych. Ale byłbym naprawdę zaskoczony, jeśli czytanie i-węzłów w btrfs jest tak dużo pracy niż robienie tego samego w ext4.

iotop potwierdzone odczyty dysku wynoszące około 1-4 MB / s po stronie odbierającej, podczas gdy strona wysyłająca miała tylko sporadyczne impulsy 0,5 MB / s.

Moje pytanie brzmi: czy ktoś może wyjaśnić, co się tutaj dzieje? Najlepiej z pewnym wskazaniem, jak obejść problem, jeśli to możliwe.

Być może jest jakaś flaga strojenia btrfs, której mogłabym użyć, lub coś podobnego. Potrzebuję FS z funkcją migawek na serwerze backupu, a moja próba użycia FreeBSD i ZFS szybko prowadzi do niespójności FS, więc obecnie nie widzę alternatywy dla btrfs. Dlatego odpowiedzi mówiące o używaniu ext4 lub zfs mogą otrzymać pozytywne głosy, ale nie będą zaznaczone.


Opcje Rsync w użyciu, zgodnie z żądaniem cjm :

--rsync-path='rsync --fake-super'
--archive               # -rlptgoD
--hard-links            # detect and preserve these
--acls
--xattrs
--sparse
--noatime               # based on patch from samba #7249c1
--delete
--delete-delay
--fuzzy
--human-readable        # size suffixes, base 1000
--stats

Jak również kilka -freguł, aby pominąć niektóre pliki.


Opcje montowania btrfs są zgłaszane przez mountas

rw,nosuid,noexec,noatime,nospace_cache

W szczególności obejmuje to noatimeflagę, więc nie powinno być żadnych zapisów, chyba że faktycznie były różnice w niektórych plikach. Dodałem te informacje w odpowiedzi na odpowiedź przez Kyle Jones .

MvG
źródło
Jakich opcji rsync używasz?
cjm
Po prostu strzelasz w ciemności, czy masz uszkodzony dysk? Może to spowodować dodatkowe operacje we / wy, ponieważ próbuje odtworzyć brakujące dane z informacji o parzystości.
bahamat
@bahamat, mam smartd uruchomiony i nie zgłosił żadnych problemów. Mdadm również nie zgłosił żadnych zdarzeń.
MvG
Naprawdę trudno powiedzieć na pewno, co jest nie tak. Tylko jeden przykład to niedopasowane rozmiary bloków między warstwami. Aby go zdiagnozować, najlepiej jest użyć czegoś takiego dtracelub systemtapdowiedzieć się, gdzie spędza się czas.
bahamat
@ bahamat, to droga, której jeszcze nie zbadałem. Czy potrafisz napisać odpowiedź na temat używania tych narzędzi do diagnozowania problemu? Byłoby świetnie. Instrukcje krok po kroku, jeśli masz czas, ale nawet niektóre przybliżone pomysły i wskazówki dotyczące dokumentacji byłyby bardzo pomocne.
MvG

Odpowiedzi:

3

Jedną z możliwych odpowiedzi jest to, że zdalny system plików jest domyślnie montowany z opcją „atime”. Czas dostępu zapisuje wszystko, do czego zdalny dostęp rsync w połączeniu z karą zapisu, jaką cierpisz z powodu RAID 5 (parzystość obliczeniowa oznacza odczyt wszystkich dysków RAID przed zapisaniem na jednym z nich) może wyjaśnić powiększenie wejścia / wyjścia po drugiej stronie.

Jeśli mam rację, możesz przyspieszyć, instalując zdalny system plików za pomocą opcji „noatime”.

Kyle Jones
źródło
2
Dobra myśl, ale niestety nie rozwiązanie: system plików jest już zamontowany noatime. Montowanie zgłasza zestaw wszystkich opcji montowania jako rw,nosuid,noexec,noatime,nospace_cache.
MvG,
1

Podejrzewam, że --fake-super opcje. Oznacza to, że rsync przechowuje wszystkie informacje o metadanych w rozszerzonych atrybutach każdego pliku. Podejrzewam, że dostęp do tych atrybutów jest powolny. Spróbuj uruchomić program rsync z rootem bez --fake-super. Nie można ponownie użyć tej samej kopii zapasowej, ponieważ atrybuty się nie zgadzają.

Wayne
źródło
Powinieneś rozważyć poszerzenie swojej odpowiedzi o kilka przydatnych linków lub odniesień do dokumentacji potwierdzającej twoje twierdzenie.
HalosGhost