Мне нужно было перенести файл виртуального диска KVM объемом 20 ГБ , хранящий корневую файловую систему виртуальной машины CentOS 6.5, с одного лабораторного сервера на другой. Большой размер файла и тот факт, что я однажды сжал такой файл виртуального диска до нескольких сотен мегабайт, заставили меня инстинктивно включить сжатие, scp
но я был удивлен, увидев довольно низкую скорость передачи. Тогда я попробовал bzip2
в сочетании с ssh
и cat
и был поражен. Вот краткое изложение методов и средней пропускной способности.
scp -C vm1-root.img root@192.168.161.62:/mnt/vdisks/
, 11 МБ / с.bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"
5 МБ / с. Этот еще более низкий результат вызвал поиск в сети.scp -c arcfour -C vm1-root.img root@192.168.161.62:/mnt/vdisks/
13 МБ / с. Это использование,-c arcfour
как было предложено в одном ответе на serverfault. Это вряд ли помогло. Наконец, я отключил сжатие.scp vm1-root.img root@192.168.161.62:/mnt/vdisks/
23 МБ / с.
Разве сжатие не должно быть быстрее?
РЕДАКТИРОВАТЬ: Я не знаю, почему вопрос был понижен. Я думал, что здесь есть чему поучиться.
Получив ssh(1)
подсказку справочной страницы от @sven, я попробовал несколько альтернативных способов передачи файлов, не связанных со сжатием, оба с лучшими результатами.
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"
, 26 МБ / с.nc -l 5678 > /mnt/vdisks/vm1-root.img
на приемнике иnc 192.168.161.62 5678 < vm1-root.img
на передатчике, 40 МБ / с. Порт5678
является произвольным, который был доступен.
Использование nc
оказалось самым быстрым методом копирования!
В прошлом scp -C
работал очень хорошо всякий раз, когда я думал, что это будет. Например, при передаче системных журналов ( /var/log/messages*
) размером несколько ГБ. Скорость передачи без сжатия в несколько сотен КБ / с увеличится до 1-2 МБ / с. Этот пример падает в случае медленного соединения, как было указано на странице руководства.
У меня есть случай, когда недавно созданный образ виртуального диска для раздела 20 ГБ имеет сжатый размер всего 200 МБ. При скорости передачи около 25 МБ / с мы могли бы выполнить копирование всего за 8 секунд вместо 13 минут! Понятно, что scp
без сжатия это неэффективно и scp -C
даже хуже.
Я предполагаю, что главный урок, который мы здесь усвоили, заключается в том, что его scp -C
следует рассматривать только как удобство. Если файл может быть значительно сжат, то лучше сначала сжать его в источнике, передать сжатую форму и, наконец, выполнить сжатие в месте назначения. Инструменты, которые выполняют сжатие и распаковку быстро (например, pbzip2 ), будут более полезными .