Мне нужно перенести огромное количество mp3-файлов между двумя серверами (Ubuntu). Под огромным я имею в виду около миллиона файлов, которые в среднем 300 КБ. Я пытался с, scp
но это заняло бы около недели. (около 500 КБ / с) Если я передаю один файл по HTTP, я получаю 9-10 МБ / с, но я не знаю, как передать их все.
Есть ли способ быстро их перевести?
linux
performance
file-transfer
nicudotro
источник
источник
Ответы:
Я бы порекомендовал tar. Когда деревья файлов уже похожи, rsync работает очень хорошо. Однако, поскольку rsync выполнит несколько проходов анализа для каждого файла, а затем скопирует изменения, это намного медленнее, чем tar для начальной копии. Эта команда, скорее всего, сделает то, что вы хотите. Он будет копировать файлы между компьютерами, а также сохранять как разрешения, так и права доступа пользователей / групп.
Согласно комментарию Макинтоша ниже, это команда, которую вы бы использовали для rsync
источник
~
символ активен, только если SSH использует терминал. Это не тот случай, когда вы указываете удаленную команду (если вы не передаете-t
опцию). Так что ваша забота недействительна.Внешний жесткий диск и доставка в тот же день.
источник
Я бы использовал rsync.
Если вы экспортировали их через HTTP с доступными списками каталогов, вы также можете использовать wget и аргумент --mirror.
Вы уже видите, что HTTP быстрее, чем SCP, потому что SCP шифрует все (и, следовательно, узкие места в процессоре). HTTP и rsync будут двигаться быстрее, потому что они не шифруют.
Вот несколько документов по настройке rsync в Ubuntu: https://help.ubuntu.com/community/rsync
В этих документах говорится о туннелировании rsync через SSH, но если вы просто перемещаете данные по частной локальной сети, вам не нужен SSH. (Я предполагаю, что вы находитесь в частной локальной сети. Если вы получаете 9-10 МБ / с через Интернет, то я хочу знать, какие у вас соединения!)
Вот некоторые другие очень простые документы, которые позволят вам установить относительный небезопасный сервер rsync (без зависимости от SSH): http://transamrit.net/docs/rsync/
источник
--include
и--exclude
аргументы , чтобы получить более тонкий.Без особых обсуждений используйте netcat, сетевой швейцарский нож. Нет лишних протоколов, вы напрямую копируете в сетевой сокет. пример
источник
pv
) и проверкой целостности черезsha512sum
, но как только бит перевернут, весь поток становится плохим, потому что нет способа его восстановить. Что нам действительно нужно, так это легкий протокол, такой как потоковый поток для этих безопасных сред, когда нам нужны низкие издержки - то, что будет проверять целостность на уровне чанка (например, 4 МБ) и может повторно отправлять чанк в случае сбоя. TCP crc недостаточно мощный.С большим количеством файлов, если вы используете rsync, я бы попытался получить версию 3 или выше на обоих концах . Причина в том, что меньшая версия будет перечислять каждый файл перед началом передачи. Новая функция называется возрастающей рекурсией .
источник
rsync, как и другие, уже рекомендовал. Если нагрузка на ЦП из-за шифрования является узким местом, используйте другой алгоритм с меньшей нагрузкой на ЦП, такой как blowfish. Например, что-то вроде
rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path
источник
При перемещении 80 ТБ данных (миллионы крошечных файлов) вчера переключение с
rsync
наtar
оказалось оказалось намного быстрее , поскольку мы прекратили попыткии переключился на
tar
...Так как эти серверы находятся в одной и той же локальной сети, пункт назначения смонтирован в исходной системе по NFS, что и подталкивает. Не делая это еще быстрее, мы решили не сохранять
atime
файлы:На приведенном ниже рисунке показана разница, произошедшая при переходе от rsync к tar. Это была идея моего босса, и мой коллега как выполнил ее, так и сделал большую запись в своем блоге . Мне просто нравятся красивые картинки . :)
источник
tar cf - directory | ttcp -t dest_machine
из ftp.arl.mil/mike/ttcp.htmlПри копировании большого количества файлов я обнаружил, что такие инструменты, как tar и rsync, более неэффективны, чем они должны быть, из-за накладных расходов, связанных с открытием и закрытием многих файлов. Я написал инструмент с открытым исходным кодом, называемый fast-archiver, который быстрее, чем tar, для этих сценариев: https://github.com/replicon/fast-archiver ; это работает быстрее, выполняя многократные параллельные файловые операции.
Вот пример быстрого архиватора и tar на резервной копии более двух миллионов файлов; Для архивации fast-archiver требуется 27 минут, а для tar - 1 час 23 минуты.
Для передачи файлов между серверами вы можете использовать fast-archiver с ssh, например:
источник
Я также использую tar через
netcat
подход, за исключением того, что предпочитаю использоватьsocat
- гораздо больше возможностей для оптимизации в вашей ситуации - например, путем настройки mss. (Также смейтесь, если хотите, но мнеsocat
легче вспомнить аргументы, потому что они последовательны). Так что для меня это очень часто встречается в последнее время, так как я перемещаю вещи на новые серверы:Псевдонимы необязательны.
источник
Другой альтернативой является Unison . В этом случае может быть немного более эффективным, чем Rsync, и несколько проще настроить слушателя.
источник
Похоже, в верхнем ответе может быть несколько опечаток. Это может работать лучше:
источник
wget --mirror
как предложил Эван Андерсон или любой другой http-клиент. Будьте осторожны, чтобы не иметь никаких неприятных символических ссылок или вводящих в заблуждение файлов индекса. Если у вас есть только MP3, вы должны быть в безопасности.Я заметил, что другие люди рекомендовали использовать netcat . Основываясь на своем опыте, я могу сказать, что он медленный по сравнению с другими решениями.
источник
Благодаря замечательному ответу Scott Pack (я раньше не знал, как это сделать с помощью ssh), я могу предложить это улучшение (если
bash
это ваша оболочка). Это добавит параллельное сжатие, индикатор прогресса и проверку целостности по всей сетевой ссылке:pv
является хорошей программой просмотра прогресса для вашего канала иpigz
представляет собой параллельную программу gzip, которая использует столько потоков, сколько ваш процессор по умолчанию (я думаю, до 8 максимум). Вы можете настроить уровень сжатия так, чтобы он лучше соответствовал соотношению процессоров и пропускной способности сети, и поменять его местами,pxz -9e
а также,pxz -d
если у вас гораздо больше процессоров, чем пропускная способность. Вам нужно только убедиться, что две суммы совпадают по завершении.Эта опция полезна для очень больших объемов данных, а также для сетей с высокой задержкой, но не очень полезна, если связь нестабильна и обрывается. В этих случаях rsync, вероятно, является лучшим выбором, поскольку он может возобновиться.
Образец вывода:
Для блочных устройств:
Очевидно, убедитесь, что они имеют одинаковый размер или ограничение с помощью count =, skip =, seek = и т. Д.
Когда я копирую файловые системы таким образом, я часто сначала
dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
обнуляю большую часть неиспользуемого пространства, что ускоряет работу xfer.источник
Я не думаю, что вы добьетесь большего успеха, чем scp, если не установите более быстрые сетевые карты. Если вы делаете это через Интернет, это не поможет.
Я бы порекомендовал использовать rsync . Это может быть не так быстро, но, по крайней мере, если это не сработает (или вы отключите его, потому что это занимает слишком много времени), вы можете продолжить с того места, на котором остановились в следующий раз.
Если вы можете соединить 2 машины напрямую, используя гигабитный Ethernet, это, вероятно, будет самым быстрым.
источник
Для 100 Мбит / с теоретическая пропускная способность составляет 12,5 МБ / с, поэтому при 10 МБ / с у вас все хорошо.
Я также повторил бы предложение сделать rsync, вероятно, через ssh. Что-то вроде:
При скорости 100 Мбит / с ваши процессоры должны иметь возможность обрабатывать шифрование / дешифрование без значительного влияния на скорость передачи данных. И если вы прервете поток данных, вы сможете продолжить с того места, где остановились. Осторожно, с «миллионами» файлов запуск займет некоторое время, прежде чем он действительно что-то передаст.
источник
Я сталкивался с этим, за исключением того, что я переносил логи Oracle.
Вот разбивка
УПП
Rsync
FTP / HTTP
Я использовал FTP с большим успехом (где большой успех эквивалентен ~ 700 Мбит / с в сети Gb). Если вы получаете 10 МБ (что соответствует 80 МБ / с), возможно, что-то не так.
Что вы можете рассказать нам об источнике и месте назначения данных? Это один диск на один диск? RAID на USB?
Я знаю, что на этот вопрос уже есть ответ, но если ваша сеть работает медленно на кроссоверном кабеле Гбит / с, что-то абсолютно необходимо исправить.
источник
Вы не упомянули, находятся ли эти две машины в одной локальной сети, или является ли обязательным безопасный канал (например, использующий SSH), но другой инструмент, который вы можете использовать, - netcat .
Я бы использовал следующее на принимающей машине:
Тогда на отправляющей стороне:
Обладает следующими преимуществами:
gzip -1
обеспечивает легкое сжатие без насыщения процессора, поэтому делает хороший компромисс, обеспечивая небольшую степень сжатия при сохранении максимальной пропускной способности. (Вероятно, это не так выгодно для данных MP3, но не повредит.)например,
Примечания:
tar
вместо,cpio
если вы предпочитаете.gzip -1
вместо этого направил бы себя через себя, чтобы избежать насыщения процессора. (Или, по крайней мере, установите CompressionLevel на 1.)источник
Простой scp с соответствующими параметрами легко достигнет 9-10 МБ / с по локальной сети:
С этими параметрами, вероятно, пропускная способность стала в 4 или 5 раз выше, чем без параметров (по умолчанию).
источник
Если у вас есть ftp сервер на стороне src, вы можете использовать ncftpget с сайта ncftp . Он работает с небольшими файлами, так как использует tar внутри себя.
Одно сравнение показывает это: перемещение небольших файлов размером 1,9 ГБ (33926 файлов)
источник
Вы также можете попробовать использовать команду BBCP, чтобы сделать ваш перевод. Это буферизованный параллельный ssh, который действительно кричит. Обычно мы можем получить 90% + линейную скорость при условии, что мы будем поддерживать подачу трубы.
Обычно, мы очень стараемся, чтобы избежать необходимости перемещаться. Мы используем пулы ZFS, к которым мы всегда можем просто «добавить» больше дискового пространства. Но иногда ... тебе просто нужно что-то переместить. Если у нас есть «живая» файловая система, копирование которой может занять часы (или дни), даже если она выполняется в режиме полного взрыва ... мы выполняем двухэтапную процедуру отправки zfs:
Мы также отправляем дампы zfs через BBCP ... это максимизирует использование нашей сети и минимизирует время передачи.
BBCP находится в свободном доступе, вы можете гуглить его, и это прямая компиляция. Просто скопируйте его в ваш / usr / local / bin как на src, так и на компьютерах назначения, и он будет в основном работать.
источник
Я предполагаю, что мой ответ здесь немного запоздал, но я получил хороший опыт использования mc (Midnight Commander) на одном сервере для подключения через SFTP к другому серверу.
Опция подключения через FTP находится в меню «Влево» и «Вправо», введя адрес следующим образом:
или же
Вы можете перемещаться и выполнять файловые операции почти как в локальной файловой системе.
Он имеет встроенную опцию для копирования в фоновом режиме, но я предпочитаю использовать экранную команду и отсоединяться от экрана, пока копируется mc (я думаю, что он тоже работает быстрее).
источник
На @scottpack ответ опции rSync
Для отображения хода загрузки используйте «--progess» в качестве опции после -avW в команде, как показано ниже.
источник
Вот быстрый тест для сравнения некоторых методов,
Количество файлов: 9632, Общий размер: 814 МиБ, Средний размер: 84 КиБ
Команда для tar / netcat была:
источник
rsync или, возможно, вы захотите скопировать его в один файл, а затем scp. Если вам не хватает места на диске, вы можете передать tar непосредственно через ssh во время его создания.
источник
Если вы отправляете файлы в формате MP3 и другие сжатые файлы, вы ничего не получите от любого решения, которое пытается дополнительно сжать эти файлы. Решением было бы то, что может создать несколько соединений между обоими серверами и таким образом увеличить нагрузку на пропускную способность между двумя системами. Как только это достигнет максимума, мало что можно получить без улучшения вашего оборудования. (Более быстрые сетевые карты между этими серверами, например.)
источник
Я попробовал несколько инструментов для копирования файла размером 1 ГБ. Результат ниже: HTTP самый быстрый, с wget -c nc секунда в строке scp самый медленный, и пару раз не получалось. Невозможно возобновить rsync, используя ssh в качестве бэкэнда, поэтому результат тот же. В заключение я хотел бы перейти на http с помощью wget -bqc и дать ему немного времени. Надеюсь, что это помогает
источник
Мне пришлось скопировать диск BackupPC на другую машину.
Я использовал rsync.
У машины было 256 МБ памяти.
Процедура, которой я следовал, была следующей:
rsync
без-H
(заняло 9 часов)cpool
каталог и начал сpc
каталога; Я сократил передачу.rsync
с-H
флагом, и все файлы, жестко связанные вpc
каталоге, были правильно переданы (процедура нашла все настоящие файлыcpool
и затем связала их сpc
каталогом) (заняло 3 часа).В конце концов я смог проверить
df -m
, не было ли дополнительного места потрачено.Таким образом я исключаю проблему с памятью и rsync. Все время я могу проверить производительность, используя top и atop, и, наконец, я передал 165 ГБ данных.
источник