Linux копирование больших файлов по сети

Обновлено: 06.07.2024

Этичный хакинг и тестирование на проникновение, информационная безопасность

Оглавление

Копирование с удалённого компьютера и на удалённый компьютер (scp и sftp)

Пакет OpenSSH также включает две программы, которые используют зашифрованный туннель SSH для копирования файлов по сети. Первая программа — scp («безопасное копирование») похожа на программу cp для копирования файлов.

Вторая программа для копирования файлов через SSH — это sftp. Как следует из её имени, она является безопасным заменителем ftp программ. sftp работает как и оригинальная ftp программа. Тем не менее вместо отправки данных в виде простого текста, она использует зашифрованный туннель SSH. Важным преимуществом sftp перед ftp является то, что для неё не требуется запущенный FTP сервер на удалённом хосте. Для неё требуется только SSH сервер. Это означает, что любая удалённая машина, на которой запущен SSH сервер, может также быть использована как FTP-подобный сервер.

Итак, обе команды:

  • работают через SSH соединения
  • передают данные по зашифрованным каналам
  • не требуют специального сервера или программ на удалённой машине кроме SSH сервера
  • используют все возможности SSH, например, аутентификацию по публичному ключу и сжатие передаваемых данных
  • scp не работает в интерактивном режиме, а sftp умеет работать в интерактивном режиме и в автоматическом
  • в интерактивном режиме sftp поддерживает синтаксис FTP команд для различных действий в файловой системе (копирование и перемещение файлов, создание и удаление файлов и папок и т.д.)
  • sftp умеет дописывать частично переданные файлы, если произошёл обрыв при передаче большого файла (настраивается опцией)
  • sftp поддерживает пакетный режим — файлы, в которых последовательность действий определена последовательностью команд sftp
  • популярные файловые менеджеры понимают протокол sftp и могут интегрироваться с этой командой — подробности ниже
  • при рекурсивном скачивании или закачивании папок, по умолчанию scp следует по символическим ссылкам, а sftp — нет

Как пользоваться утилитой scp

Утилита scp очень схожа с программой cp, которая копирует файлы в пределах локального компьютера. Важно понять ключевую суть синтаксиса scp:

То есть всего имеется три элемента в команде. В качестве ИСХОДНОГО-ФАЙЛА может быть как файл на локальной системе, так и на удалённой. Аналогично, в качестве ПУНКТА-НАЗНАЧЕНИЯ может быть как файл на локальной системе, так и на удалённой.

Путь до локального файла указывается обычным способом — точно также, как и с программой cp.

Что касается файла на удалённой системе, то он может быть указан так:

Или в виде URI в форме:

Следовательно, если мы копируем файл с удалённой системы на локальную, общий вид команды такой:

В качестве ./ПУТЬ/В/ЛОКАЛЬНОЙ/СИСТЕМЕ можно указать просто . (точку) и тогда файл будет скопирован с текущим именем в текущий рабочий каталог.

Если мы копируем файл с локальной системы на удалённую, общий вид команды такой:

Синтаксис обращения к удалённому хосту схож с SSH: ПОЛЬЗОВАТЕЛЬ@ХОСТ, отличие только в том, что после двоеточия указывается путь до файла (или просто имя файла). При использовании URI, после двоеточия указывается порт (если он отличается от стандартного), а путь до файла указывается после слэша.

Рассмотрим пример выполнения команды на удалённой системы и скачаем этот файл на локальную систему:


В scp команде ИСХОДНЫЙ-ФАЙЛ обозначен как root@192.168.1.68:dirlist.txt — здесь до двоеточия идёт имя пользователя на удалённой системе и адрес хоста — та информация, которая необходима для подключения по SSH. Затем двоеточием отделён файл, который должен быть скачен.

ПУНКТ-НАЗНАЧЕНИЯ в этой команде обозначен как . (точка) — что означает текущую рабочую директорию (в локальной системе).

Теперь рассмотрим пример копирования файла с локальной машины на удалённую:


В команде отправки scp:

  • nfile.txt — имя файла,
  • root@192.168.1.68 — имя пользователя и удалённый хост (как в команде подключения по SSH),
  • . (точка) означает, что файл нужно скопировать в текущую рабочую директорию на удалённом сервере, при этом имя файла останется прежним, т. е. nfile.txt

Как скопировать файл с одного удалённого хоста на другой удалённый хост

Программа scp умеет копировать между двумя удалёнными хостами. Если используется URI формат, порт можно указать только для цели если используется опция -3.

По умолчанию данные копируются напрямую между двумя удалёнными хостами. Если указать опцию -3, то данные между двумя хостами будут переданы через локальный хост. Эта опция отключает шкалу прогресса.

Как выгрузить на сервер или скачать с сервера папку

