16

Мне нужно перенести всю корневую файловую систему Linux с неисправного жесткого диска на другой компьютер с открытым доступным разделом. Я почти уверен, что это касается tar и ssh , но я точно не помню, как это сделать.

Я, вероятно, представляю, используя live cd на новом / целевом хосте, чтобы запустить что-то вроде этого:

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

6 ответов6

14

Используйте rsync. С нового хоста вы можете использовать

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

Я не стал бы пытаться использовать что-то вроде tar, потому что это, вероятно, не будет работать, когда есть битые файлы.

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 не будет захватывать.

2

Почему вы сочетаете с каталогом исключая? Не лучше ли смонтировать то же устройство в другой каталог? современные ядра позволяют так. например, вы установили

/dev/sda1 как / затем выполните: mkdir / CLEANROOT mount /dev/sda1 / CLEANROOT

после этого у вас есть:/dev/sda1 как //dev/sda1 как /CLEANROOT

Это та же файловая система, видимая в двух местах, но /CLEANROOT не имеет аддитивного монтирования. Затем вы можете использовать tar или rsync /CLEANROOT без каких-либо исключений вместо копирования / с исключениями.

Конечно, вы должны скопировать другие разделы данных, когда у вас есть.

Копирование раздела - это первый шаг к восстановлению сервера. другой - восстановить загрузочные секторы, иначе система не загрузится с скопированного диска. Полезным является режим восстановления при загрузке с установочного / аварийного CD или pendrive.

1

У вас есть физический доступ к отказавшему хосту?

Если вы это сделаете, то загрузитесь с live CD. Тогда используйте:

  • dump (сбросить / восстановить целые файловые системы, включая их разрешения).
  • Тар с / dev исключен. Вы можете комбинировать это с выводом в 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'
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

следующая команда предполагает 2 вещи:

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

rsync / new_partition:/wherever/you/want/

Примечание: конечный символ / важен, иначе ваши файлы окажутся на одном уровне каталогов выше

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .