Назад | Перейти на главную страницу

Дамп FreeBSD с cURL / rsync

Я пытаюсь создать сценарий резервного копирования с помощью дампа 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, который всегда копирует файл целиком и поэтому ему не нужно искать исходные данные, но это настолько необычная потребность, что я сомневаюсь, что она существует.