Для рекурсивного копирования целых директорий используется опция -r. Помните, что scp следует по символическим ссылкам, встречающимся при обходе дерева каталогов.

Как указать порт для scp

Указать другой порт, отличный от стандартного 22, можно с помощью опции -P ПОРТ. Обратите внимание, что эта опция написана заглавной ‘P’, поскольку -p уже занята для другой настройки (сохраняет время и режимы файла).

Как использовать другой файл настройки для scp и как указать файл ключей аутентификации

Программа scp работает вместе с ssh, то есть подключение происходит с помощью ssh и применяются все настройки этой программы. У ssh есть свои настройки по умолчанию, а также она считывает информацию из своих конфигурационных файлов. При желании, можно указать другой файл для использования, это делается опцией -F — она задаёт альтернативный конфигурационный файл пользователя для ssh. Эта опция напрямую передаётся в ssh.

Если настроен вход без пароля (по ключу), то программа ssh считывает приватный ключ в соответствии со своими настройками или из пути по умолчанию. С помощью опции -i можно выбрать другой файл с идентификатором (приватный ключ) для аутентификации по публичному ключу на сервере. Эта опция также напрямую передаётся в ssh.

Как ограничить скорость передачи данных в scp

По умолчанию передача файла происходит на максимально возможной скорости. Если по каким-то причинам нужно уменьшить лимит скорости, то используйте опцию -l, после которой укажите значение в Kbit/s.

Как сохранить метки времени при передаче по scp

С помощью опции -p (не путайте её с опцией -P, которая изменяет порт подключения) можно сохранить время модификации, время последнего доступа к файлу и режимы оригинального файла. Дополнительно о метках времени смотрите в статье «Время создания, доступа и изменения файла: что это, как их узнать и изменить. Как найти файлы по их времени создания, изменения или последнему открытию».

Отключение строгой проверки имён файлов

Опция -T отключает строгую проверку имени файла. По умолчанию при копировании файлов с удалённого хоста в локальный каталог scp проверяет, соответствуют ли полученные имена файлов тем, которые запрашиваются в командной строке, чтобы предотвратить отправку удаленным хостом неожиданных или нежелательных файлов. Из-за различий в том, как различные операционные системы и оболочки интерпретируют подстановочные символы имени файла, эти проверки могут привести к отклонению нужных файлов. Эта опция отключает эти проверки за счёт полного доверия, что сервер не будет отправлять неожиданные имена файлов.

Тихий режим

Как пользоваться sftp

Адресат может быть указан как [ПОЛЬЗОВАТЕЛЬ@]ХОСТ[:ПУТЬ] или как URI в форме sftp://[ПОЛЬЗОВАТЕЛЬ@]ХОСТ[:ПОРТ][/ПУТЬ]

Если место назначения содержит ПУТЬ, который не является каталогом, sftp автоматически получит файлы, если используется неинтерактивный метод аутентификации; в противном случае это будет сделано после успешной интерактивной аутентификации.

Если путь не указан или путь является каталогом, sftp войдёт в систему на указанном хосте и перейдёт в интерактивный командный режим, зайдя в удалённый каталог, если он был указан. Дополнительная конечная косая черта может использоваться, чтобы принудительно интерпретировать путь как каталог.

Вот пример сессии:


Интерактивные команды sftp

При входе в интерактивный режим, sftp понимает набор команд, схожих с командами для ftp(1). Команды не чувствительны к регистру. Пути и имена файлов, которые содержат пробелы, должны быть заключены в кавычки.

Любые специальные символы, содержащиеся внутри имён путей, которые распознаются в glob(3), должны быть экранированы обратным слэшом (‘\’).

bye

cd [ПУТЬ]

Изменить удалённую директорию на ПУТЬ. Если ПУТЬ не указан, то директория будет сменена на ту, с которой началась текущая сессия.

chgrp [-h] ГРУППА ПУТЬ

Изменить группу файлов ПУТЬ на ГРУППА. Если указан флаг -h, тогда не будет производиться переход по символическим ссылкам. Пути могут содержать подстановочные символы (glob) и могут соответствовать нескольким файлам. ГРУППА должна быть числовым GID.

chmod [-h] РЕЖИМ ПУТЬ

Изменить права доступа ПУТЬ на РЕЖИМ. Если указан флаг -h, то не будет производиться переход по символическим ссылкам, пути могут содержать подстановочные символы (glob) и могут совпадать с несколькими файлами.

chown [-h] ВЛАДЕЛЕЦ ПУТЬ

Изменяет владельца файла ПУТЬ на ВЛАДЕЛЕЦ. Если указан флаг -h, то не будет производиться переход по символическим ссылкам, пути могут содержать подстановочные символы (glob) и могут совпадать с несколькими файлами. ВЛАДЕЛЕЦ должен быть указан цифровым UID.

df [-hi] [path]

exit

get [-afPpr] УДАЛЁННЫЙ-ПУТЬ [ЛОКАЛЬНЫЙ-ПУТЬ]

Получает УДАЛЁННЫЙ-ПУТЬ и сохраняет этот файл на локальной машине. Если имя ЛОКАЛЬНЫЙ-ПУТЬ не указано, то файлу сохраняется его прежнее имя, которое он имел на удалённой машине. УДАЛЁННЫЙ-ПУТЬ может содержать подстановочные символы (glob) и может совпадать с несколькими файлами. Если это так и указан ЛОКАЛЬНЫЙ-ПУТЬ, то ЛОКАЛЬНЫЙ-ПУТЬ должен быть директорией.

Если указан флаг -a, тогда делается попытка докачать существующие частично переданные файлы. Помните, что возобновление подразумевает, что любая частичная копия локального файла соответствует удалённой копии. Если удалённый файл содержит отличия от частичной локальной копии, то результирующий файл вероятно будет повреждён.

Если указан флаг -f, тогда после завершения передачи файла будет вызвана fsync(2) для записи файла на диск (flush the file to disk) — имеется ввиду, что файл не просто будет помещён в кэш и поставлен в очередь на запись, а действительно в этот момент будет записан на физический диск.

Если указан флаг -P или флаг -p, тогда также полностью будут скопированы права доступа к файлу и метки времени.

Если указан флаг -r, тогда директории будут скопированы рекурсивно. Обратите внимание, что sftp не следует по символическим ссылкам, когда выполняет рекурсивную передачу файлов.

help

Показывает текст помощи по использованию программой.

lcd [ПУТЬ]

Меняет рабочую директорию на локальной машине (а не на удалённой!) на ПУТЬ. Если ПУТЬ не указан, то меняет директорию на домашнюю папку локального пользователя.

lls [ОПЦИИ-ls [ПУТЬ]]

Показывает листинг локальной директории указанную как ПУТЬ или текущей рабочей директории, если ПУТЬ не указан. ОПЦИИ-ls могут содержать любые флаги, которые поддерживаются командой ls на локальной системе. ПУТЬ может содержать подстановочные символы (glob) и может соответствовать нескольким файлам.

lmkdir ПУТЬ

Создаёт директорию ПУТЬ на локальной системе.

ln [-s] СТАРЫЙ-ПУТЬ НОВЫЙ-ПУТЬ

Создаёт ссылку из СТАРЫЙ-ПУТЬ в НОВЫЙ-ПУТЬ. Если указан флаг -s, создаваемая ссылка будет символической, в противном случае будет жёсткой ссылкой.

lpwd

Печатает текущую рабочую директорию на локальной машине.

ls [-1afhlnrSt] [ПУТЬ]

Показывает список файлов удалённой директории указанного ПУТИ или текущей директории, если ПУТЬ не установлен. ПУТЬ может содержать подстановочные символы (glob) и может совпадать с несколькими файлами.

Следующие флаги распознаются командой ls и соответственно меняют её поведение:

-1

Информация выводится в один столбик.

-a

Добавляет в список файлы, которые начинаются на точку (‘.’).

-f

Не сортировать список. По умолчанию используется лексикографический порядок сортировки.

-h

Когда используется с опцией длинного формата, использует суффиксы единиц: Байт, Килобайт, Мегабайт, Гигабайт, Терабайт, Петабайт и Эксабайт чтобы уменьшить количество цифр до четырёх или менее, используя ступени 2 для размеров (K=1024, M=1048576 и т.д.).

-l

Показывает дополнительные подробности, включая информацию о разрешениях и владельце.

-n

Создаёт длинный список с информацией о пользователях и группах в числовом формате.

-r

Обратный порядок сортировки списка.

-S

Сортирует список по размеру файла.

-t

Сортирует список по времени последней модификации.

lumask umask

Устанавливает локальную umask на umask.

mkdir ПУТЬ

Создаёт удалённую директорию, определённую как ПУТЬ.

progress

Переключает отображение индикатора прогресса.

put [-afPpr] ЛОКАЛЬНЫЙ-ПУТЬ [УДАЛЁННЫЙ-ПУТЬ]

Выгружает ЛОКАЛЬНЫЙ-ПУТЬ сохраняет на удалённой машине. Если имя УДАЛЁННЫЙ-ПУТЬ не указано, то файлам даётся такое же имя, как и на локальной машине. ЛОКАЛЬНЫЙ-ПУТЬ может содержать подстановочные символы (glob) и может совпадать с несколькими файлами. Если это так и указан УДАЛЁННЫЙ-ПУТЬ, то УДАЛЁННЫЙ-ПУТЬ должен быть директорией.

Если указан флаг -a, тогда делается попытка выгрузить существующие частично переданные файлы. Помните, что возобновление подразумевает, что любая частичная копия локального файла соответствует удалённой копии. Если удалённый файл содержит отличия от частичной локальной копии, то результирующий файл вероятно будет повреждён.

Если указан флаг -P или флаг -p, тогда также полностью будут скопированы права доступа к файлу и метки времени.

Если указан флаг -r, тогда директории будут скопированы рекурсивно. Обратите внимание, что sftp не следует по символическим ссылкам, когда выполняет рекурсивную передачу файлов.

pwd

Показать удалённую рабочую директорию.

quit

reget [-Ppr] УДАЛЁННЫЙ-ПУТЬ [ЛОКАЛЬНЫЙ-ПУТЬ]

Возобновить загрузку УДАЛЁННЫЙ-ПУТЬ. Эквивалент команды get с установленным флагом -a.

reput [-Ppr] [ЛОКАЛЬНЫЙ-ПУТЬ] УДАЛЁННЫЙ-ПУТЬ

Возобновить выгрузку [ЛОКАЛЬНЫЙ-ПУТЬ]. Эквивалент команды put с установленным флагом -a.

rename СТАРЫЙ-ПУТЬ НОВЫЙ-ПУТЬ

Переименовать удалённый файл со СТАРЫЙ-ПУТЬ на НОВЫЙ-ПУТЬ.

rm ПУТЬ

Удалить удалённый файл указанный как ПУТЬ.

rmdir ПУТЬ

Удалить удалённую директорию указанную как ПУТЬ.

symlink СТАРЫЙ-ПУТЬ НОВЫЙ-ПУТЬ

Создать символическую ссылку из СТАРЫЙ-ПУТЬ в НОВЫЙ-ПУТЬ.

version

Показать версию sftp протокола.

!КОМАНДА

Выполнить КОМАНДУ в локальном шелле.

Символ экранирования для передачи в локальную оболочку.

Синоним для help.

Опции sftp

Следующие опции указываются в строке команды запуска клиента sftp. Они оказывают влияние как на запущенный sftp в интерактивной сессии, так и без интерактивного режима.

-a

Выполняется попытка продолжить прерванные передачи, а не перезаписать существующие частичные или завершённые копирования файлов. Если частичный контент отличается от того, который будет передаваться, то результирующие файлы скорее всего будут повреждены.

-B РАЗМЕР_БУФЕРА

Устанавливает размер буфера, который использует sftp при передаче файлов. Большие буферы требуют меньше циклов обработки за счёт более высокого потребления памяти. Значение по умолчанию равно 32768 байтам.

-b ПАКЕТНЫЙ_ФАЙЛ

В пакетном режиме считывается серия команд из введённого пакетного файла, а не из стандартного ввода. Поскольку здесь отсутствует взаимодействие с пользователем, этот режим должен использоваться с неинтерактивной аутентификацией, чтобы избежать необходимость ввода пароля во время подключения.

ПАКЕТНЫЙ_ФАЙЛ в виде ‘-’ может использоваться для обозначения стандартного ввода. Работа sftp будет прекращена, если какая-либо из следующих команд потерпит неудачу: get, put, reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink и lmkdir.

Завершение в случае ошибки может быть подавлено для каждой команды в отдельности путём добавления к команде префикса с символом «-» (например, -rm /tmp/blah*). Вывод команд может быть подавлен, если перед ней поставить символ ‘@’. Эти два префикса могут сочетаться в любом порядке, например, -@ls /bsd.

-C

Включить сжатие (через флаг -C в ssh).

-D sftp_server_path

Подключиться напрямую к локальному sftp серверу (а не через ssh). Эта опция может быть полезной при отладке клиента и сервера.

-F КОНФИГУРАЦИЯ_SSH

Указывает альтернативный пользовательский конфигурационный файл для ssh. Эта опция напрямую отправляется в ssh.

-f

-i ФАЙЛ_ИДЕНТИФИКАЦИИ

Выбирает файл, из которого читается идентификатор (закрытый ключ) для аутентификации с открытым ключом. Эта опция напрямую передаётся в ssh.

-l ЛИМИТ

Ограничивает используемую пропускную способность, указанную в Кбит/с.

-P ПОРТ

Указывает порт для подключения на удаленном хосте.

-p

Сохраняет время модификации, время доступа и режимы из исходных переданных файлов.

-q

-R КОЛИЧЕСТВО_ЗАПРОСОВ

Указывает количество максимальных ожидающих запросов. Увеличение этого значения может немного улучшить скорость передачи файлов, но увеличит использование памяти. По умолчанию 64 невыполненных запроса.

-r

Рекурсивно копировать целые каталоги при загрузке и скачивании. Обратите внимание, что sftp не следует по символическим ссылкам, встречающимся в обходе дерева.

-v

Поднимите уровень вербальности. Эта опция также передаётся в ssh.

Графический интерфейс SFTP

SCP и SFTP являются не только утилитами, но и протоколами. То есть другие программы могут поддерживать работу с ними и использоваться в качестве удобного графического интерфейса. Благодаря этому вы сможете управлять файлами на сервере, например, через FileZilla или привычные файловые менеджеры. Подробности смотрите в статье «Как скачивать файлы по SSH».

Мне, как владельцу персонального компьютера и ноутбука часто приходится передавать файлы с одного устройства на другое. Внешние жесткие диски и флешки использовать не всегда удобно, они актуальны для больших файлов, где важна скорость записи, а вот для маленьких файлов и документов хочется чего-нибудь попроще.

Если оба устройства подсоединены к одной сети идеальным вариантом будет передача файлов по сети linux. Здесь мы получаем большую скорость, и удобство использования - не нужно искать флешку или USB провод, достаточно прозрачно скопировать файл в нужную папку и он уже на целевом устройстве. Сегодня мы рассмотрим основные способы передачи файлов по сети между компьютерами.

Передача файлов по сети Linux

1. Утилита nc

Этот способ отлично подойдет, если вам нужно передать один или несколько файлов и вы не хотите устанавливать никаких новых программ в систему. Утилита nc или netcat позволяет создавать tcp и unix сокеты в системе. По сути, это туннели, через которые мы можем передать любые данные, в том числе и файлы.

Утилита уже предустановлена, так что ничего дополнительно ставить не придется, нужно только знать IP адреса компьютеров в сети. Сначала создаем слушающий сокет на компьютере, все поступившие на него данные сразу пишем в файл:

nc -l -p 12345 > newfile

Здесь опция -p задает порт, можно брать привольное значение, только чтобы совпадало в обоих командах. Теперь отправляем файл из другого компьютера:

cat file | nc 192.168.0.101 12345

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

Мы можем передавать не только файлы, но и папки. Передача может быть выполнена в обоих направлениях, теперь отправим не на сокет, и от сокета:

tar -cf - /data | nc -l -p 12345

И принимаем отравленные данные на другом компьютере:

nc 192.168.1.2 12345 | tar -xf -

2. Передача файлов ssh

Передача файлов по ssh Linux - это самый быстрый и удобный способ обмена файлами. Достаточно, чтобы на компьютере была запущена служба SSH и у вас был к ней доступ. Затем с помощью утилиты scp туда можно передать любой, файл, это быстро и удобно, а ещё вы можете выбрать папку, в которую его надо сохранить. Допустим, вам надо передать файл с именем

/file.txt на компьютер с IP адресом 192.168.0.101, тогда используйте такую команду:


Утилита загрузит файл прямо в домашнюю папку на удалённом компьютере и вы сможете выполнять с ним действия по SSH. Если надо передать все файлы из папки можно использовать опцию -r:

Читайте более подробно про утилиту scp в отдельной статье.

3. Передача файлов по FTP

Не очень удобный и очень медленный способ передачи файлов по сети. Хорошо работает для больших файлов, но большое количество мелких файлов будут передаваться очень долго. На одном компьютере должен быть развернут FTP сервер, а на другом можно использовать графический FTP клиент FileZilla для подключения и передачи файлов.

4. Как передать файл в rsync

Утилита rsync тоже использует для передачи файлов SSH, однако она позволяет передавать целые папки, а также следить за состоянием файлов и если на удалённом компьютере такой файл уже есть, то он передаваться не будет. Таким образом можно копировать только измененные файлы и удобно передавать целые папки. Для примера возьмем тот же компьютер 192.168.0.101 и папку


Мы записываем все файлы из папки

/files в папку /home/root, а также получаем возможность синхронизировать их. Подробнее про rsync читайте в отдельной статье.

5. Сервер NFS

Ещё один способ передачи файлов между Linux серверами - это NFS. На одном из серверов разворачивается NFS сервер, а на другом, монтируется удаленная NFS папка в обычную файловую систему, после чего она становится частью файловой системы Linux и туда уже можно копировать файлы так, как будто это на той же машине. Просто и удобно, но надо настраивать NFS и ещё один минус по сравнению с FTP, у NFS нет возможности настроить простую авторизацию по паролю, можно ограничить монтирование только по IP адресу что не всегда удобно.

6. Сервер Samba

Передавать файлы в Windows на Linux и обратно может помочь удалённый доступ с помощью Samba сервера. Если развернуть сервер Samba на Linux машине, то к нему можно будет подключится из Windows и видеть все файлы в общей папке. Samba - не очень хорошее решение, так как могут возникнуть проблемы с файлами больше 1 Гб, передающимися очень долго, но для обмена файлами между Windows и Linux довольно неплохое решение, тем более, что обмен файлами выполняется через стандартный файловый менеджер.

