У меня возникли проблемы с NFS, и я хотел бы попробовать использовать просто старый TCP.
Я понятия не имею, с чего начать.
Аппаратно, я использую кроссовер Ethernet-кабель для подключения двух нетбуков.
Чтобы объединить их в сеть, я набираю
$ sudo ifconfig eth0 192.168.1.1 up && ping -c 10 -s 10 192.168.1.2 && sudo /etc/init.d/nfs-kernel-server start
на первом нетбуке и
$ sudo ifconfig eth0 192.168.1.2 up
$ ping -c 10 -s 10 192.168.1.1
$ mount /mnt/network1
на второй
где /mnt/network1
указано в / etc / fstab как
192.168.1.1:/home /mnt/network1 nfs noauto,user,exec,soft,nfsvers=2 0 0
а также в /etc/exports
(используя синтаксис этого файла), на первом нетбуке.
Выше работает отлично, но файлы и каталоги огромны. Файлы в среднем занимают около половины гигабайта за штуку, а каталоги имеют размер от 15 до 50 гигабайт.
Я использую rsync
для их передачи, и команда (вкл 192.168.1.2
)
$ rsync -avxS /mnt/network1 ~/somedir
Я не уверен, есть ли способ изменить мои настройки NFS, чтобы лучше обрабатывать огромные файлы, но я хотел бы увидеть, работает ли rsync
демон на более старых TCP лучше, чем rsync
на NFS.
Итак, еще раз, как я могу настроить аналогичную сеть с TCP?
ОБНОВИТЬ:
Итак, после нескольких часов попыток вытащить себя из болота собственного невежества (или, как мне нравится думать, подтянуть себя своими собственными бутстрапами), я пришел к некоторым полезным фактам.
Но, прежде всего, то, что привело меня на этот путь кролика вместо того, чтобы просто принять текущий лучший ответ, заключалось в следующем: nc
это невероятно крутая программа, которая решительно не работает для меня. Я попробовал netcat-openbsd
и netcat-traditional
пакеты без удачи вообще.
Ошибка, которую я получаю на принимающей машине ( 192.168.1.2
):
me@netbook:~$ nc -q 1 -l -p 32934 | tar xv
Can't grab 0.0.0.0:32934 with bind
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
route
дает:
me@netbook:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default dir-615 0.0.0.0 UG 0 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 * 255.255.255.0 U 2 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
Но вот хорошая новость: установив статические IP-адреса /etc/network/interfaces
, которые я начал делать, пытаясь заставить nc
работать, исправил все мои проблемы с NFS и возродил мою любовь к NFS.
Точная конфигурация, которую я использовал ( 192.168.1.1
конечно, для первого нетбука):
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
С этими настройками два нетбука смогут пинговать друг друга сразу после загрузки, даже без ifup
.
Во всяком случае, я все еще очень хотел бы увидеть nc
в действии, поэтому я надеюсь, что кто-нибудь поможет мне отладить этот процесс.
источник
/bin/cp
или вообще не использовать NFSnfsvers=2
) из этого урока ( michaelminn.com/linux/home_network )Ответы:
Быстрый способ
Самый быстрый способ передачи файлов по локальной сети, скорее всего, не rsync, если только не было изменений. rsync тратит немало времени на выполнение контрольных сумм, вычисление различий и т. д. Если вы знаете, что в любом случае собираетесь передавать большую часть данных, просто сделайте что-то вроде этого (примечание: существует несколько реализаций
netcat
; обратитесь к руководству для правильные варианты. В частности, ваш может не захотеть-p
)Это использует netcat (
nc
) для отправки tar через необработанное TCP-соединение через порт 1234. Шифрование, проверка подлинности не выполняется, и т. Д., Поэтому это очень быстро. Если ваша кросс-коммутация работает на гигабитах или меньше, вы подключитесь к сети; если его больше, вы будете привязывать диск (если у вас нет массива хранения или быстрого диска). Вv
флаги дегтя сделать его напечатать имена файлов , как она идет (многословный режим). С большими файлами это практически не накладные расходы. Если бы вы делали тонны маленьких файлов, вы бы это отключили. Кроме того, вы можете вставить что-то вродеpv
в конвейер, чтобы получить индикатор прогресса:Конечно, вы можете вставить и другие вещи, например
gzip -1
(и добавитьz
флаг на принимающей стороне -z
флаг на отправляющей стороне будет использовать более высокий уровень сжатия, чем 1, если, конечно, вы не установите переменную среды GZIP). Хотя, вероятно, gzip будет работать медленнее, если только ваши данные не сжимаются.Если вам действительно нужен rsync
Если вы действительно передаете только небольшую часть измененных данных, rsync может быть быстрее. Вы также можете захотеть взглянуть на параметр
-W
/--whole-file
, как в случае очень быстрой сети (например, перекрестного соединения), которая может быть быстрее.Самый простой способ запустить rsync - использовать ssh. Возможно, вы захотите поэкспериментировать с ssh-шифрами, чтобы увидеть, какие из них самые быстрые, это будут AES, ChaCha20 или Blowfish (хотя существуют некоторые проблемы безопасности с размером 64-битных блоков Blowfish), в зависимости от того, имеет ли ваш чип AES от Intel -NI инструкции (и ваш OpenSSL использует их). На новом достаточно ssh, rsync-over-ssh выглядит так:
Для старых ssh / sshd попробуйте
aes128-ctr
илиaes128-cbc
вместоaes128-gcm@openssh.com
.ChaCha20 будет
chacha20-poly1305@openssh.com
(также требуется достаточно новый ssh / sshd), а Blowfish будет blowfish-cbc. OpenSSH не позволяет работать без шифра. Вы, конечно, можете использовать любые параметры rsync, которые вам нравятся-avP
. И, конечно, вы можете пойти в другом направлении и запустить rsync с конечного компьютера (pull) вместо исходного компьютера (push).Сделать rsync быстрее
Если вы запустили демон rsync, вы можете избавиться от служебных данных криптографии. Во-первых, вы должны создать файл конфигурации демона (
/etc/rsyncd.conf
), например, на исходном компьютере (подробнее см. Справочную страницу rsyncd.conf):Затем на целевом компьютере вы запустите:
Вы можете сделать это и наоборот (но, конечно, вам нужно будет установить только чтение). Существуют варианты аутентификации и т. Д., Обратитесь к man-странице за подробностями.
источник
netcat
подход? Если сеть отбрасывает пакеты, кажется, что она потеряет случайные части файлов.tee
команд в канал с обеих сторон, чтобы вычислить контрольные суммы.tar
части говорит ей, чтобы она делала текущий каталог. На самом деле это не частьnc
команды, tar используется для создания архива tar, который передается в netcat (а с другой стороны, netcat передается в tar для извлечения архива). Боюсь, что комментария недостаточно для объяснения каналов, но, надеюсь, этого достаточно, чтобы вы начали ...Как? Или TL; DR
Самый быстрый метод , который я нашел это сочетание
tar
,mbuffer
иssh
.Например:
Благодаря этому я добился устойчивой передачи по локальной сети со скоростью более 950 Мбит / с по каналам 1 Гбит. Замените пути в каждой команде tar, чтобы они соответствовали тому, что вы переносите.
Зачем? mbuffer!
Самым большим узким местом в передаче больших файлов по сети является, безусловно, дисковый ввод-вывод. Ответ на это
mbuffer
илиbuffer
. Они во многом похожи, ноmbuffer
имеют некоторые преимущества. Размер буфера по умолчанию составляет 2 МБ дляmbuffer
и 1 МБ дляbuffer
. Большие буферы с большей вероятностью никогда не будут пустыми. Выбор размера блока, который является наименьшим общим кратным собственного размера блока как в целевой, так и в целевой файловой системе, даст наилучшую производительность.Буферизация это то , что делает все различия! Используйте это, если у вас есть это! Если у вас его нет, получите! Использование
(m}?buffer
плюс что-либо лучше чем что-либо само по себе. это почти буквально панацея для медленной передачи файлов по сети.Если вы передаете несколько файлов, используйте
tar
их для объединения их в один поток данных. Если это один файл, который вы можете использоватьcat
или перенаправление ввода / вывода. Накладные расходы наtar
vs.cat
статистически незначимы, поэтому я всегда используюtar
(илиzfs -send
там, где могу), если это уже не тарбол . Ни один из них не гарантирует вам метаданные (и, в частностиcat
, не даст). Если вы хотите метаданные, я оставлю это в качестве упражнения для вас.Наконец, использование
ssh
для транспортного механизма является безопасным и несет очень мало накладных расходов. Опять же, накладные расходы поssh
сравнениюnc
статистически незначимы.источник
openssl speed
на i7-3770 дает ~ 126–146 МБ / с для CBC Blowfish и ~ 138–157 МБ / с для CES AES (этот чип имеет инструкции AES-NI). Тогда ~ 200–300 МБ / с для ша256. Таким образом, он может едва выдвинуть 1 гигабит. С OpenSSH 6.1+ вы можете использовать AES GCM, что он может делать со скоростью ослепления (370–1320 МБ / с, в зависимости от размера сообщения). Поэтому я думаю, что верно только то, что OpenSSH имеет небольшие накладные расходы, если вы используете 6.1+ на чипе с AES-NI и используете AES-GCM.ssh
(или rsync поверх ssh) очень, ОЧЕНЬ важны. У меня есть NAS, который использует процессор Intel Atom. Шифрование SSH АБСОЛЮТНО РЕГУЛИРУЕТ скорость передачи. Я получаю постоянно <400 Мбит / с для RSA, ручное переопределение его для RC4 дает мне ~ 600 Мбит / с, и если я использую rsync в качестве демона, он работает с собственной скоростью соединения (> 900 Мбит / с, на гигабитном уровне) подключение).Вам даже не нужно использовать TCP. AoE - это реализация ATA через Ethernet, а на втором уровне это подход с меньшими издержками, без знания стека TCP / IP. Это обеспечит вам максимально быстрый перевод с наименьшими накладными расходами. ***
https://en.wikipedia.org/wiki/ATA_over_Ethernet
*** если сеть является узким местом, убедитесь, что вы отправляете сжатые данные.
источник