Jak najlepiej sklonować działający system na nowy dysk twardy za pomocą rsync?

22

Mam system działający jako serwer z uszkodzonym dyskiem twardym. Chociaż wszystkie ważne dane znajdują się w macierzy RAID i są tworzone kopie zapasowe, i tak dalej, nie mam obrazu samego systemu. Nie ma konkretnej potrzeby, ponieważ mogę oczywiście zainstalować, ale nadal chcę najpierw wykonać kopię zapasową, zanim przejdę ścieżką przywracania. Wiem, że istnieją pewne wady tego procesu, ale wydaje mi się, że nie ma wiele wad próbowania go jako pierwszego rozwiązania.

  • System operacyjny: Ubuntu 12.04.4 LTS
  • Bezgłowy
  • Nie mam nadziei, że zainstaluję zbyt dużo nowego oprogramowania, ponieważ dysk już się nie udaje :)
  • System działa. Boję się, że zatrzymanie go zwiększy szansę, że dysk nie wróci. Oznacza to, że dd może być niedostępny?
  • Nowy dysk nie ma tego samego rozmiaru (jest dwa razy większy) niż stary, co dodatkowo komplikuje problem dd.

Moim pomysłem było

  • hotplug nowego dysku w systemie
  • stworzyć system plików
  • zamontuj go w / mnt / somedir
  • zsynchronizuj pliki
  • trochę magii fstab
  • trochę magii rozruchowej

Wciąż mam pytania:

Jakie byłoby dobre polecenie rsync? Planowałem na:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Pomijam trochę więcej katalogów, np. Moich konnych raidów itp.)

Gdzie są opcje:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Pomijam -H, -v i --progress, aby przyspieszyć proces.
Czy to zadziała w Ubuntu? Nie jestem pewien, czy Ubuntu używa linków twardych, ale nie sądzę, że potrzebuję takiej opcji, prawda?

Po tym uruchomieniu mogę zrestartować komputer (może z napędem USB na żywo) i ponownie uruchomić program rsync, jeśli stary dysk nadal się uruchamia. To naprawiłoby nieczytelne / zmienione pliki, ponieważ system działał, jak sądzę.


Jak naprawić bootowanie?
W takim razie moim planem byłaby zmiana UUID/ w moim fstab (wciąż muszę google jak znaleźć ) i wykonać trochę magii, aby system faktycznie uruchomił się z nowego dysku

Zapomniałem czegoś lub zaplanowałem coś szczególnie głupiego?

Nanne
źródło

Odpowiedzi:

16

Możesz pobrać UUID dla wszystkich urządzeń blokowych za pomocą blkid polecenia. (Chcesz tego, który mówi tylko UUID, a nie PARTUUID)

Opcje rsync, których używam to -avhPHAXx.

Nie sądzę, aby -v lub --progress przyspieszy cokolwiek, chyba że używasz bardzo wolnej konsoli / tty.

Użycie -x eliminuje potrzebę wszystkich twoich wykluczeń, zakładając, że wszystkie znajdują się w różnych systemach plików (w moim systemie wszystkie oprócz utraconych + znalezionych).

Jedynym często używanym programem, który znam, który używa twardych linków (przynajmniej w moim systemie) jest git, dlatego dodałem opcję -H. Jedyny problem, który, jak sądzę, nie miałbyś przy użyciu -H, polega na tym, że zajmie to trochę więcej miejsca.

Jeśli chodzi o bootloader, jeśli używasz GRUB2 z MBR, wtedy używam polecenia grub-install /dev/sda(zamień sda na właściwy dysk). To powinno sprawić, że nowy dysk będzie bootowalny. Jeśli używasz innego programu ładującego lub interfejsu UEFI, sprawdziłbym w Google, jak poprawnie uruchomić nowy dysk. Pamiętaj tylko, że / boot na nowym dysku będzie musiał znajdować się na tej samej partycji, co obecnie (zakładając, że nie używasz również identyfikatora UUID dla / boot), w przeciwnym razie będziesz musiał odpowiednio zmodyfikować fstab.

bparker
źródło
Obawiam się, że nie mam ich na osobnych systemach, więc wykluczenie wydaje się rozsądne. Czytam mieszane rzeczy o prędkości - v, więc nie jestem pewien, co tam robić;). Git jest dobrym punktem, jestem pewien, że w domu jest trochę tego!
Nanne
1
Cóż, / proc, / sys i najprawdopodobniej / dev są zdecydowanie różnymi systemami plików / punktami montowania od /, więc nie ma absolutnie żadnego powodu, aby wykluczać je, gdy masz -x. Jeśli nie masz pewności, co jest częścią głównego systemu plików, czy nie, po prostu uruchom, mountaby sprawdzić. Wszystko, co tam jest, nie będzie musiało być wykluczone ręcznie.
bparker
Nie jestem pewien, jak i dlaczego, ale i tak wykluczenia były błędne. W rzeczywistości były na suchym biegu, nie wiem, dlaczego. (cóż, skopiowałem format z pół losowego miejsca, więc to może być powód?). W każdym razie, z opcją -x zgodnie z twoją radą, nie martwiłem się zbytnio, jedyną dodatkową rzeczą było to, że niektóre nieistotne rzeczy (na przykład stare kopie zapasowe) zostały również „zapisane”.
Nanne
To zaoszczędziło mi $$. Sklonowałem system 12GB + na Linode do zupełnie nowego węzła. Po ponad 5 latach to nadal działa. Dzięki chłopaki!
geeth
Dlatego podczas partycjonowania sklonowanego systemu plików gotowego do zaakceptowania klonów, czy moja partycja główna powinna mieć ustawioną flagę rozruchową, podczas gdy ja utrzymuję je w stanie zsynchronizowanym, czy też ustawiam ją tuż przed uruchomieniem sklonowanego dysku do produkcji. W przeciwnym razie zakładam, że sklonowany dysk można następnie uruchomić, co nie jest tak naprawdę potrzebne. W mojej sytuacji mój klonowany dysk jest dyskiem na oddzielnym serwerze. A Rsync służy do dostosowania go do prod.
NZ Dev
11