7. KDE-Connect

Для обмена файлами между компьютером Linux и Android можно использовать программу KDE-Connect. У неё есть приложение для Android, она встроена в окружение KDE, а для Gnome есть расширение GSConnect. Утилита позволяет передавать файлы на компьютер прямо с телефона, а также монтировать общую папку, в которую можно скидывать как файлы на компьютере, так и файлы на телефоне. Очень удобно. Читайте подробнее в статье про настройку KDE-Connect.


Выводы

Вы можете спросить, а какой же способ мне использовать? Ответ зависит от ваших потребностей, если вам нужен только передать один файл раз в месяц, может решением станет scp или FTP, а для регулярной передачи файлов по сети Linux удобнее использовать rsync, к тому же с помощью этой утилиты можно запланировать автоматическую синхронизацию. А какими способами пользуетесь вы? Напишите в комментариях!

Есть папка. В ней 160 гиг мелкого 1-2 килобайтного файла + немереянно вложенных папок.

Нада скопировать на другой сервер. Быстро.

Подмонтировал на сервер с файлом папку с пустого сервера через нфс.

В восемь вечера пустил в скрине копировать. В семь утра зашел - копирует до сих пор.

Есть варианты как можно быстро скопировать?

Через ssh: там, откуда копировать, запускаем gzip и передачу файлов через трубу, там, куда копировать, раззиповываем.

А вообще, странно, что так медленно.


По сети? 160 гигов? Ну сутки будет копировать, мб больше. Хочешь быстро - езжай к удаленному компу, выдергивай винт и тащи его к себе.

что значит через gzip? на файловом серваке запаковать и перелить на пустой файл?

200 гиг мускульных дампов по гигу - перелились по сети за шесть часов.

это для примера.

хотят тут наверно долго изза мелкого размера файла


Чего тут странного, если

160 гиг мелкого 1-2 килобайтного файла

На файл-сервере запаковываете, но выхлоп gzip'а идет не в файл, а по ssh туда, куда надо это скопировать. Там, соответственно, на выходе трубы распаковывается. Недостаток: если сеть накроется, придется все копировать снова.

пример можете показать? а что если чесно не понимаю как это сделать.

Ты упоротый? Я тебе уже говорил копируй на уровне блочного устройства (drbd) или lvm-snapshot + ssh + dd или (лоровские задроты считают что LVM-ненужен) делай dd + ssh + fsck

поднимать drbd ради одного копирований?

1. lvm-snapshot --> dd | ssh dd

2. нет LVM --> dd | ssh dd; fsck

Ему не нужно копировать раздел целиком. Да и от этого есть смысл, лишь в случае, когда раздел почти полностью забит. А во всех остальных случаях лучше всего - tar over ssh.


Насколько мне известно, nfs работает через udp, то есть у тебя нет гарантии что все файлы доехали корректно. На сеть другой нагрузки в это время не было?

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

Гарантия есть: либо файлы доехали корректно, либо не доехали.


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

Ему не нужно копировать раздел целиком.

В случае с мелкими файлами копирование раздела целиком может оказаться быстрее копирования всех файлов по отдельности. Чтобы не копировать незанятые места раздела, можно вместо dd использовать partclone или partimage. Но проделывать такие фокусы нужно с отмонтированным разделом, иначе ФС может перенестись битой.

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

Команда cp об этом узнает от соответствующего системного вызова, системный вызов от VFS, VFS от драйвера NFS, а драйвер NFS узнает о потере из пропущенных номеров пакетов или неправильной контрольной суммы (я не знаю точно какой именно там способ, но он однозначно есть).

А ты сначала подумай сколько времени займет просто прочитать с диска

150.000.000 метаданных файлов, а потом и сами файлы — время копирования по сети можно будет не учитывать.


Уже пару-тройку лет по умолчанию nfs в линуксе через tcp.

А так, udp пакет имеет аналогичную tcp контрольную сумму, а повторную передачу пакетов организовывал уже сам nfs. Не помню, чтобы у меня были проблемы с передачей файлов по nfs по udp по 10 Мбит коксиальному кабелю.


>Быстро перенести

libastral.so, быстро, решительно.


Плюсую за dd, ему пофиг на фс, будет копировать одним потоком.

лоровские задроты считают что LVM-ненужен

Неправда, LVM нужен! :)

>Быстро перенести(скопировать) мегадиректорию

Камаз болванок же! Терабайты в секунду.


Сеть то хотя бы гигабитная?

А вобще, ИМХО, такой объем по сети лучше копировать кусками, чтобы с случае обрыва связи знать какие куски перекопировать заново, например, запускать отдельно последовательно копирование по каталогам верхнего уровня. И сначала проверить скорость nfs копированием достаточно большого файла (

Кстати, LVM-снапшот можно как то копировать кусками?

> Кстати, LVM-снапшот можно как то копировать кусками?

> Если при передаче одного файла в середине было потеряно несколько

Я пытаюсь скопировать 75-гигабайтный tgz (снимок mysql lvm) с сервера Linux в нашем центре обработки данных в Лос-Анджелесе на другой сервер Linux в нашем центре обработки данных в Нью-Йорке по каналу связи 10 МБ.

Я получаю около 20-30 Кбит / с с rsync или scp, который колеблется между 200-300 часами.

На данный момент это относительно тихая ссылка, так как второй центр обработки данных еще не активен, и я получил отличную скорость от небольшой передачи файлов.

Я следовал различным руководствам по настройке tcp, которые нашел через google, но безрезультатно (может, я читаю не те руководства, есть хорошие?).

Я видел туннельный наконечник tar + netcat, но, насколько я понимаю, он полезен только для МНОЖЕСТВА небольших файлов и не обновляет вас, когда передача файла завершена.

Прежде чем я прибегну к отправке жесткого диска, есть ли у кого-нибудь хороший вход?

ОБНОВЛЕНИЕ: Ну . это может быть ссылка в конце концов :( Смотрите мои тесты ниже .

Трансферы из Нью-Йорка в Лос-Анджелес:

Получение пустого файла.

Получение снимка тарбола.

Трансферы из Лос-Анджелеса в Нью-Йорк:

Получение пустого файла.

Получение снимка тарбола.

Я полагаю, что я подберусь с людьми, которые управляют нашими объектами, канал помечен как канал MPLS / Ethernet 10 МБ. (Развести руки)

Просто комментарий, я недавно получил релиз от поставщика программного обеспечения на Seagate FreeAgent (USB-диск), который был около 50 Гбайт. Компания, о которой идет речь, действительно присутствовала в Интернете и обычно просила клиентов просто загрузить их со своего сайта. Думал, что это было интересное решение и думал, что это может добавить некоторую информацию, чтобы помочь в вашем решении. Да, теперь я просто растерялся и разочарован. Я разделил его на куски по 50 Мб, и он все еще идет медленно! Но при пересылке других данных получается 500kb / s . должно быть, что-то ужасно не так, как я скучаю . Проверьте ваш трафик с tcpdump . Это может помочь вам выяснить, что замедляет передачу.

Sneakernet Кто-нибудь?

Предполагая, что это однократная копия, я не предполагаю, что можно просто скопировать файл на компакт-диск (или другой носитель) и перенести его в место назначения в течение ночи?

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

Rsync

Моим вторым выбором / попыткой будет rsync, поскольку он обнаруживает неудачные передачи, частичные передачи и т. Д. И может принимать их с того места, где остановился.

Флаг --progress даст вам некоторую обратную связь, вместо того, чтобы просто сидеть и позволять себе догадываться. :-)

Вузе (битторрент)

Третий вариант, вероятно, состоит в том, чтобы попытаться использовать Vuze в качестве торрент-сервера, а затем попросить удаленное местоположение использовать стандартный битторрент-клиент для его загрузки. Я знаю других, которые сделали это, но вы знаете . к тому времени, когда они все это настроили и т. Д. . я мог бы не заметить данные .

Зависит от вашей ситуации, я думаю.

ОБНОВИТЬ:

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

+1, хотя, вероятно, не выгодно в этом случае. Никогда не стоит недооценивать пропускную способность 747, заполненных жесткими дисками :) Я не смог найти ссылку, но пару лет назад Google рассматривал доставку ящиков с дисками. Если вы можете переместить ящик с дисками общим объемом 500 ТБ из точки А в точку Б, любой способ сократить его - это очень хорошая пропускная способность Да, в итоге я отправил жесткий диск. Реальная проблема, или, как мне сказали, было управление потоком на коммутаторе (ах). Bittorrent работает лучше, чем прямая передача, если у вас несколько сеялок. Даже если OP устанавливает bt на нескольких машинах, у него только одно соединение. И он уже определил, что несколько маленьких файлов не идут быстрее, чем один большой, который указывает пальцем на сетевое соединение.

Я делал это в прошлом, с файлом 60 ГБ tbz2. У меня больше нет сценария, но его должно быть легко переписать.

Сначала разделите ваш файл на части по

Для каждого фрагмента вычислите хеш MD5 (это нужно для проверки целостности) и сохраните его где-нибудь, затем начните копировать фрагменты и их md5 на удаленный сайт с помощью выбранного вами инструмента (меня: netcat-tar-pipe на экране). сессия).

Через некоторое время уточните у md5, все ли у вас в порядке, тогда:

Если вы также сделали MD5 исходного файла, проверьте его тоже. Если все в порядке, вы можете распаковать свой файл, все должно быть в порядке.

