Czy można bezpiecznie zrobić zdjęcie dysku z aktualnie działającym dyskiem?

12

Muszę wykonać kopię zapasową mojego dysku twardego. Chcę użyć ddi umieścić obraz na zewnętrznym dysku twardym.

  • Czy mogę to zrobić za pomocą ddsystemu operacyjnego, który znajduje się na samym dysku twardym, czy muszę uruchomić komputer z innego urządzenia, na przykład LiveCD?
  • Czy ogólnie można bezpiecznie zrobić zdjęcie urządzenia, jeśli jest ono zamontowane i działa?
  • Co się stanie, jeśli urządzenie zostanie zamontowane, ale jestem pewien, że podczas działania nie ma żadnych innych operacji we / wy dd?

Jestem pewien, że rsyncto najlepsze narzędzie do tworzenia kopii zapasowych, szczególnie przyrostowych.

Ale mnie to interesuje dd, ponieważ chcę wykonać kopię zapasową również innych urządzeń pamięci masowej, a także skopiować dane przechowywane na niepodzielonym na partycje miejscu. Na przykład mój czytnik e-booków używa niepodzielonego na partycje miejsca do przechowywania Uboota, jądra i innych danych.

Marco Sulla
źródło
Ważne jest, którego systemu plików używasz, którym jesteś zainteresowany? Niektóre mają określone funkcje do tego zadania.
Rzeczywistość

Odpowiedzi:

11

Ogólnie nie jest to bezpieczne. FS zakłada, że ​​operacje są zapisywane w określonej kolejności, dzięki czemu może zapisywać nowe dane pliku, a następnie tworzyć do niego wskaźnik z innych danych, dokładne szczegóły zależą od systemu plików. Wyobraź sobie, że dzieje się tak:

  1. dd odczytuje z lokalizacji X, która zawiera śmieci lub niektóre dane
  2. System plików zapisuje do lokalizacji X
  3. System plików zapisuje do lokalizacji X + 1 wskaźnik do lokalizacji X
  4. dd odczytuje z lokalizacji X + 1 link do lokalizacji X

Z punktu widzenia kopii zapasowej otrzymujesz śmieciowe dane. Istnieje jednak kilka sposobów obejścia tego:

  • Zamrożenie systemu plików za pomocą polecenia specyficznego dla systemu plików (uważam, że xfs_freezejest jeden i nie znam żadnego innego - ale taka opcja istnieje przynajmniej w teorii)
  • Utwórz migawkę lvm i skopiuj z niej. Kopia będzie działać tak, jakbyś zrestartował komputer (bez zmiany kolejności HDD), więc będzie to brudny system plików, ale kopia będzie niepodzielna. Pamiętaj, że niektóre systemy plików, takie jak XFS, muszą zostać najpierw zamrożone.
  • Użyj rsync jak sugerują inni. Teraz kopia jest bezpieczna i nie potrzebujesz LVM, ale kopia nie jest atomowa. Tak więc, chociaż unika powyższego problemu na poziomie systemu plików, może nadal napotykać problemy z plikami (raczej mało prawdopodobne, ale można sobie wyobrazić brakujące pliki, na przykład, gdy mv jest wykonywany w tle)
  • Używaj systemu plików z migawkami, takich jak btrfs , tux3 , zfs , nilfs ... Następnie unikniesz obu problemów - możesz po prostu utworzyć migawkę i skopiować z niej rsync o pełnej atomowości. Zauważ jednak, że taki system plików często bywa eksperymentalny.

Ostatnia uwaga - ddmoże nie być najlepszym sposobem tworzenia kopii zapasowych. Kopiuje pełny dysk, który często jest marnotrawny, gdy kopiujesz również „śmieci”. Jeśli potrzebujesz obrazów dysku, coś takiego jak partimage może być lepsze. Jeśli nie masz lepszej opcji, użyj albo rsync, tar w trybie różnicowym / przyrostowym itp., Albo pełnego systemu tworzenia kopii zapasowych, takiego jak Bacula , Tarsnap lub jeden z wielu innych. Deduplikacja danych może zdziałać cuda w zakresie rozmiarów kopii zapasowych.

Maciej Piechotka
źródło
1
+1 To jest jedyna odpowiedź, która faktycznie próbuje odpowiedzieć na to pytanie, doskonale zrobiona, by przeczytać pytanie o operację, a nie o to, że dd jest złe.
Rzeczywistość
+1 za dobrą odpowiedź. Ale nie zgadzam się z rantingiem. Dd nie jest zły. Jest to po prostu niewłaściwe, a wyjaśnienie, dlaczego tak jest, jest dobrą rzeczą.
Hennes,
Punkt 4 ma takie same ograniczenia jak punkt 2, prawda? Aplikacja może być w trakcie wydawania zapisów, a migawka nic nie wie o transakcji na poziomie aplikacji.
Ben Voigt
Dziękuję, odpowiada na pytanie. Odpowiedź goldilocks jest również dobra, ale chcę utworzyć kopię zapasową nie tylko mojego dysku twardego, ale także innych urządzeń pamięci masowej i być może musiałem to wcześniej napisać.
Marco Sulla
@BenVoigt - do pewnego stopnia - eliminuje jedną warstwę (system plików), a AFAIK jest „bardziej delikatny”. Nadal w niektórych przypadkach można znaleźć pliki w połowie zapisane, ale jeśli aplikacja ich nie załatwi, mogą zostać uszkodzone również w wielu innych okolicznościach (OOM, awaria itp.), Więc poprawnie napisana aplikacja powinna sobie z tym poradzić.
Maciej Piechotka
7

Zależy to od tego, do czego dokładnie służy partycja i jaki jest cel kopii. Powiem jednak, że ogólnie ddjest nieodpowiednim narzędziem do tworzenia kopii zapasowych systemów plików . Nie do tego też był przeznaczony.

  • Marnuje dużo czasu na kopiowanie pustych sekcji partycji.

  • Może to prowadzić do niespójności, jeśli system plików jest obecnie zamontowany, częściowo dlatego, że jest to jednostka poziomu systemu operacyjnego i może nie być zsynchronizowany z podstawowym urządzeniem blokowym. Dzwonienie syncpoczątkowo nie pomoże w tym, ponieważ proces ten nie jest natychmiastowy.

Użyj cp -alub rsynczamiast. Następnie musisz oczywiście utworzyć docelową partycję, więc nie jest to tak proste, ale jest o wiele bezpieczniejsze i bardziej elastyczne. Jeśli chcesz utworzyć obraz systemu plików , patrz poniżej.

Jeśli zamierzasz skopiować główny system plików, absolutnie nie używaj dd. Musisz użyć czegoś takiego rsync -ax(lub cp -axw poszczególnych katalogach najwyższego poziomu), ponieważ istnieje wiele rzeczy, które NIE mogą znajdować się w kopii . W systemie Linux obejmuje to:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Niektóre z nich są w rzeczywistości interfejsami jądra, a nie prawdziwymi katalogami na dysku. Jeśli je skopiujesz, skopiujesz kilka informacji, które nie będą miały zastosowania w kopii; jeśli spróbujesz uruchomić system z nim, będzie to tylko marnowanie miejsca, ponieważ prawdziwy interfejs zostanie zamontowany na górze. Inne zawierają tymczasowe informacje używane podczas uruchamiania procesów, które stanowią większy problem, ponieważ system nie będzie w stanie uporządkować śmieci, jeśli je skopiujesz.

Jeśli chcesz utworzyć plik obrazu głównego systemu plików (lub dowolnego systemu plików), utwórz pusty plik obrazu - jest to odpowiednie zastosowanie dla dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

To obraz o wielkości 1024 MB (1000000 * 1024). Dostosuj, countjeśli chcesz inny rozmiar. Utwórz np. extSystem plików w pliku :

mke2fs whatever.img

Ostrzeże Cię, że to nie jest prawdziwe urządzenie blokowe. Kontynuować. Teraz zamontuj plik obrazu:

mount whatever.img /mnt/img

/mnt/imgmusi istnieć, ale może wszystko. Możesz teraz rsync(lub cp -a) do /mnt/img. Zawartość pozostanie w środku whatever.imgpo jej odmontowaniu.

Jednak...

Żeby było jasne, używaj opisanej metody obrazu systemu plików, tylko jeśli potrzebujesz pliku obrazu z jakiegokolwiek powodu. Jeśli Twoim celem jest skopiowanie partycji na inny dysk twardy, nie potrzebujesz obrazu : utwórz nową partycję z pustym systemem plików na tym dysku, zamontuj ją i skopiuj na nią. Zamiast tego możesz po prostu umieścić zawartość systemu plików w pustym katalogu i zarchiwizować go:

tar -czf myarchive.tar.gz [the directory path]

Następnie możesz wdrożyć to na istniejącej (pustej lub innej) partycji, umieszczając ją na najwyższym poziomie i używając:

tar -xzf myarchive.tar.gz

Uważaj, aby zastąpić istniejące pliki, jeśli ich ścieżki pasują do czegoś w archiwum. W przeciwnym razie istniejąca hierarchia katalogów pozostanie taka sama.

Złotowłosa
źródło
Zapisywanie +1 w pustym pliku obrazu jest bardzo sprytne, ale jakie to ma zalety w porównaniu z zapisywaniem w archiwum .tar lub .tgz?
Creek
@Creek Nie ma żadnych zalet, z wyjątkiem obrazu, który można zamontować. Dodałem, że w przypadku, gdy celem PO jest stworzenie obrazu, który można wykorzystać na surowo. W przeciwnym razie lepiej jest użyć archiwum, ponieważ archiwum nie ma ustalonego rozmiaru. Dodam do tego wyraźniejsze zastrzeżenie.
goldilocks
Gotcha, nie sądziłem. Nadal fajna metoda przechowywania plików.
Creek
2
@mpy Zarówno coreutils, jak cpi rsync GNU mają opcję -xuniknięcia rekurencji w innych systemach plików. Odpowiedź Macieja najlepiej wyjaśnia, dlaczego ddjest tutaj absolutnie nieodpowiednia (prawie na pewno da się kopię bezużyteczną, chyba że podejmie się środki ostrożności wymienione przez Marka , z powodu zapisów, które inaczej miałyby miejsce podczas kopiowania).
Gilles 'SO - przestań być zły'
2
ddnie kopiuje rzeczy, które nie są prawdziwymi katalogami na dysku, więc nie jestem pewien, skąd bierze się twój pierwszy punkt. Np. Podłączone urządzenia /mnt, węzły /procitp. Nie byłyby częścią danych, które są ddpobierane, ponieważ nie ma ich na dysku. W przypadku odmontowanych systemów plików ddjest całkowicie poprawny; otrzymujesz dokładny duplikat. Jedynym powodem, dla którego jest nieodpowiedni dla zamontowanych systemów plików, jest to, że dane w systemie mogą ulec zmianie / zostać częściowo zapisane w długim okresie czasu dd.
Jason C
1

rsync jest narzędziem z wyboru do tworzenia kopii zapasowych systemu plików i może tworzyć rozruchową kopię zapasową bieżącego działającego systemu operacyjnego.

Niektóre zastrzeżenia:

  • musisz dodać odpowiednie opcje zupy alfabetycznej
  • ścieżki są raczej krytyczne
  • wymagana jest lista wykluczeń, która będzie inna dla każdego systemu operacyjnego i być może dla każdej konfiguracji

Niektóre zalety rsync w porównaniu z innymi metodami, takimi jak tar:

  • możesz zatrzymać i rozpocząć tworzenie kopii zapasowej w dowolnym momencie
  • wiele opcji obsługi zastąpionych plików, takich jak usuwanie na żądanie, usuwanie przed, przeniesienie .....
  • wznawiane (lub powtarzane) kopie zapasowe są znacznie szybsze niż inne metody, ponieważ wcześniej skopiowane pliki są pomijane. (20-krotny wzrost prędkości jest powszechny)
  • opcja --link-dest może tworzyć wersjonowane kopie zapasowe, jednocześnie kopiując tylko nowe pliki

Kopie zapasowe obrazów mają swoje miejsce, ale kopiują dysk dokładnie tak, jak są, w tym wszelkie problemy, które możesz mieć. Kopia zapasowa pliku tworzy nowy katalog i powoduje efekt liniowy (defragmentacja) dysku w tym procesie. Jeśli chcesz zrobić 10 identycznych kopii twojego obecnego systemu operacyjnego, użyłbym rsync dla wzorca kopii, a następnie dd (lub podobny) dla reszty.

Paweł
źródło
1

