Czy bezpiecznie jest korzystać z dysku twardego podczas działania rsync?

27

Planuję wykonać kopię zapasową moich dużych dysków twardych rsynci przewiduję, że zajmie to kilka dni. Czy bezpiecznie jest używać oryginalnego dysku twardego (dodawanie plików) podczas rsyncpracy? Czy lepiej pozostawić HDD nietknięte, dopóki nie rsynczostanie zakończone?

Googlebot
źródło
1
Pamiętaj, że „używanie” może być tak proste, jak otwarcie przeglądarki, która nic nie robi. Przeglądarki zwykle piszą wiele losowych rzeczy w swoich katalogach danych. W najgorszym przypadku otrzymujesz niespójną kopię zapasową, tj. Podczas przywracania przywracanie kart może być niemożliwe, zakładki mogą zniknąć (ponieważ baza danych jest uszkodzona) lub coś w tej kolejności.
Jonas Schäfer
Jeśli masz tyle danych do utworzenia kopii zapasowej, możesz rozważyć podzielenie kopii zapasowej na mniejsze części (poddrzewa). Następnie tylko część, która jest aktualnie uruchomiona, musi być utrzymywana tak statycznie, jak to możliwe - i możesz zobaczyć, która to część, śledząc postęp skryptu (z dziennikiem itp.). Ponieważ nie jest to jedna duża kopia zapasowa, niektóre elementy mogą być trochę niezsynchronizowane z innymi, ale jeśli używasz jednej dużej kopii zapasowej w systemie na żywo, tak się stanie.
Joe

Odpowiedzi:

34

Jak już zauważyli inni, można bezpiecznie czytać z dysku źródłowego lub używać dysku docelowego poza katalogiem docelowym, gdy rsync jest uruchomiony. Można również bezpiecznie czytać w katalogu docelowym, zwłaszcza jeśli katalog docelowy jest zapełniany wyłącznie przez uruchomienie rsync.

To, co na ogół nie jest bezpieczne, to pisać w katalogu źródłowym podczas działania rsync. „Zapisuje” to wszystko, co modyfikuje zawartość katalogu źródłowego lub dowolnego jego podkatalogu, a więc obejmuje aktualizacje plików, usuwanie, tworzenie itp.

W przeciwnym razie nie będzie faktycznie złamać niczego, ale zmiana może lub nie może faktycznie odebrano przez rsync do kopiowania do lokalizacji docelowej. Zależy to od rodzaju zmiany, od tego, czy rsync przeskanował już ten konkretny katalog i czy rsync skopiował już dany plik lub katalog.

Istnieje jednak prosty sposób: Po zakończeniu uruchom ponownie program rsync z tymi samymi parametrami. (Chyba że masz jakiś funky parametr usuwania; jeśli tak, to zachowaj ostrożność.) Spowoduje to ponowne przeskanowanie źródła i przeniesienie wszelkich różnic, które nie zostały wykryte podczas pierwszego uruchomienia.

Drugi przebieg powinien przenosić tylko różnice, które wystąpiły podczas poprzedniego uruchomienia rsync, i jako taki zakończy się znacznie szybciej. W ten sposób możesz swobodnie korzystać z komputera podczas pierwszego uruchomienia, ale powinieneś unikać jak największej liczby zmian w źródle podczas drugiego uruchomienia. Jeśli możesz, zdecydowanie rozważ ponowne zamontowanie źródłowego systemu plików tylko do odczytu przed rozpoczęciem drugiego uruchomienia rsync. (Coś jak mount -o ro,remount /media/sourcepowinno zrobić.)

CVn
źródło
7
Można nawet zrobić trzeci bieg po drugim biegu: może to zająć jeszcze mniej czasu ... ;-)
gerlos
5
@gerlos Wydaje się, że pojawia się wzór. Brzmi prawie tak, jakby można było po prostu uruchamiać komendę rsync pod koniec każdej sesji użycia, aw ciągu kilku dni byłoby to zrobione w mgnieniu oka.
Monty Harder
5
@gerlos Jeśli ponownie zainstalujesz tylko do odczytu przed uruchomieniem rsync po raz drugi, nie będzie to konieczne, a tworzenie kopii zapasowej będzie prawie gwarantowane, że będzie spójne, przy jednoczesnym zminimalizowaniu czasu, w którym nie można zapisać w źródłowym systemie plików.
CVn
1
@gerlos Na marginesie, dlatego mam wpis podobny @reboot root find / -print &>/dev/nulldo mojego crontab systemu, aby zapełnić pamięć podręczną. (Rzeczywisty wpis jest bardziej skomplikowany z uwagi na kilka specjalnych przypadków w moim konkretnym systemie.) Zużywa trochę pamięci RAM i trochę czasu na ścianie wcześnie po uruchomieniu, aby poprawić skanowanie drzewa katalogów całkiem sporo IME.
CVn
1
@ MichaelKjörling: ciekawy pomysł na buforowanie hierarchii. Ale może zamiast tego powinieneś uruchomić updatedb(budowanie bazy danych lokalizacji) lub slocate -u(tak samo, jeśli masz slocate)? W ten sposób nadal buforujesz hierarchię, ale także budujesz bazy danych lokalizowania lub slocacji, pozwalając na użycie tych poleceń do szybkiego znalezienia wielu plików?
Olivier Dulac
22

Zależy to od używanego systemu tworzenia kopii zapasowych, ale ogólnie źle jest modyfikować zawartość urządzenia podczas tworzenia kopii zapasowej. Możesz jednak przeczytać jego zawartość; to bezpieczna operacja, nawet jeśli spowolni proces.

W twoim przypadku rsyncutworzy listę plików, a następnie rozpocznie tworzenie kopii zapasowej. Dlatego żaden plik dodany do źródłowego dysku twardego po rozpoczęciu tworzenia kopii zapasowej nie zostanie skopiowany.

To, co robię, to wcale nie używać urządzenia podczas tworzenia kopii zapasowej. Jest to bezpieczniejszy sposób na szybkie i spójne tworzenie kopii zapasowych.

dr01
źródło
14
Zwykle pozwalam mu się uruchomić, a następnie wykonuję drugie uruchomienie, rsyncktóre zakończy się za kilka sekund, ponieważ zostaną skopiowane tylko pliki, które zmieniłem podczas uruchamiania. Wszystko będzie w pamięci podręcznej, więc o wiele łatwiej jest powstrzymać się od modyfikacji w tym okresie.
Martin Ueding
15

Odczytywanie danych z obszarów źródłowych podczas rsyncpracy jest bezpieczne, ale jeśli coś zaktualizujesz, kopia, która rsynctworzy / aktualizuje, może być niespójna:

  1. Jeśli zaktualizujesz plik, który rsync już przeskanował, nie zobaczy aktualizacji, dopóki nie zostanie uruchomiony w przyszłości. Jeśli zaktualizujesz plik, który nie został jeszcze przeskanowany, zmiana zostanie uwzględniona w miejscu docelowym. Jeśli zaktualizujesz pliki, które zostały przeskanowane i nie zostały przeskanowane, w miejscu docelowym pojawi się mieszanka starych i nowych wersji.

  2. Jeśli dodasz plik do katalogu, który został już przeskanowany, tym razem zostanie on pominięty w kopii docelowej. Jeśli usuniesz plik z katalogu, który został już przeskanowany, tym razem pozostanie on w kopii docelowej. W zależności od sposobu wywołania rsynccałe drzewo może być skanowane na początku lub może być skanowane przyrostowo wraz z procesem synchronizacji.

  3. W niektórych okolicznościach rsynczobaczysz niekonsekwencję i ostrzeże Cię. Jeśli usuniesz plik lub podkatalog z katalogu, który został już zeskanowany, ale jego zawartość nie została zeskanowana, pojawi się komunikat o błędzie dotyczący braku obiektu. W podobnych okolicznościach może czasami (jeśli zmienił się rozmiar i / lub znacznik czasu) również ostrzec o zmianie plików podczas skanowania.

W przypadku niektórych kopii zapasowych ta niespójność może nie być poważnym problemem, ale w większości przypadków tak, dlatego zaleca się, aby nie próbować synchronizować aktywnie zmieniającego się źródła.

Jeśli używasz LVM do porcjowania systemu pamięci, możesz użyć tymczasowej migawki, aby wykonać kopię zapasową w określonym momencie. Wymaga to wystarczającej ilości miejsca w grupie woluminów, aby utworzyć wolumin migawki wystarczająco duży, aby pomieścić wszystkie zmiany, które zostaną wprowadzone w czasie, gdy migawka jest potrzebna. Sprawdź dokumentację LVM (lub jeden z wielu przykładów online: wyszukaj „Kopia zapasowa migawki LVM” lub podobny), aby uzyskać więcej informacji.

Nawet bez LVM niektóre systemy plików same obsługują migawki - więc możesz również zajrzeć do tej opcji.

Jeśli chcesz wykonać kopię zapasową dużych aktywnych woluminów bez długiego przestoju i nie możesz użyć migawek, może być wystarczające uruchomienie skanowania „na żywo” do zakończenia, a następnie zatrzymanie dostępu do woluminu i uruchomienie innego procesu rsync, który może zająć znacznie mniej czasu (jeśli bardzo niewiele się zmieniło, po prostu skanuje drzewo katalogów, a następnie kilka zaktualizowanych plików). W ten sposób czas, w którym należy unikać zmian, może być znacznie krótszy.

David Spillett
źródło
Najbardziej podoba mi się twoja odpowiedź, ponieważ szczegółowo opisujesz, co się stanie, jeśli pliki zostaną zmodyfikowane. Podajesz nie tylko alternatywę, ale także rozwiązujesz niespójności, które może to powodować (brak aktualizacji, ostrzeżenie o brakującym pliku itp.). W mojej sytuacji użycie rsync do utworzenia długiej kopii zapasowej, a następnie odświeżenie jej kilka dni później, nie jest niczym wielkim, i to brzmi jak sytuacja OP. Nie brzmi to tak, jakby po raz pierwszy wymagał tworzenia kopii zapasowej na poziomie przedsiębiorstwa, ale po prostu chce korzystać z komputera w międzyczasie. Mówię po prostu uruchom rsync po raz drugi, aby złapać zaktualizowane pliki.
ibennetch
11
  • Źródłowy dysk twardy może czytać wszystko podczas rsync.

  • Źródłowy dysk twardy może zapisywać dowolne treści niezwiązane z treścią rsync.

  • Docelowy dysk twardy może czytać wszystko podczas rsync.

  • Docelowy dysk twardy może zapisywać wszystko podczas rsync z warunkiem, że ma wystarczającą ilość miejsca zarezerwowanego dla zsynchronizowanej zawartości.

Oczywiście w każdym przypadku nastąpi zmniejszenie wydajności.

Overmind
źródło
0

Wszystkie obecne odpowiedzi mówią o bezpieczeństwie danych w kategoriach spójności i zakładania idealnego sprzętu.

Inną rzeczą do rozważenia jest samo bezpieczeństwo sprzętu. Jeśli masz non-backed-up dysków twardych, które mogą być na granicy braku (może nawet nie wiedzą jeszcze) i robisz wstępną kompleksową kopii zapasowej nie używaj go. Nawet nie montuj go, jeśli dane są krytyczne. Możesz użyć narzędzia takiego jak ddklonowanie dysku jako urządzenia blokowego. Czego nie chcesz, aby głowa szukała dysku i mogła pisać podczas próby wykonania kopii zapasowej. Plus ddpowinien być szybszy dla początkowej kopii zapasowej, ponieważ po prostu kopiuje bity w kolejności (jeśli dysk nie jest w większości pełny, przypuszczam, że rsync również wygrałby w pierwszym przypadku).

W przypadku kolejnych przyrostowych kopii zapasowych rsync to świetny wybór i zgadzam się z pozostałymi odpowiedziami w 100%.

Zak
źródło
1
Jeśli media są marginalne, a nawet potencjalnie marginalne, ddnie jest najlepszym wyborem. Użyj ddrescuezamiast; znacznie lepiej radzi sobie z częściowymi awariami. Ale nie było to uwzględnione w pierwotnym pytaniu.
CVn
@ MichaelKjörling To dobra uwaga.
Zak