Какая команда мне следует использовать для отправки сжатого образа диска на извлечение на диск удаленного сервера?

Вопрос или проблема

У меня есть несколько сжатых файлов, которые я хочу передать на удаленный сервер и разархивировать прямо на целевом диске.

Это похоже на следующую команду

dd if=/dev/sda bs=5M conv=fsync status=progress | gzip -c -9 | ssh user@DestinationIP 'gzip -d | dd of=/dev/sda bs=5M'

Из этого вопроса на Server Fault.

В моем случае файл уже сжат, поэтому gzip -9 на источнике не будет необходим.

Это будет более похоже на:

load-some-file /drive/image.tar.gz | ssh user@DestinationIP 'gzip -d | dd of=/dev/sda bs=5M'

Какая команда должна быть load-some-file?

Подойдет ли команда типа cat, или сама команда dd будет достаточна?

Может ли вывод dd быть отправлен в команду ssh напрямую?

Какая команда должна быть load-some-file?

Совершенно никакой команды. Сделайте так, чтобы ssh сам читал файл, т.е. перенаправьте его ввод:

</drive/image.tar.gz ssh …

Подойдет ли команда типа cat?

cat /drive/image.tar.gz | ssh … должно сработать, но это бессмысленное использование cat.

или сама команда dd будет достаточна? Может ли вывод dd быть отправлен в команду ssh напрямую?

Да, в принципе. Существуют многие команды, которые могут выводить свой ввод в том виде, в каком он есть, смотрите этот ответ. Тем не менее, если вы просто хотите, чтобы ssh получал файл в своем стандартном вводе, тогда перенаправление ввода будет достаточно.

Ответ или решение

Для передачи и извлечения сжатого образа диска на удалённый сервер с помощью команды, можно воспользоваться следующей последовательностью команд в Linux. Задание заключается в том, чтобы получить сжатый файл и передать его на удалённый сервер, где он будет разжат и записан на целевой диск.

Исходя из вашего запроса, если у вас уже есть сжатый образ, например, /drive/image.tar.gz, вы можете использовать следующую команду:

cat /drive/image.tar.gz | ssh user@DestinationIP 'gzip -d | dd of=/dev/sda bs=5M'

Анализ решения

  1. Использование cat: Команда cat /drive/image.tar.gz считывает содержимое файла и отправляет его в стандартный вывод. В данном контексте это нормально, но в Linux есть более оптимальные методы. Однако, поскольку команда cat хорошо известна, она будет понятна большинству пользователей.

  2. SSH для передачи: Команда ssh user@DestinationIP обеспечивает защищённое соединение с удалённым сервером, на который будет отправлен сжатый файл.

  3. Разжатие и запись на диск: На удалённой стороне команда gzip -d | dd of=/dev/sda bs=5M отвечает за разжатие переданного потока и запись его на диск /dev/sda. Важно отметить, что данная операция полностью перезаписывает данные на указанном диске, поэтому необходимо удостовериться, что в это место можно записывать и что на нём нет данных, которые вам нужны.

Альтернативное решение

Вместо использования cat, можно использовать перенаправление ввода, чтобы непосредственно передать файл в SSH, что будет иметь аналогичный эффект:

< /drive/image.tar.gz ssh user@DestinationIP 'gzip -d | dd of=/dev/sda bs=5M'

Возможность использования dd

Если вы хотите использовать dd, это возможно, но в данном случае нет необходимости, так как dd предназначен для работы с устройствами и файлами на низком уровне. При чтении файла image.tar.gz его проще и эффективнее просто передать через cat или перенаправление. Использование dd в данном контексте может усложнить команду без явной необходимости.

Заключение

Таким образом, оптимальный подход к передаче сжатого образа диска на удалённый сервер с последующим разжатием и записью на диск — это использование команды cat или перенаправления, как показано выше. Убедитесь в корректности настроек соединения и прав доступа, прежде чем запускать указанные команды.

Следуя этим советам, вы сможете эффективно передать образ диска на удалённый сервер и избежать ошибок, связанных с перезаписью данных.

Оцените материал
Добавить комментарий

Капча загружается...