Все, в чем Вы нуждаетесь:
VMname=$(./vmrun list)
snapshotList=$(./vmrun listSnapshots "$VMname")
Если Вам не нужна промежуточная переменная VMname
, можно также использовать:
snapshotList=$(./vmrun listSnapshots "$(./vmrun list)")
Использовать $()
вместо ``
(если Вы не используете очень старую оболочку, которая не понимает первого). Вложение $()
конструкции легче.
Самый быстрый способ передать файлы по LAN вероятен не rsync, если нет немного изменений. rsync проводит немного времени, делая контрольные суммы, вычисляя различия, и т.д. Если Вы знаете, что собираетесь быть передачей большинства данных так или иначе, просто сделайте что-то вроде этого (примечание: существует несколько реализаций netcat
; проверьте руководство на корректные опции. В частности, Ваш не мог бы хотеть -p
):
user@dest:/target$ nc -q 1 -l -p 1234 | tar xv
user@source:/source$ tar cv . | nc -q 1 dest-ip 1234
Это использует netcat (nc
) отправить tar по необработанному соединению TCP на порте 1234. Нет никакого шифрования, проверки подлинности, и т.д., таким образом, его очень быстрое. Если Ваше кросс-соединение будет работать на уровне гигабита или меньше, то Вы привяжете сеть; если больше, Вы привяжете диск (если у Вас не будет массива хранения данных или быстрого диска). v
флаги к tar заставляют его распечатать имена файлов, когда это идет (подробный режим). С большими файлами это не практически никакие издержки. При выполнении тонн маленьких файлов Вы выключили бы это. Кроме того, можно вставить что-то как pv
в конвейер для получения индикатора хода выполнения:
user@dest:/target$ nc -q 1 -l -p 1234 | pv -pterb -s 100G | tar xv
Можно, конечно, вставить другие вещи также, как gzip -1
(и добавьте z
флаг на принимающем конце — z
флаг на передающем конце использовал бы более высокий уровень сжатия, чем 1, если Вы не устанавливаете переменную среды GZIP, конечно). Хотя gzip, вероятно, на самом деле будет медленнее, если Ваши данные действительно не сожмутся.
Если Вы действительно только передаете небольшую часть данных, которые изменились, rsync может быть быстрее. Можно также хотеть посмотреть на -W
/--whole-file
опция, как с действительно быстрой сетью (как кросс-соединение), который может быть быстрее.
Самый легкий способ выполнить rsync по ssh. Вы захотите экспериментировать с ssh шифрами для наблюдения, который является самым быстрым, это будет или AES, ChaCha20 или Шифр (хотя существуют некоторые проблемы безопасности с 64-разрядным размером блока Шифров), в зависимости от того, если микросхема имеет инструкции AES-NI Intel (и OpenSSL использует их). На достаточно новом ssh rsync-over-ssh похож на это:
user@source:~$ rsync -e 'ssh -c aes128-gcm@openssh.com' -avP /source/ user@dest-ip:/target
Для более старого ssh/sshd попробовать aes128-ctr
или aes128-cbc
вместо aes128-gcm@openssh.com
.
ChaCha20 был бы chacha20-poly1305@openssh.com
(также нуждается в достаточно новом ssh/sshd), и Шифр был бы CBC шифра. OpenSSH не позволяет работать без шифра. Можно, конечно, использовать, какой бы ни rsync опции Вам нравится вместо -avP
. И конечно можно пойти другое направление и выполнить rsync от целевой машины (получение по запросу) вместо исходной машины (нажатие).
При выполнении rsync демона можно избавиться от crypto наверху. Во-первых, Вы создали бы конфигурационный файл демона (/etc/rsyncd.conf
), например, на исходной машине (читает rsyncd.conf страницу справочника для деталей):
[big-archive]
path = /source
read only = yes
uid = someuser
gid = somegroup
Затем на целевой машине Вы работали:
user@dest:~$ rsync -avP source-ip::big-archive/ /target
Можно сделать это наоборот также (но конечно необходимо будет установить только для чтения на не). Существуют опции для аутентификации, и т.д., проверьте страницу справочника на детали.
Самый быстрый метод, который я нашел, является комбинацией tar
, mbuffer
и ssh
.
Например:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Используя это я достиг поддержанных передач локальной сети более чем 950 Мбит/с на ссылках на 1 ГБ. Замените пути в каждой команде tar для подхожения для того, что Вы передаете.
Самое большое узкое место в передаче больших файлов по сети является, безусловно, диском ввод-вывод. Ответ на это mbuffer
или buffer
. Они в основном подобны, но mbuffer
имеет некоторые преимущества. Размер буфера по умолчанию составляет 2 МБ для mbuffer
и 1 МБ для buffer
. Более крупные буферы, более вероятно, никогда не будут пусты. Выбор размера блока, который является наименьшим общим кратным собственного размера блока и в целевой и в целевой файловой системе, даст лучшую производительность.
Буферизация является вещью, которая имеет все значение! Используйте его, если у Вас есть он! Если Вы не имеете его, получаете его! Используя (m}?buffer
плюс что-либо лучше, чем что-нибудь отдельно. это - почти буквально панацея для медленных передач сетевого файла.
Если Вы передаете несколько использования файлов tar
"смешать" их в единственный поток данных. Если это - единственный файл, можно использовать cat
или перенаправление ввода-вывода. Издержки tar
по сравнению с. cat
статистически незначительно, таким образом, я всегда использую tar
(или zfs -send
где я могу), если это уже не tarball. Ни один из них, как не гарантируют, даст Вам метаданные (и в особенности cat
не будет). Если Вы захотите метаданные, то я оставлю это как осуществление для Вас.
Наконец, использование ssh
поскольку транспортный механизм и безопасен и несет очень мало служебное. Снова, издержки ssh
по сравнению с. nc
статистически незначительно.
openssl speed
на i7-3770 дает ~126-146 МБ/с для шифра CBC, и ~138-157 МБ/с для AES CBC (эта микросхема имеет инструкции AES-NI). Затем ~200-300 МБ/с для sha256. Таким образом, это может едва-едва продвинуть 1 гигабит. С OpenSSH 6.1 +, Вы могли использовать AES GCM, который это может сделать при ослеплении уровней (370-1320 МБ/с, в зависимости от размера сообщения). Таким образом, я думаю ее единственное истинное, что OpenSSH имеет мало служебное, если Вы выполняете 6.1 + на микросхеме с AES-NI и используете AES-GCM.
– derobert
12.11.2013, 17:27
ssh
(или rsync по ssh), очень, ОЧЕНЬ важен. У меня есть NAS, который использует ЦП Intel Atom. Шифрование SSH АБСОЛЮТНО ЗАПРАВЛЯЕТ скорость передачи. Я последовательно добираюсь <400 Мбит/с для RSA, вручную переопределяя его к RC4 получают меня ~600 Мбит/с, и если я использую rsync в качестве демона, это работает на собственной скорости ссылки (> 900 Мбит/с на гигабитном соединении).
– Fake Name
24.10.2014, 11:20
Вам даже не нужно использовать TCP. AoE - это реализация ATA через Ethernet, будучи уровнем 2, это подход с меньшими накладными расходами без знания стека TCP / IP. Это обеспечит максимально быструю передачу с наименьшими накладными расходами. ***
https://en.wikipedia.org/wiki/ATA_over_Ethernet
*** если сеть является узким местом, убедитесь, что вы отправляете сжатые данные.
netcat
подход? Если сеть отбрасывает пакеты, кажется, что это потеряет случайные части файлов. – sudo 16.01.2016, 01:33tee
команды в канал с обеих сторон для вычислений контрольных сумм. – derobert 16.01.2016, 01:54tar
часть говорит этому делать текущий каталог. Это не на самом деле частьnc
команда, tar используется для создания архива tar, который передается по каналу в к netcat (и с другой стороны, netcat передается по каналу в к tar для извлечения архива). Я боюсь, что комментарий не действительно достаточен для объяснения каналов, но надо надеяться этого достаточно для запущения Вас... – derobert 23.03.2018, 10:36