Właśnie to zrobiłem (po kilku próbach).

użyłem

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Następnie resetuję /mnt/etc/fstabplik dla partycji rozruchowej i przestrzeni wymiany.

Potem musiałem zresetować GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub
teeks99
źródło
Uwaga: dotyczy to tylko dysków sformatowanych w MBR.
Teque5
2

Nie próbuj naprawiać uruchamiania z tego napędu; moja rekomendacja:

  1. Podłącz dysk na innym komputerze, zamiast ryzykować wymianę hotsapu na uszkodzonym komputerze.
  2. rsync pliki niesystemowe na nowy dysk.
  3. Na osobnym dysku twardym utwórz boot, minimalny katalog główny i wymianę. Zainstaluj ten sam system operacyjny, który chcesz sklonować z chorego dysku twardego.
  4. Uruchom z tego nowego dysku (najlepiej na osobnym komputerze, jeśli nie możesz ryzykować przestoju na hoście docelowym, w przeciwnym razie możesz uruchomić hosta docelowego z tego dysku).
  5. Dodaj dysk z kroku 2 do nowego systemu z poprawnymi punktami podłączenia. Teraz masz klon dysku systemowego. Możesz (opcjonalnie) skopiować partycje na nowy dysk, ale zalecam, aby dysk był minimalnym wymaganiem do uruchomienia systemu operacyjnego. Jak zauważyłeś, posiadanie zbyt wielu rzeczy na partycji podstawowej utrudnia odzyskiwanie. Upewnij się, że poprawnie skopiowałeś konfigurację sieci, ponieważ serwer jest bez głowy.
  6. Po prostu wymień dysk w słabym systemie na nową parę dysków (jeśli nie chcesz początkowo uruchamiać celu w kroku # 4).
  7. Restart.
Burhan Khalid
źródło
Mogę zaryzykować przestoje, to nie jest niezbędny serwer. Idę na wymianę (zasadniczo dodawanie na gorąco), ponieważ ta kopia byłaby znacznie szybsza. Myślałem, że nie powinno być zbyt wielu zagrożeń, ponieważ mówimy o SATA (przynajmniej II). Poza tym, jaki jest powód, aby zaproponować dodatkowy dysk rozruchowy? Czy nie skomplikowałoby to sprawy dla niektórych już zainstalowanych programów, homedirów itp.? To brzmi jak praca, której staram się unikać: D
Nanne
Tego używam w produkcji; Instaluję / home, / etc, / var, / usr i / opt na dyskach zewnętrznych (właściwie na LVM) i / i / boot na oddzielnym dysku. W ten sposób nie muszę się martwić, gdy główny dysk ulegnie awarii, po prostu go wymienię bez wpływu na moje usługi :) Początkowo jest trochę pracy, ale na dłuższą metę oszczędza. Zwłaszcza, gdy zabraknie miejsca na partycji i konieczne jest dodanie do woluminu bez przestojów.
Burhan Khalid
Chociaż masz rację, nie jest to wymóg, który obecnie mam, ani nie potrzebuję :). W systemie jest kilka innych dysków (około 7) i muszę gdzieś narysować linię; D. W tej chwili system operacyjny nie wymaga dzielenia. Mam na myśli: zgadzam się, że system jest dobry, ale nie jest to coś, czego teraz szukam; D. Więc jeśli zostawię to wszystko na 1 dysku, fakt, że kopiuję na zewnątrz, spowoduje, że będzie to bardzo powolne, prawda?
Nanne
Zależy od twojego interfejsu do zewnętrznego, przez Ethernet powinien być szybki, przez USB 2 szybciej, na USB 3 jeszcze szybciej. Nie spowoduje to spowolnienia - oczywiście nie kopiuj katalogów, w których są zapisywane (np. / Tmp, których i tak nie potrzebujesz), ani gdziekolwiek są zapisywane potoki.
Burhan Khalid
0

Spędziłem wiele czasu na dystrybucji Centos Freepbx na rsync i mam nowy bootowalny dysk, a na koniec po naprawieniu fstab i grub UUID nie działa.

Ostatnim krokiem, aby to działało, jest

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Gdy jesteś w interfejsie Grub CLI (tj. Po grub>znaku zachęty):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Naciśnij enteri możesz teraz zamknąć, usunąć stary dysk i uruchomić nowy.

Comdif
źródło