Як скопіювати всю кореневу файлову систему Linux на новий жорсткий диск з ssh та tar


18

Мені потрібно перенести цілу кореневу файлову систему Linux з несправного жорсткого диска на інший комп'ютер з відкритим доступним розділом. Я майже впевнений, що це стосується tarі ssh, але я не можу точно пригадати, як це зробити.

Я, мабуть, використовую живий компакт-диск на новому / цільовому хості, щоб запустити щось подібне:

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


не по темі. не питання програмування. але спробуйтеssh user@failingsys "tar cfz - /" > oldsys.tar.gz

Ви хочете подбати про те, щоб ви не tar / dev / (наприклад, / dev / random, / dev / sdX, ...). Ditto / proc /
Hennes

Відповіді:


19

Використовуйте rsync. З нового хоста ви можете користуватися

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

Я б не намагався залучити щось на зразок дьогтю, оскільки воно, ймовірно, не спрацює, коли є зламані файли.


Закінчено за допомогою rsync, як описано вище етагенкло та @Hennes. Міграція пройшла добре. Просто потрібно виправити грязь, але це не повинно бути дуже поганим.
ЧК

8
Я б додав -AHX як прапори до rsync, щоб зберегти acls, xattrs та hardlinks, що призведе до ще більш точної копії оригіналу fs.
Олександр Ремеш

5
Я б додав -x, щоб ігнорувати елементи не в кореневій файловій системі, тоді ви можете пропустити аргументи --exclude для різних шляхів.
Олексій

4

Якщо обидва комп’ютери знаходяться в одній (безпечній) локальній мережі, я рекомендую використовувати інший підхід netcat. Зазвичай це набагато швидше, оскільки воно не шифрує дані.

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

який відкриває порт прослуховування 1234 на хорошій машині netcat -l -p 1234та передає вхідні дані tarдля вилучення (із збереженням mtime та дозволів). Поганий хост надсилає дані до цього порту, також використовуючи tarта netcat. Я включив деякі --excludeпараметри, як /procі /sysє віртуальними файловими системами і, отже, марними для нового хоста. (особливо файл, що представляє вашу оперативну пам’ять в ( /proc/kcore), додасть непотрібну кількість даних).

Однак вам слід (також) розглянути можливість зробити ddдамп із розділів несправного диска:

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

де вам довелося прийняти /dev/sda1до потрібного пристрою. Зробіть це і з іншими розділами на несправному диску.

За допомогою цього дампа ви впевнені, що ви не пропустили жодних важливих метаданих (наприклад, ACL), які tarне захоплять.


3

Чому ви поєднуєте з виключенням каталогу? Не краще ідеї монтувати той самий пристрій в інший каталог? сучасні ядра дозволяють таким чином. наприклад, ви змонтували

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

після цього у вас є: / dev / sda1 as / / dev / sda1 as / CLEANROOT

Це та сама файлова система, яку видно в двох місцях, але / CLEANROOT не мають додаткових кріплень. Тоді ви можете відстежувати або rsync / CLEANROOT без жодних виключень, замість цього копіювання / з виключеннями.

Звичайно, ви повинні скопіювати інші розділи даних, коли у вас є такі.

Копіювання розділу - це перший крок для відновлення сервера. інша - відновлювати завантажувальні сектори, інакше система не буде завантажуватися з скопійованого диска. Корисним є режим порятунку, коли ви завантажуєтесь із встановленого / рятувального компакт-диска чи pendrive.


1

Чи маєте фізичний доступ до невдалого хоста?

Якщо ви це робите, завантажуйтесь з живого компакт-диска. Потім використовуйте:

  • дамп (дамп / відновлює цілі файлові системи, включаючи його дозволи).
  • Дьоготь з вилученням / дев. Ви можете поєднати це з виведенням на std_out і трубопроводів , що хоча Netcat
    виключає синтаксис: tar --exclude='/dev'.
  • або rsync з тим самим виключає. Напр
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • або використовувати dd так:
    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

Якщо ви не можете завантажуватися з живого компакт-диска, деякі з вищезазначених рішень залишаться незмінними, але:

  1. Деякі файли можуть бути використані / заблоковані.
  2. Не забудьте виключити не лише / dev /, але й / proc /.
    Напрtar --exclude='/dev' --exclude='/proc'

Так, у мене є фізичний (і root) доступ до обох хостів. Перейдемо спробувати з rsync. сітка розбилася за збірну коробку з невідомих причин. цільова файлова система не хоче монтуватися. не вдається: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK

1

Ось опис того, як скопіювати файли за допомогою tarта ssh. В основному, ви виконаєте одне з наступних, залежно від того, чи хочете ви скопіювати локальну -> віддалену чи віддалену -> локальну:

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

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

0

вам слід розглянути можливість використання rsync

команда follwoing передбачає 2 речі:

  1. ви знаходитесь в системі з відмовою на жорсткому диску
  2. новий розділ має мінімальну установку Linux з включеним ssh.

rsync / new_partition:/wherever/you/want/

Примітка: важливе значення / важливе значення, інакше ваші файли опиняться на одному рівні вище


ОП, ймовірно, хоче використовувати -aпараметр (а можливо, і той -A), оскільки він зберігає час, право власності, символьні посилання (а може бути і ACL) тощо та -e sshпараметр, як дані повинні бути передані на інший комп'ютер. Отжеrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.