У меня есть сервер с общим размером 80 ГБ, на котором больше нет места, поэтому я не могу выполнять резервное копирование на сервере. Я нашел эту команду
ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
но это не имеет смысла. ./path
относится к чему? Итак, я думал об этом:
localserver:~$ ssh root@remoteserver "tar czvf / " | tar xzvf /mnt/backup
Сжать корень удаленного сервера и распаковать в моем резервном каталоге. /mnt/backup
установлен на приводе 300G. Это сработает? У меня есть беспарольный доступ к удаленному серверу с использованием открытого ключа.
Это хорошее начало, но есть некоторые проблемы
Во-первых, на исходном сервере вам нужно указать, что вы хотите отправить архив на стандартный вывод. Это делается путем предоставления -
как имя файла:
tar czf - /
Вам нужно удалить -v
параметр. Распечатка имен файлов вместе со сжатым архивом полностью его испортит.
На целевой стороне вам нужно указать выходной каталог с помощью -C
(или вставьте в него компакт-диск перед тем, как начать, тогда можете не указывать):
tar xz -C /mnt/backup
Вы можете оставить -v
вот если хотите ... это замедлит процесс, но не принесет никакого вреда. Нет необходимости указывать -f
, поскольку tar автоматически обнаруживает сжатый поток из stdin.
Полная рабочая команда будет такой:
ssh root@removeserver "tar cfz - /" |tar xz -C /mnt/backup
Обратите внимание, что вы получите сообщение об ошибке, когда сделаете это в работающей системе, из файлов, которые изменяются во время чтения tar, файлов сокетов и т. Д. Это не должно повредить процессу, поскольку они печатаются в stderr, но было бы чище для загрузки сервера из среды восстановления процесса.