Zależy to od tego, co rozumiesz przez „bieżący system operacyjny”. Jeśli po prostu chcesz uniknąć korzystania z dysku rozruchowego i nie przejmujesz się zakłóceniami usług działających na komputerze, możliwe jest:

  1. Zamknij wszystkie nieistotne programy (w zasadzie wszystko oprócz powłoki roota, w której pracujesz - nie próbuj tego z poziomu X terminala, użyj prawdziwej powłoki konsoli). Tryb pojedynczego użytkownika może w tym pomóc.
  2. Jeśli masz zamontowane dyski inne niż root systemu, odmontuj je. Nie odmontowuj wirtualnych systemów plików, takich jak / proc, / sys lub / dev.
  3. Opróżnij buforowane dane na pozostałym dysku: sync
  4. Ponownie zamontować główny system plików tylko do odczytu: mount -o ro /.
  5. Zamontuj zewnętrzny dysk twardy (prawdopodobnie pojawi się ostrzeżenie o niemożności zapisu /etc/mtab; zignoruj ​​go).
  6. Wykonaj kopię zapasową.
  7. Odmontuj zewnętrzny dysk twardy.
  8. Restart. Zrobiłeś bałagan w swoim systemie, a ponowne uruchomienie jest najszybszym sposobem, aby przywrócić go do normy.

Używam tej metody do stworzenia archiwum komputera, z którego właśnie zaktualizowałem i nie oczekuję, że użyję dużo więcej. Nie jest to bardzo dobra metoda dla aktywnego systemu: jest powolna (zajmuje godziny lub dni), kopie zapasowe są ogromne (więc nie można przechowywać więcej niż kilku), a korzystanie z kopii zapasowej systemu jest niezwykle uciążliwe w górę. Do codziennych kopii zapasowych polecam coś, co działa na poziomie systemu plików, np rsnapshot.

znak
źródło
Należy pamiętać, że krok 4 może być niebezpieczny w niektórych systemach plików, ponieważ zapisują nawet w trybie tylko do odczytu. Również na bardziej nowoczesnych systemów (Linux 3.something wierzę) można po prostu połączyć /etc/mtabsię /proc/self/mount- co będzie działać, nawet gdy masz takie rzeczy jak środowisku chroot fs lub nazw.
Maciej Piechotka
1
@MaciejPiechotka Nie znam żadnego systemu plików, który pisze, gdy jest zamontowany w trybie tylko do odczytu i uważam to za bardzo dziwne. Niektóre systemy plików piszą po zamontowaniu w trybie tylko do odczytu, jeśli system plików nie był wcześniej całkowicie odmontowany, więc krok mount -o remount,ro /może pisać. Ale kiedy to polecenie powróci, w jakiej sytuacji nastąpiłyby kolejne zapisy?
Gilles „SO- przestań być zły”
„Nieistotne programy”, które należy zamknąć, będą musiały krytycznie obejmować podsystem rejestrowania, czego nie uważam za nieistotne.
Gilles 'SO - przestań być zły'
@Gilles, do celów utworzenia obrazu dysku rozruchowego, każdy program, który nie jest bezpośrednio zaangażowany w tworzenie obrazu, nie jest konieczny.
Mark
Warto wspomnieć, że tryb pojedynczego użytkownika może tutaj pomóc.
Rzeczywistość
1

Poważnie używaj Clonezilli . To najlepsze narzędzie typu Norton Ghost oparte na systemie Linux. Wykona zarówno klonowanie partycji, jak i pełne dyski, albo z dysku na dysk lub z dysku na system plików (zapisz jako plik). Obsługuje większość systemów plików Linux, NTFS, FAT32 i więcej. Może zapisywać na dysku wewnętrznym, dysku zewnętrznym, a nawet przez sieć na udziałach SMB lub NFS.

Jest bardzo łatwy w użyciu i pozwoli Ci zaoszczędzić dużo czasu.

Edycja: aby odpowiedzieć na pytanie, nie, nie można ddwiększości systemów plików, gdy są one zamontowane, ponieważ istnieje ryzyko, że skończy się to niespójną kopią systemu plików, ponieważ odczyt z urządzenia blokowego nie jest atomowy. Na przykład, jeśli kopiujesz 100 bloków, system mógł zaktualizować pierwszy blok i ostatni blok, gdy byłeś tylko w połowie, co oznacza, że ​​twoja kopia będzie zawierać zmodyfikowany ostatni blok, ale nie pierwszy.

sleblanc
źródło
+1: nie odpowiada na pytanie, ale wydaje się być dobrą sugestią dla kopii zapasowej dysku twardego.
Marco Sulla,