Как скопировать всю корневую файловую систему Linux на новый жесткий диск с помощью ssh и tar
Мне нужно перенести всю корневую файловую систему Linux с неисправного жесткого диска на другой компьютер с открытым доступным разделом. Я уверен, что это связано tar
а также ssh
, но я не могу точно вспомнить, как это сделать.
Я, вероятно, представляю, используя live cd на новом / целевом хосте, чтобы запустить что-то вроде этого:
ssh user@failingharddrivehost "some tar command | piped into something else"
6 ответов
Используйте rsync. С нового хоста вы можете использовать
rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/
Я не стал бы пытаться использовать что-то вроде tar, потому что, вероятно, он не будет работать, когда есть битые файлы
Почему вы сочетаете с каталогом, кроме? Не лучше ли смонтировать это устройство в другой каталог? современные ядра позволяют так. например, вы установили
/dev/sda1 как / затем выполните: mkdir /CLEANROOT mount /dev/sda1 /CLEANROOT
после этого у вас есть: /dev/sda1 как / /dev/sda1 как / CLEANROOT
Это та же файловая система, видимая в двух местах, но / CLEANROOT не имеет аддитивного монтирования. Затем вы можете использовать tar или rsync /CLEANROOT без каких-либо исключений вместо копирования / с исключениями.
Конечно, вы должны скопировать другие разделы данных, когда у вас есть.
Копирование раздела - это первый шаг к восстановлению сервера. другой - восстановить загрузочные секторы, иначе система не загрузится с скопированного диска. Полезным является режим восстановления при загрузке с установочного / аварийного CD или pendrive.
Если оба компьютера находятся в одной (безопасной) локальной сети, я рекомендую использовать другой подход 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
не захватит
У вас есть физический доступ к отказавшему хосту?
Если вы это сделаете, то загрузитесь с 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
Если вы не можете загрузиться с живого компакт-диска, некоторые из приведенных выше решений останутся прежними, но:
- Некоторые файлы могут быть использованы / заблокированы.
- Убедитесь, что вы исключили не только / dev /, но и / proc /.
Напримерtar --exclude='/dev' --exclude='/proc'
Вот описание того, как копировать файлы, используя tar
а также ssh
, По сути, вы должны выполнить одно из следующих действий, в зависимости от того, хотите ли вы скопировать локальный -> удаленный или удаленный -> локальный:
tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'
ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -
Вы должны рассмотреть возможность использования rsync
следующая команда предполагает 2 вещи:
- вы находитесь в системе с неисправным жестким диском
- Новый раздел имеет минимальную установку Linux с включенным ssh.
rsync / new_partition:/wherever/you/want/
Примечание: конечный / важен, иначе ваши файлы окажутся на одном уровне каталогов выше