(Если найду время, перепишу скрипт)

Трюк с Netcat-трубкой тоже подойдет. Tar не требуется при передаче одного большого файла. И причина, по которой он не уведомляет вас, когда это сделано, заключается в том, что вы не сказали это. Добавьте -q0 флаг на стороне сервера, и он будет вести себя точно так, как вы ожидаете.

Недостатком подхода netcat является то, что он не позволит вам возобновить работу, если ваш перевод умирает 74GB в .

+1 за rsyncd. Я на самом деле использую его для передачи по локальной сети, потому что вижу более высокую пропускную способность по сравнению с CIFS или NFS.

Дайте netcat (иногда называемый nc) выстрел. Следующее работает с каталогом, но его достаточно легко настроить для простого копирования одного файла.

На поле назначения:

На коробке источника:

Вы можете попытаться удалить опцию 'z' в обеих командах tar для большей скорости, поскольку файл уже сжат.

SCP по умолчанию и Rsync (который использует SCP) работают очень медленно для больших файлов. Я думаю, я бы хотел использовать протокол с меньшими издержками. Вы пытались использовать более простой шифровальный шифр или вообще не использовать его? Попробуйте найти --rsh вариант для rsync, чтобы изменить способ передачи.

я сделал "python -m SimpleHTTPServer" из командной строки в исходном коде и wget'd файл в месте назначения. Я все еще получаю «18.5K / s eta 15d 3h»

Хотя это добавляет некоторые накладные расходы к ситуации, BitTorrent на самом деле является действительно хорошим решением для передачи больших файлов. BitTorrent обладает множеством полезных функций, таких как встроенный фрагмент файла и контрольная сумма каждого фрагмента, который может быть повторно передан в случае повреждения.

Такая программа, как Azureus [теперь известная как Vuze], содержит все части, которые вам понадобятся для создания, сервера и загрузки торрентов в одном приложении. Помните, что Azureus - не самое простое из доступных решений для BitTorrent, и я думаю, что для него тоже нужен графический интерфейс - хотя для linux существует множество торрент-инструментов, управляемых из командной строки.

bt идет быстрее, чем прямой перевод, если есть несколько семян. У него единственный источник. Что еще более важно, он имеет единственную исходную сеть с плохим сетевым соединением. Даже копирование файла в несколько мест локально, а затем установка bt с несколькими начальными значениями приводит к обратным результатам из-за плохого соединения. Кроме того, создание нескольких копий и установка их в качестве начальных значений увеличивает время копирования, а не сокращает его. BT может быть приемлемым решением, если OP пытается сделать большой файл доступным для нескольких получателей.

Лично, 20-30 Кбит / с кажется довольно низким для 10 МБ (при условии 10 МБ, а не 10 МБ) канала.

Если бы я был тобой, я бы сделал одну из двух вещей (если физический доступ не доступен) -

Либо один, я советую вам разбить большой файл на более мелкие куски, около 500 МБ. Просто в случае повреждения при передаче.

Если у вас есть более мелкие чанки, используйте либо rsync снова, либо я лично предпочитаю использовать частный сеанс безопасного FTP, а затем CRC файлы по завершении.

В обсуждениях могут помочь несколько вопросов: насколько важны данные, подлежащие передаче? Это для аварийного восстановления, горячего резервного копирования, автономного хранения или как? Вы намереваетесь сделать резервную копию базы данных, когда она включена или выключена? Как насчет настройки базы данных на удаленной системе и поддержания их синхронизации с помощью кластеризации или обновления через журналы изменений (я не совсем разбираюсь в возможностях системы баз данных MySql). Это может помочь уменьшить объем данных, которые необходимо передать по ссылке.

Это снимок LVM другой реплики MYSQL (нашего основного экземпляра MYSQL в другом месте). После передачи и размещения целевой экземпляр mysql может просто обновить разницу между этим снимком (используйте его как дельту) и тем, где сейчас находится мастер. То, что это резервная копия MYSQL, не имеет значения, это просто большой кусок данных, который мне нужно переместить только один раз.

bbcp создаст для вас файл чанка и скопирует его несколькими потоками.

Поздний ответ для Google:

При передаче больших наборов данных rsync можно использовать для сравнения источника и места назначения, а затем записать пакетный файл на локальный съемный носитель, используя флаг --only-write-batch. Затем вы отправляете локальный носитель в удаленное местоположение, подключаете его и снова запускаете rsync, используя --read-batch для включения изменений в удаленный набор данных.

Если исходные файлы изменяются во время физической передачи или если транспортный носитель заполняется, вы можете просто продолжать повторять --only-write-batch | корабль | - цикл обработки до тех пор, пока пункт назначения не будет полностью занят.

Читайте также: