Эффективно копируем гигабайтные файлы по сети в Linux / Unix / Mac OS

Поделиться
HTML-код
  • Опубликовано: 26 сен 2024
  • Мой курс «Хардкорная веб-разработка» - course.to.digital
    Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.dig...
    Telegram: t0digital.t.me
    Сказать спасибо за это видео можно здесь - boosty.to/digi...
    Задача переноса больших многогигабайтных файлов с сервера или на сервер возникает нечасто, но - возникает, как правило, при переносе сервера, большом бэкапе чужого проекта и подобных задачах.
    Как эффективно выгрузить с сервера, скажем, 10 гигабайт? В этом видео мы поделимся вариантами переноса файлов и расскажем о наиболее быстром способе копирования больших файлов в *nix.
    Менеджер процессов htop в Linux - • Htop - менеджер процес...
    Обзор Tmux - • Tmux - что это и зачем...
    /****************** about ******************/
    Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
    - Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
    - Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
    Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
    С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
    Telegram канал - t.me/t0digital
    ВК - digital...
    RuTube - rutube.ru/chan...
    Дзен - dzen.ru/id/623...

Комментарии • 124

  • @starikoff72
    @starikoff72 4 года назад +32

    У nc есть один существенный минус. Порт на сервере для передачи данных надо открыть в файрволле, а после передачи не забыть закрыть. А для передачи данных с локального ПК на сервер, надо пробрасывать порт на локальный комп на маршрутизаторе (если конечно сквозная маршрутизация не настроена средствами ВПН или напрямую). Для ssh порт как правило открыт для подключений извне, так что дополнительных лействий совершать не придется.
    Далее, хорошо сжимаемые данные (текстовики, образы виртуалок, дампы баз) принято гонять в сжатом виде. Жать можно на лету, либо встроенными в scp инструментами, либо жать сторонними утилитами вроде pigz и гонять данные через ssh и пайпы. Например так:
    dd bs=4M if=template.img | pv | pigz -9c | ssh user@host "unpigz -c > /vm/template.img"
    Подобным способом можно не только гонять файлы, но и переливать образ на удаленное устройство.
    sudo dd bs=4M if=/dev/ssd1/vm | pv | pigz -9c | ssh user@host "unpigz -c | sudo dd bs=4M of=/dev/ssd2/vm"

  • @ТимурСафаров-в1ч
    @ТимурСафаров-в1ч 4 года назад +4

    Каканы всем привет - классное приветствие я такого ещё не слыхал

  • @RuchejAlex
    @RuchejAlex 5 лет назад +33

    Когда он начал передавать файлы, у меня видео залагало.

    • @t0digital
      @t0digital  5 лет назад

      да, на 1080p почему-то ютуб лагает в этом моменте на этом видео - на большем или меньшем разрешении всё ок

    • @RuchejAlex
      @RuchejAlex 5 лет назад +6

      @@t0digital это к тому, что передача данных высосала весь инет)

    • @t0digital
      @t0digital  5 лет назад

      @@RuchejAlex Magic:)))

    • @plgrm44
      @plgrm44 4 года назад

      и у меня залагало, в следующий раз зипуй перед отправкой

  • @HELLO_AGAIN
    @HELLO_AGAIN 4 года назад +4

    Подобные видео очень даже интересны! Благодарю!

  • @LinuxbyDmitry
    @LinuxbyDmitry 4 года назад +6

    rsync, пожалуй самый не удобный инструмент), но для передачи например сайта размером 500 гигов, на мой взгляд лучше чем rsync не найти. Правда он частенько разрывает соединение, но если написать не сложный скрипт, то он будет возобновлять передачу сам и в обще поможет в организации передачи.
    rsync может налету сжимать и шифровать данные, проконтролирует целостность файлов и структуры директорий, да и сама доставка будет гарантированной.
    Пользуюсь на работе rsync, в качестве быстрого (инкрементного способа), копирование всякого рода софта, юзер документов и т.д.. Проверяет на изменения более 200 гигов за несколько секунд, с около десяти ПК и копирует только изменения или новые файлы, старые (которых нет в оригинале) в моём случае удаляет.

    • @LinuxbyDmitry
      @LinuxbyDmitry 2 месяца назад

      @@Александр-у7м2у Давно это было, да и комментарию уже четыре года)). Я ответил с ссылкой, но похоже RUclips не пропускает).

  • @МаксКошевой-щ2б
    @МаксКошевой-щ2б 4 года назад +12

    а мне чет кажется rsync быстрее, сравни скорости в след видео, или это допиши)

  • @GrinRuslan
    @GrinRuslan 4 года назад +18

    не знал о такой штуке. до этого использовал только scp

  • @AlieXAndreX
    @AlieXAndreX Год назад

    Блин! Как охрененно, а я то думал как мне по быстрому передать виртуалку на другой сервак. Спасибо!

  • @VadimMolchanov
    @VadimMolchanov 4 года назад +2

    Класс, красивое использование утилит!

  • @КонстантинАнсимов
    @КонстантинАнсимов 5 лет назад +6

    Есть еще rclone (rclone.org/). Работает так же быстро и просто, есть поддержка шифрования (при желании), а также куча протоколов облачных хранилищ.

  • @DmitryLopatkov
    @DmitryLopatkov 4 года назад +2

    nc прикольно. есть ещё rcp, оно может копировать без шифрования (или для scp задать шифрование слабее дефолтного, чтобы меньше процессор грузить, в него обычно упирается скорость). А ещё можно на стороне источника взмахом пера поднять питонячий вебсервер (с корнем в каталоге где запускается команда, по умолчанию на порту 8000 и всех доступных интерфейсах, но можно задать если надо) и с него по http забрать любым удобным клиентом.
    python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')
    Serving HTTP on 0.0.0.0 port 8000 ...

  • @olegssh6452
    @olegssh6452 Год назад +1

    Подобные видео явно нуждаются в текстовой версии что бы удобнее было потом искать.

  • @nikolaysokolov9027
    @nikolaysokolov9027 5 лет назад

    Обалдеть). Только для трассировки http get/post использовал. Не знал, что можно файлы передавать по сети.

  • @oleg9ff
    @oleg9ff 4 года назад +1

    Благодарю за видео. netcat вообще швейцарский нож - мало чего из него сделать _нельзя_ 8)

  • @kprohorow
    @kprohorow 2 года назад +2

    Незаменимая вещь в спартанских условиях.
    Однажды я даже звук с микрофона одного компьютера netcat-ом передавал на другой комп.

  • @aleksandrdevelopment3321
    @aleksandrdevelopment3321 Год назад

    Очень крутые и действительно полезные видосы!

  • @cleverscript
    @cleverscript Год назад

    Супер спасибо!

  • @eugenstakhursky9604
    @eugenstakhursky9604 4 года назад

    Спасибо дружище, интересно, буду пробовать! С меня лайк и подписка)

  • @bessonov_mr
    @bessonov_mr 5 лет назад +1

    Спасибо, взял на вооружение)))

  • @markplay6466
    @markplay6466 5 лет назад +1

    Спасибо, мне пригодится, я не знал= )

  • @ВладимирГригорьевич-у2р

    за watch спасибо

  • @ntrl78
    @ntrl78 9 месяцев назад

    можно добавить команду pv в поток приемнику или передатчику, тогда будет виден прогресс. я бы в конце md5sum у файликов сравнил на всякий случай :)

  • @wMwPlay
    @wMwPlay 4 года назад +3

    rsync использую

  • @kosatchev
    @kosatchev 5 лет назад +1

    Ого! какое колдунство!

  • @touchdownscale
    @touchdownscale 4 года назад

    Cпасибо, очень помог!

  • @8scarsboy
    @8scarsboy 5 лет назад

    Вполне не плохо, в локальной сети на удалённых серверах хорошо файлы перекидывать

  • @GexPlayerMD
    @GexPlayerMD 4 года назад +5

    Про nc знал, про watch нет, каждый раз как дурак тыкал вверх и энтер =))

    • @t0digital
      @t0digital  4 года назад

      Watch крут:)!

    • @vitalyvlasenko5495
      @vitalyvlasenko5495 2 года назад +1

      Сорри за некропостинг, у меня алиас в .basrc с while : и sleep 1. Я гордился этим алиасом... ООО "Костыли и велосипеды": программируем, как умеем.

  • @SergeyChernetsky
    @SergeyChernetsky 3 года назад

    Крутяк 👍🏼

  • @pvinnie3827
    @pvinnie3827 Год назад

    у rsync есть преимущество он с ключем --progress показывает собственно прогресс копирования

    • @t0digital
      @t0digital  Год назад

      Можно показать прогресс и для nc с pv
      linuxhint.com/use-netcat-to-transfer-files/

  • @abyrva1g491
    @abyrva1g491 4 года назад

    Спасибо! Пользуюсь NFS для передачи если в одной сети.

  • @vasiliynet3425
    @vasiliynet3425 4 года назад +2

    Огонь! Как и в комментах ниже, тоже в основном через rsync льем. Мелочевку, так и вообще в mc по F5 удобней :)

  • @ДаниилЧайка-ч3в
    @ДаниилЧайка-ч3в 4 года назад

    Годно!))

  • @denisdragomirik
    @denisdragomirik 4 года назад

    Не знал. Учитывая, что скоро будем мигрировать сервис с файлами на пару десятков Гб, очень кстати

    • @t0digital
      @t0digital  4 года назад

      Отлично! Успешной миграции:)

    • @fensrg
      @fensrg 4 года назад

      Если файлов много воспользуйтесь лучше rsync'ом в таком случае вам не понадобится пространство под архив и не потребуется отдельно перекидывать множество файлов. Можно воспользоватся ssh выполнить команду создания tar архива только не в файл а в stdout и через pipe ловить либо в файл либо сразу распаковывать

  • @sashasashovic91
    @sashasashovic91 4 года назад

    Знал NC, но не знал про key q. Используйю scp безопасность и скорость есть.

  • @vinc9846
    @vinc9846 5 лет назад

    Все ж таки, логичнее на приемнике открывать порт на прослушивание (опция -l), а вот на ПК с файлом делать отправку в удаленный порт, т.е. команды наоборот.

    • @t0digital
      @t0digital  5 лет назад +2

      Да, тоже вариант. Но если надо выдернуть с сервера на локальный комп, не имеющий статического ip, то в него и не постучишься - вероятно, у нас это более частая задача была

    • @paulstrong1656
      @paulstrong1656 4 года назад

      Я пока что так и не понял, как это взлетело :) всегда делаем как раз наоборот, как пишет @dervish
      Я всегда этот способ понимал так: мы запускаем прослушку порта 8888, по идее чтобы туда данные по сети наливать, а потом с хоста где лежит файл - отправляем его в сокет.. а в текущем случаем мы слушает порт 8888 и сразу же туда наливаем файл, а как этот поток прилетает на клиентскую часть - я пока что мозг сломал) завтра посмотрю в strace, че там происходит

  • @ДанькаЛобанов-у6ю
    @ДанькаЛобанов-у6ю 5 лет назад +1

    знал о ней, но на принимающей стороне писал питоновский скрипт на сокетах для приёма файлов. Для копирования большого количества файлов вы что выберете. nc или rsync?

    • @t0digital
      @t0digital  5 лет назад +3

      Даа, питон+сокеты = love:) если размер диска на сервере позволяет и файлы хорошо жмутся, я бы pigz'ом их пожал (он для архивации использует все ядра) и потом перенес с nc. Если жать не хочется и файлов много, то объединить их в один с tar и тоже через nc выгрузить. Nc с tar в среднем может быть быстрее rsync до 5 раз, но rsync хорош именно для периодической синхронизации данных

  • @rabotavsem_biz
    @rabotavsem_biz Год назад

    какая разница в скорости передачи, если передавать через файл зиллу используя sftp ?

  • @fensrg
    @fensrg 4 года назад

    бинарщину большого размера недоводилось передавать а дампы сливал всегда так ssh host 'mysqldump dbname | gzip' > dbname_date.sql.gz ну или через пайп кинуть в gzip -d и потом либо в файл либо опять же через еще один пайп уже сразу в БД секьюрно быстро без создания промежуточных файлов.

    • @t0digital
      @t0digital  4 года назад

      Спасибо! Да, это выручает, когда места на сервере не хватает

  • @andrey_kapro
    @andrey_kapro 2 года назад

    использую rsync

  • @boson_higgs
    @boson_higgs Год назад

    Почему не rsync? По-моему главное удобно и скорость не уступает.

    • @t0digital
      @t0digital  Год назад

      Скорость уступает

  • @igorshlyakov9321
    @igorshlyakov9321 5 лет назад

    Круто! Спасибо большое, ща буду осваивать, а можно передавать из сервака на виндовс машину?

    • @t0digital
      @t0digital  5 лет назад

      Да, на виндоус тоже есть nc

    • @igorshlyakov9321
      @igorshlyakov9321 5 лет назад

      спасибо! нашел где можно вкурить подробнее:
      www.8host.com/blog/ispolzovanie-netcat-dlya-sozdaniya-i-testirovaniya-soedinenij-tcp-i-udp-na-vps/

  • @alexander199740
    @alexander199740 Год назад

    как ты разделил экран так на линуксе?)

  • @jeep456789
    @jeep456789 5 лет назад

    Очень круто, а в роутере получается тоже нужно порт пробрасывать ?

    • @t0digital
      @t0digital  5 лет назад +1

      Нет, если грузим с сервера на локал, то можно поступить по сценарию в видео (сервер отдает в свой порт данные, клиент забирает с него), если с локала на сервер, то можно на сервере открыть порт на получение, а с локала послать туда в этот порт данные с файлом

    • @jeep456789
      @jeep456789 5 лет назад

      @@t0digital понятно, спасибо

    • @antmixxx
      @antmixxx 4 года назад

      достаточно использовать IPv6 и забыть о пробросе портов совсем.

  • @alexxx4434
    @alexxx4434 4 года назад

    А ужать и зашифровать (каким нибудь пакером и передать по трубе) во время отправки нельзя?

    • @t0digital
      @t0digital  4 года назад

      сначала ужать и зашифровать, затем передать - можно. Делать это всё одновременно, думаю, тоже можно, но надо искать способ

  • @boonya41
    @boonya41 4 года назад

    Огнище! А я долбаюсь тут чтобы полтора ГБ через vpn прокси протянуть с помощью scp. Он то залипает, то еще что-то. Спасибо

    • @t0digital
      @t0digital  4 года назад

      Спасибо:)!

    • @boonya41
      @boonya41 4 года назад

      @@t0digital вчера стянул... Походу openvpn скорость душит. 470kbps максимум. Нужно какой-то p2p vpn придумать

  • @igorshlyakov9321
    @igorshlyakov9321 5 лет назад

    А у меня эта штука не работает на Shared хостинге timeweb. При указании порта пишет:
    grab 0.0.0.0:8888 with bind : Operation not permitted
    Что делать?

    • @fensrg
      @fensrg 4 года назад

      использовать ssh например так: ssh host 'mysqldump -uusername -ppassword dbname | gzip' | gzip -d > dbdump_date.sql

  • @ДмитрийР-г4у
    @ДмитрийР-г4у 4 года назад

    👍

  • @nizdiminov
    @nizdiminov 4 года назад

    Cool

  • @oleg-medovikov
    @oleg-medovikov 5 лет назад

    разве rsync медленнее копирует файлы?
    или я чего-то не понимаю

    • @t0digital
      @t0digital  5 лет назад

      netcat копирует файлы быстрее, чем rsync, до 5 раз moo.nac.uci.edu/~hjm/HOWTO_move_data.html#tarnetcat

    • @oleg-medovikov
      @oleg-medovikov 5 лет назад

      @@t0digital а я только с ним разобрался и алиасов понаписывал и скрипты для бекапов

    • @oleg-medovikov
      @oleg-medovikov 5 лет назад

      @@t0digital подписался

    • @t0digital
      @t0digital  5 лет назад +1

      @@oleg-medovikov спасибо за подписку! Rsync хорошая штука именно для синхронизации директорий/файлов, потому что умеет работать с diff'ами, то есть гонять по сети не полностью файл/все файлы, а разницу. Это очень круто для своих задач. Разовая выгрузка тяжеленного файла - другая задача. Ну или постоянные выгрузки, но именно разных файлов, не частично меняющихся, и тяжелых

    • @oleg-medovikov
      @oleg-medovikov 5 лет назад

      @@t0digital а ну тогда значит для моих задач нужен именно rsync

  • @oleksandrkachynskyi1013
    @oleksandrkachynskyi1013 4 года назад

    Привет, с одним большим файлом как правило проблем нету. У меня другая проблема, есть проект, в котором 1 000 000 ( условно, на самом деле сильно больше) файлов размером в пару килобайт. Задача перенести/склонировать на другой сервер, но архивировать не выйдет, потому что запас свободного места не позволит. Как быстро перенести все это добро ?

    • @t0digital
      @t0digital  4 года назад +1

      Ну а как - если в один файл каким-нибудь tar'ом места не хватит на сервере упаковать, то в любом случае надо переносить по одному или жать по несколько и переносить. Но по одному это не значит вручную - простой bash скрипт, например

    • @oleksandrkachynskyi1013
      @oleksandrkachynskyi1013 4 года назад

      @@t0digital Спасибо.

    • @1979BAAL
      @1979BAAL 4 года назад

      @@oleksandrkachynskyi1013 www.linux.org.ru/forum/general/7603723 tar, pipeline чтобы налету, утилита отправки

    • @oleksandrkachynskyi1013
      @oleksandrkachynskyi1013 4 года назад

      Нашел для себя оптимальное решение. Дано: 40 млн мелких файлов. Основная проблема не с копированием, а построением списка файлов. лучший результат показал rsync -avzhe ssh user@ip:/folder/to/copy/ /folder/destination/ (синхронизировать удаленную папку с локальной) У меня вышло 36-50 mb/sec. Можно еще выжать скорости если делать это не через ssh а настроить rsync сервер. Пробовал так же вариант с архивами в пайп, много нагрузки на ЦПУ, так как там рабочий проект, то это плохо.

  • @AndreyChursin
    @AndreyChursin 4 года назад

    Wget не сделает тоже самое(скачает файл)?

    • @t0digital
      @t0digital  4 года назад

      сделает, но медленнее

    • @fensrg
      @fensrg 4 года назад

      @@t0digital на сколько медленее? учитывая что до сервака от клиента идет не оптика и потери на шифрование через scp и оверхед на http мелочи и сильно на скорость передачи не повлияют.

    • @t0digital
      @t0digital  4 года назад

      @@fensrg попробуйте. Оверхед огого:) сеть 100 мбит хотя бы есть наверняка, а это 12.5 метров в сек, почти гиг в минуту

    • @fensrg
      @fensrg 4 года назад

      @@t0digital я немного удивлен результатом... nc оказался всего на 25% быстрее. За то ssh оказался на целых 83% быстрее O_o возможно сказалась передача по локалхост... но ssh это же не мускуль который ломится на файловый сокет если у него в конфиге прописан localhost или 127.0.0.1 забавный момент надо еще потестить

  • @NarkotikAsd
    @NarkotikAsd 4 года назад

    пароль в зипе и не открытый будет

  • @АртемЗайцев-с2д
    @АртемЗайцев-с2д 4 года назад

    ssh?

    • @t0digital
      @t0digital  4 года назад

      Что ssh?

    • @АртемЗайцев-с2д
      @АртемЗайцев-с2д 4 года назад

      @@t0digital не так услышал, всё хорошо) спасибо за видео)

    • @sashasashovic91
      @sashasashovic91 4 года назад

      scp на основе ssh для передачи байтов

  • @samrybkin9184
    @samrybkin9184 4 года назад

    Не знал о такой штуки ты подвидео оставляей команды из урока удобно потом к ним возвращаться если можно конечно. Хотел уточнить к примеру мой ip такой как указан ниже то я просто захожу на сервер и пишу так nc 172.178.132.144 > db.sql и скачиваю себе на сервер правильно? И почему в примере файл db-2019-01-15__16-16-47.sql название такое, но при скачивании указано db.sql?

    • @ge_bassist8232
      @ge_bassist8232 4 года назад +1

      идёт передача файла (сюрприз) пакетами, т.е. по частям. имя файла на принимающем сервере не имеет никакого значения. Просто содержимое db-2019-01-15__16-16-47.sql по частям записывается в новый файл. Если проводить аналогию из реальной жизни, то это как переливать воду из зелёного стакана в прозрачный, суть от цвета стакана не меняется.

  • @denwerxampp4035
    @denwerxampp4035 5 лет назад

    +

  • @ВиталийТуров-э3б
    @ВиталийТуров-э3б 4 года назад

    Добрый день. А что у тебя за книга на столе?

    • @t0digital
      @t0digital  4 года назад

      Добрый день! "Python. К вершинам мастерства"

    • @sergeyf7459
      @sergeyf7459 4 года назад

      @@t0digital и как книга, стоит почитать?

    • @t0digital
      @t0digital  4 года назад +1

      @@sergeyf7459 да, она хороша

  • @vladimirkudiyarov2936
    @vladimirkudiyarov2936 2 года назад

    а "scp" уже не канает? и только на одной стороне команду давать надо. я сотни гигов без проблем по шурику копирую

    • @t0digital
      @t0digital  2 года назад

      Медленнее. Если устраивает - ок

    • @vladimirkudiyarov2936
      @vladimirkudiyarov2936 2 года назад

      @@t0digital хм... С чего бы? По гигабитной сетке 110-115MB/s

    • @t0digital
      @t0digital  2 года назад

      @@vladimirkudiyarov2936 с чего бы инструмент, имеющий меньше оверхеда, работает эффективнее? Ну так вот все устроено в жизни)

    • @vladimirkudiyarov2936
      @vladimirkudiyarov2936 2 года назад

      @@t0digital По теории всё верно говорите, но на практике-то скорость копирования равна пропускной скорости канала без накладных расходов. Плюс копирование групп файлов и вложенных директорий. Попробуйте - не пожалеете! Вариант с "nc" не отвергаю - пойдёт для развития и разнообразия ))

    • @t0digital
      @t0digital  2 года назад

      @@vladimirkudiyarov2936 скорость копирования никогда не равна скорости канала

  • @cleverscript
    @cleverscript Год назад

    а как потом закрыть этот файл на удаленном сервере после того как он скачался уже?

    • @t0digital
      @t0digital  Год назад

      Ctrl+c для закрытия открытого в сессии nc вроде как

    • @cleverscript
      @cleverscript Год назад

      то есть просто закрыть nc?@@t0digital

  • @rsenmakh
    @rsenmakh 4 года назад

    Всегда использую SCP. А почему передавали в nc файл db-2019.......sql, а скачивали db.sql ?

    • @t0digital
      @t0digital  4 года назад +1

      потому что мы можем указать любое имя файла при его сохранении

  • @Владислав-и3б9н
    @Владислав-и3б9н 4 года назад

    Коротко и полезно )