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 -f
reguł, aby pominąć niektóre pliki.
Opcje montowania btrfs są zgłaszane przez mount
as
rw,nosuid,noexec,noatime,nospace_cache
W szczególności obejmuje to noatime
flagę, 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 .
dtrace
lubsystemtap
dowiedzieć się, gdzie spędza się czas.Odpowiedzi:
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”.
źródło
rw,nosuid,noexec,noatime,nospace_cache
.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ą.
źródło
--xattrs
/-X
był bardzo wolny przed zatwierdzeniem wysyłania (wciąż nie w wersji), które zostało wybrane do rsync 3.1.2-2 Debiana:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799143#20
https://bugzilla.samba.org/show_bug.cgi?id=5324
źródło