Czy używanie rsync podczas aktualizacji źródła jest bezpieczne?


19

Czy korzystanie z niego jest bezpieczne, rsyncgdy źródłowy system plików jest zamontowany i zapisywalny, przy założeniu, że można go zmodyfikować podczas działania rsync? Zakładam, że w warunkach wyścigowych mogę nie otrzymywać najnowszych modyfikacji, ale czy istnieje ryzyko korupcji?


1
Czy niepokoi Cię spójność (między plikami, takimi jak plik danych i niektóre powiązane pliki metadanych, dziennik lub inne) lub uszkodzenie (w jednym pliku) w przypadku zmian?
CVn

Dobrze, że nie brałem pod uwagę spójności między plikami. Nie sądzę, że rsyncnaprawdę mogę coś z tym zrobić, tylko migawka może, ale bardziej martwię się o uszkodzenie w pliku.
brianmearns

Odpowiedzi:


20

Używanie rsyncjest dość bezpieczne w systemach plików montowanych do odczytu i zapisu. Po rsyncuruchomieniu tworzy listę plików, a następnie zaczyna kopiować te pliki. Ta lista plików nie jest aktualizowana podczas uruchamiania. Rzeczywiste dane są następnie kopiowane.

Oznacza to, że gdy plik zmieni się po rsync zbudowaniu listy plików, skopiuje nową zawartość. Jednak po dodaniu nowego pliku po rsyncutworzeniu listy plików ten nowy plik nie jest kopiowany. Jeśli plik zostanie usunięty po rsynczbudowaniu listy plików, rsync ostrzeże, że nie może skopiować tego pliku. Należy pamiętać, że rsyncnie jest to migawka, oznacza to, że trudno jest powiedzieć, w którym momencie rsyncskopiowano dane.

Z drugiej strony migawki systemu plików lub menedżera woluminów (np. Przy użyciu ZFS lub LVM) są tworzone natychmiast i stanowią spójną migawkę systemu plików w ściśle określonym momencie, który można następnie skopiować na inny host. rsyncnie oferuje tego rodzaju spójności.

EDYCJA: Jak zauważyli inni w komentarzach, istnieje szansa, rsyncże plik może zostać uszkodzony. Gdy rsync zaczyna odczytywać plik, a aplikacja zapisuje ten plik w tym samym czasie, może dojść do uszkodzenia pliku.


2
Dodano notatkę o usuniętych plikach. Prawdopodobnie dałbym to jeszcze raz, gdybym mógł, dla migawki menedżera woluminów + sugestii rsync. Jedyne, co wydaje mi się, że brakuje tej odpowiedzi, to zachowanie rsync, gdy pliki w źródle zmieniają się w trakcie kopiowania. Wątpię jednak, żeby dobrze sobie z tym radził.
CVn

Zgoda. Jeśli chcesz, aby niektóre pliki były spójne, potrzebujesz obsługi systemu operacyjnego?
Thorbjørn Ravn Andersen

1
Ta odpowiedź ma zastosowanie, pod warunkiem, że aplikacja po stronie źródłowej najpierw zapisuje plik tymczasowy, a następnie przenosi go na miejsce. Jeśli aplikacja otworzy istniejący plik do zapisu, podczas gdy rsync odczytuje ten plik, rsync może skopiować uszkodzoną mieszankę starej i nowej wersji.
Gilles „SO- przestań być zły”

@Gilles Dzięki za zwrócenie na to uwagi. Zaktualizowałem swoją odpowiedź. Czy jest to związane z rsync, czy też dzieje się tak w przypadku dowolnej aplikacji, która czyta, gdy inna aplikacja zapisuje w tym samym pliku?
Marco

1
@Marco To by się stało z każdą aplikacją, chyba że obie używają jakiegoś protokołu blokowania (unix nie ma blokad obowiązkowych, tylko blokady doradcze, tj. Blokady, które działają tylko wtedy, gdy wszyscy ich używają). Dlatego normalnym protokołem do modyfikowania pliku, jeśli istotna jest modyfikacja równoległa, jest zapisanie pliku tymczasowego, a następnie przeniesienie go na miejsce.
Gilles „SO- przestań być zły”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.