jak skopiować cały system plików Linux na nowy dysk twardy przy pomocy ssh i tar

18

Muszę przenieść cały główny system plików linuksa z uszkodzonego dysku twardego na inny komputer z otwartą, dostępną partycją. Byłem prawie pewien, wiąże się to tara ssh, ale nie pamiętam dokładnie, jak to zrobić.

Obrazuję prawdopodobnie za pomocą Live CD na nowym / docelowym hoście, aby uruchomić coś takiego:

ssh user@failingharddrivehost "some tar command | piped into something else"

CHK
źródło
poza tematem. nie pytanie programistyczne. ale spróbujssh user@failingsys "tar cfz - /" > oldsys.tar.gz
Chcesz uważać, aby nie tar / dev / (np. / Dev / random, / dev / sdX, ...). Ditto / proc /
Hennes

Odpowiedzi:

19

Użyj rsync. Z nowego hosta możesz korzystać

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

Nie próbowałbym angażować czegoś takiego jak tar, ponieważ prawdopodobnie nie zadziała, gdy są uszkodzone pliki.

etagenklo
źródło
Skończyło się na użyciu rsync, jak opisano powyżej przez etagenklo i @Hennes. Migracja poszła dobrze. Trzeba tylko naprawić gruba, ale to nie powinno być takie złe.
CHK
8
Dodam również -AHX jako flagi do rsync, aby zachować acls, xattrs i hardlinks, co skutkuje jeszcze dokładniejszą kopią oryginalnego fs.
Alexander Remesch,
5
Dodałbym -x, aby zignorować elementy spoza głównego systemu plików, wtedy możesz pominąć argumenty --exclude dla różnych ścieżek.
Alex
4

Jeśli oba komputery są w tej samej (bezpiecznej) sieci LAN, zalecam inne podejście przy użyciu netcat. Zwykle jest to znacznie szybsze, ponieważ nie szyfruje danych.

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

który otwiera port nasłuchiwania 1234 na dobrej maszynie netcat -l -p 1234i przesyła dane przychodzące tardo wyodrębnienia (zachowując mtime i uprawnienia). Zły host wysyła dane do tego portu, również używając tari netcat. I zawarte pewne --excludeparametry, jak /proci /syssą wirtualne systemy plików, a więc bezużyteczne na nowego gospodarza. (szczególnie plik reprezentujący pamięć RAM w ( /proc/kcore) doda niepotrzebną ilość danych).

Należy jednak (również) rozważyć ddzrzut zrzutów z uszkodzonych partycji dysku:

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

gdzie trzeba było zastosować /dev/sda1odpowiednie urządzenie. Zrób to również z innymi partycjami na uszkodzonym dysku.

Dzięki temu zrzutowi masz pewność, że nie przegapiłeś żadnych ważnych metadanych (takich jak ACL), które tarnie zostaną przechwycone.

mpy
źródło
3

Dlaczego łączysz się z wykluczaniem katalogu? Czy nie jest lepszy pomysł zamontować to samo urządzenie w innym katalogu? nowoczesne jądra na to pozwalają. na przykład zamontowałeś

/ dev / sda1 as / then do: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

po tym masz: / dev / sda1 as / / dev / sda1 as / CLEANROOT

Jest to ten sam system plików widoczny w dwóch miejscach, ale / CLEANROOT nie ma addytywnych montowań. Następnie możesz tar lub rsync / CLEANROOT bez żadnych wykluczeń zamiast kopiować / z wykluczeniami.

Oczywiście musisz skopiować kolejne partycje danych, jeśli takie masz.

Kopiowanie partycji jest pierwszym krokiem do odzyskania serwera. innym jest regeneracja sektorów rozruchowych, w przeciwnym razie system nie uruchomi się z skopiowanego dysku. Przydatny jest tryb ratunkowy, gdy uruchamiasz komputer z instalacyjnej / ratunkowej płyty CD lub pendrive.

Znik
źródło
1

Czy masz fizyczny dostęp do hosta, który uległ awarii?

Jeśli to zrobisz, uruchom komputer z płyty CD na żywo. Następnie użyj:

  • zrzut (zrzut / przywraca całe systemy plików, w tym jego uprawnienia).
  • Tar z / dev wyłączone. Można łączyć z tym wyprowadzanie do std_out i rurociągów, że chociaż netcat
    wykluczyć Składnia jest następująca: tar --exclude='/dev'.
  • lub rsync z tymi samymi wykluczeniami. Na przykład
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • lub użyj dd w ten sposób:
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

Jeśli nie możesz uruchomić z płyty CD na żywo, niektóre z powyższych rozwiązań pozostaną takie same, ale:

  1. Niektóre pliki mogą być używane / zablokowane.
  2. Pamiętaj, aby wykluczyć nie tylko / dev /, ale także / proc /.
    Na przykładtar --exclude='/dev' --exclude='/proc'
Hennes
źródło
Tak, mam fizyczny (i root) dostęp do obu hostów. Idę spróbować z rsync. Netcat rozbił się z powodu awarii z nieznanych przyczyn. docelowy system plików nie chce zostać zamontowany. nie działa z: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK
1

Oto opis sposobu kopiowania plików przy użyciu tari ssh. Zasadniczo uruchomiłbyś jedną z następujących czynności, w zależności od tego, czy chcesz skopiować lokalny -> zdalny czy zdalny -> lokalny:

tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'

ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -
Kenster
źródło
0

powinieneś rozważyć użycie rsync

polecenie podążania zakłada 2 rzeczy:

  1. masz system z uszkodzonym dyskiem twardym
  2. nowa partycja ma minimalną instalację Linuksa z włączonym ssh.

rsync / new_partition:/wherever/you/want/

Uwaga: końcowe / jest ważne, w przeciwnym razie twoje pliki znajdą się na jednym poziomie katalogu powyżej

MelBurslan
źródło
OP prawdopodobnie chce użyć -aparametru (i być może -A), ponieważ zachowuje czasy, własność, dowiązania symboliczne (i być może listy ACL) itp. Oraz -e sshparametr, ponieważ dane powinny zostać przesłane na inny komputer. A więcrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy