Я пытаюсь создать сценарий резервного копирования с помощью дампа FreeBSD, чтобы сделать снимок файловой системы, но вместо хранения снимка на диске я хочу передать вывод из дампа в cURL или rsync, чтобы он сохранялся удаленно. У меня он работает через SSH, чтобы выводить вывод на удаленный конец, однако мне нужно использовать cURL или rsync для этого по соображениям безопасности.
Я пробовал несколько разных аргументов командной строки:
dump -0u -a -L -f - /dev/ad0b | curl -v --data @- http://1.2.3.4/
dump -0u -a -L -P "curl -v --data - http://1.2.3.4/" /dev/ad0b
dump -0u -a -L -P "rsync --progress --stats rsync://1.2.3.4/backup" /dev/ad0b
Что бы я ни делал, у меня либо сломалась труба, либо данные не поступали.
Я могу вручную сбросить его в файл, а затем загрузить его через cURL или rsync, но это противоречит цели того, что я пытаюсь сделать.
Любая помощь или указатели были бы потрясающими.
Базовый подход с любым из ваших двух curl
попытки выглядит нормально. Однако ваш дамп - это двоичные данные, поэтому --data
неверно (данные будут искажены). В зависимости от того, что ожидает ваш веб-сервер, вам может повезти с одним из
curl -v --data-urlencode @- http://1.2.3.4/
, если ожидаемый формат - данные в кодировке URL.curl -v --data-binary -H 'Content-Type: octet/stream' @- http://1.2.3.4/
, если ожидаемый формат - необработанные двоичные данные.curl -v -F "mydump=@-" http://1.2.3.4/
, если ожидаемый формат - это форма.Все это зависит от того, что ожидает HTTP-сервер. Проверьте документацию по используемому CGI (или разместите ее здесь, если вам нужна помощь).
Если сервер, прослушивающий 1.2.3.4, ожидает необработанных данных, а не запроса HTTP POST, тогда curl
не тот инструмент (и http
тоже неправильно конечно). Netcat это самый популярный инструмент для передачи данных в сокет TCP: nc 1.2.3.4 5678
.
Rsync вряд ли заработает. Основная цель rsync - копировать только те части файла, которые не совпадают с обеих сторон, что требует большого поиска внутри исходного и целевого файлов. Кроме того, rsync предназначен для работы с иерархией файлов, а не с одним файлом. Было бы технически возможно написать клиента rsync, который всегда копирует файл целиком и поэтому ему не нужно искать исходные данные, но это настолько необычная потребность, что я сомневаюсь, что она существует.