Копирование больших файлов по сети
С вами канал " Techno-Geek " и в этой статье хочу поделится с вами информацией о том, как, скопировать большие файлы в неустойчивой сети. И начать хочется с того, что на днях столкнулся с такой проблемой - нужно передать файл в 6 гигабайт внутри одной сети на устройство доступ к которому есть только через беспроводное сетевое подключение и ни как иначе.
Суть проблемы:
При обычном копировании через CTRL+C - CTRL+V копирование файла доходило до пределов в 38% - 96%, сеть разрывалась и файл полностью не передавался, а стандартные методы Windows не позволяют делать блочное копирование и не поддерживают докачку файла, соответственно файл всегда получался повреждённым и был не пригоден для его открытия на другом устройстве.
Проблема усугублялась тем, что второе устройство находится в физически недоступном месте и к нему нет возможности подключить сетевой кабель напрямую или записать данные на переносной носитель информации и подключить его к устройству. Так нужно было найти способ передать большой объём данных внутри беспроводной сети не имея физического доступа к другому устройству.
Поиск путей решения
Естественно первым делом я пошёл в поисковик и начал искать программы которые поддерживают процесс копирования файлов с докачкой и удивился тому, как часто у пользователей возникает такой вопрос (скриншот приложу ниже), но ответа я так и не нашел, все решения на которые я натыкался это советы программ для копирования по типу "TeraCopy" или "KillCopy", но они мне не помогли, так как по сути эти программы ни чем не отличаются от стандартных средств Windows и при разрыве сети они также выдают ошибку передачи файла.
Скриншот страницы по запросу "Копирование файлов с докачкой" Скриншот страницы по запросу "Копирование файлов с докачкой"Выход из ситуации
Поскольку я не являюсь сетевым экспертом, и не знаю всех тонкостей работы с консолью и серверами мне нужно было найти максимально простое и удобное решение, которое я как пользователь мог бы применить не вдаваясь в различные SSH протоколы и консольные программы, мне просто нужно было передать файл имея функцию докачки фала при разрыве сети или если произойдёт физическое отключение питания в процессе копирования, чтобы я не повторял копирование всего файла, а просто и без каких либо проблем продолжил копирование с точки разрыва.
И тут ко мне пришла простая, но в то же время рабочая идея - использовать для передачи файла Торрент-клиент. Всё что мне нужно сделать - это создать торрент файл, для этого нужно зайти в меню "Файл" - "Создать новый торрент. ", выбрать файл и создать для него торрент файл.
Таким образом я буду сам для себя отдающим и принимающим. Напомню, что физического доступа к устройству, на которое нужно передать файл нет, соответственно установить на нём торрент клиент я не могу, а значит я должен отдавать файл со своего персонального компьютера и принимать его к себе же в сетевое пространство но на диск к которому у меня открыт доступ.
Для того, чтобы осуществить такую операцию мне нужно было, чтобы мой торрент файл передавался внутри сети без использования торрент-трекера, а только по средствам сети через торрент-клиент. Для этого нужно задействовать технологию DHT (Distributed Hash Table), которая включается в настройках торрент-клиента и обеспечивает передачу файлов внутри сети и в обход торрент-трекеров.
Что дальше?
Итак я создал торрент файл, после чего он автоматически добавился в программу uTorrent, которая является моим торрент-клиентом, и стал на раздачу, но мне это не нужно, так как я не раздаю файл кому-то, а просто хочу копировать его с поддержкой докачки, поэтому мне нужно было удалить файл из торрент-клиента. Для этого нужно нажать по нему правой кнопкой мышки и выбрать "Удалить выборочно" - "Только торрент файл"
Теперь, осталось только пойти туда, где создан торрент-файл, в моём случае я поместил его на рабочий стол, и два раза нажать на него левой кнопкой мыши, для того, чтобы запустить процесс скачивания. После - выбрать путь куда будет скачиваться файл, в моём случае это устройство в сети, и начать загрузку. Так, даже когда сеть будет обрываться, то будет возможность продолжить копирование с того места в котором оно прервалось, а если в процессе копирования вдруг будет скачок напряжения и компьютер перезагрузится, то при открытии торрент-клиента будет произведена проверка файла и копирование продолжится.
Протокол BITS
BITS или Background Intelligent Transfer service — (Фоновая интеллектуальная служба передачи) – это служба Windows, которая используется для передачи файлов между системами. С помощью протокола BITS можно передавать как скачивать, так и закачивать файлы. Именно по этому протоколу компьютеры скачивают файлы с серверов при выполнении автоматического обновлении Windows (в т.ч. при скачивании обновлений со WSUS сервера), при получении программ с SCCM точек распространения и т.д.
Преимущества протокола BITS:
- BITS — интеллектуальный протокол, который при работе способен регулировать используемую полосу канала связи, чтобы не оказывать влияния на другие сетевые приложения и сервисы. BITS может использовать только незанятую полосу пропускания канала и динамически изменять скорость передачи данных в процессе работы (если другие приложения увеличат нагрузку на сеть, BITS может уменьшить скорость передачи данных по сети);
- Загрузка файла может идти в фоновом режиме, незаметно для пользователя;
- Задание BITS в режиме докачки будет автоматически продолжено даже в случае обрыва канали связи между компьютером и клиентом, или после перезагрузки компьютера;
- В любой момент вы можете приостановить или возобновить загрузку по BITS без потери данных;
Таким образом, BITS является оптимальным протоколом для передачи больших файлов по медленным и нестабильным сетям (спутниковый канал, GPRS соединение и т.д.).
BITS: требования к ОС и версии PowerShell
Протокол BITS впервые был представлен еще в Windows XP, для управления заданиями BITS в которой можно было использовать утилиту bitsadmin.exe. Утилита все еще поддерживается, однако считается устаревшей. Для управления заданиями BITS предпочтительно использовать специальные командлеты PowerShell.
Для работы по рассматриваемому сценарию нам потребуется ОС не ниже Windows Vista или Windows Server 2008, и PowerShell не ниже версии 2.0. Современные версии Windows 10 и Windows Server 2016 / 2012 R2 протокол BITS полностью поддерживают.
Совет. Возможно использовать и Windows Server 2003. В этом случае придется установить специальное обновлений KB 923845 и PowerShell V2.0.Поддержка BITS требуется как на стороне клиента, так и сервера.
Как скачать файл по протоколу BITS с помощью PowerShell
Предполагается, что к данному URL адресу разрешен анонимный доступ (в дальнейшем мы рассмотрим доступ к URL адресу с аутентификацией).
В первую очередь загрузите в сессию PowerShell модуль поддержки BITS:
После загрузки модуля, вы можете вывести список всех доступных команд модуля BitsTransfer:
Как вы видите, доступно всего 8 командлетов:
- Add-BitsFile
- Complete-BitsTransfer
- Get-BitsTransfer
- Remove-BitsTransfer
- Resume-BitsTransfer
- Set-BitsTransfer
- Start-BitsTransfer
- Suspend-BitsTransfer
Синхронная передача файлов между компьютерами с помощью BITS
В данном примере командлет выполняет загрузку файла в синхронном режиме. Закачка файла напоминает обычную процедуру копирования через проводник или с помощью PowerShell командлета Copy-Item. При это на экран выводится прогресс бар, отображающий статус выполнения закачки. При перезагрузке компьютера, закачка возобновлена не будет (вам заново скачивать весь файл).
Используем BITS для асинхронного копирования больших файлов по сети
Процесс загрузки файлов через BITS можно запустить и в асинхронном режиме, для этого к рассмотренной выше команде нужно добавить параметр –asynchronous. В этом режиме, если что-то случится в процессе загрузки файла (перезагрузка сервера, клиента, обрыв канала связи и пр.), задание автоматически продолжится после восстановления доступности источника и загрузка файла продолжится с момента прерывания связи.
Асинхронное задание BITS выполняется в фоновом режиме, а на экран не выводится процесс выполнения команды загрузки файла. Статус задания BITS можно получить из консоли PowerShell с помощью команды Get-BitsTransfer:
Get-BitsTransfer | fl
Команда возвращает статус передачи (в данном случае видно, что передача окончена -Transferred), информацию о количестве переданных байт, общем размере файла, времени создания и завершения задания BITS.
Вы можете просмотреть статус всех заданий BITS, запущенных на компьютере, в табличной форме:
Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize
При использовании асинхронного режима передачи, в целевом каталоге создается временный файл с расширением TMP (по умолчанию скрыт в проводнике). Чтобы конвертировать его в исходный тип файла (который хранится на сервере-источнике), нужно выполнить команду Complete-BitsTransfer:
Задание загрузки BITS после этого считается завершенным и пропадает из списка заданий.
Вы можете загрузить локальный файл в общую сетевую папку на удаленном сервере. Для этого используется следующая команда (для удобства можно указать имя задания копирования):
Start-BitsTransfer -Source C:\iso\w101809.iso -Destination \\ekt-fs1\iso -Asynchronous -DisplayName CopyISOtoEKT
Чтобы временно приостановить задание BITS, выполните:
Get-BitsTransfer -Name CopyISOtoEKT | Suspend-BitsTransfer
Для продолжения задания используется командлет Resume-BitsTransfer:
Get-BitsTransfer -Name CopyISOtoEKT | Resume-BitsTransfer -Asynchronous
Вы можете добавить в задание BITS дополнительные файлы с помощью командлета Add-BitsFile:
Get-BitsTransfer -Name CopyISOtoEKT | Add-BitsFile -Source C:\iso\w10msu\* -Destination \\ekt-fs1\iso -Asynchronous
Чтобы удалить все задания загрузки BITS на компьютере (в том числе запущенные другими пользователями), выполните команду:
Вы не сможете отменить задания BITS, запущенные из-под System (ошибка 0x80070005 Unable to cancel job). Для отмены такого задания нужно выполнить команду Remove-BitsTransfer из-под SYSTEM.Если сервер, на котором хранится файл, требует аутентификации пользователя, вы можете вызвать окно, в котором нужно указаны учетные данные для доступа к ресурсу:
Чтобы было удобнее отслеживать результаты выполнения задания BITS, можно воспользоваться простым скриптом, который отслеживает выполнение задания и раз в несколько секунд выводит процент выполнения загрузки на экран. По окончании загрузки файла, скрипт автоматически преобразует TMP файл в исходный формат:
Копирование всего содержимого общей сетевой папки через BITS
Как мы уже говорили, для работы BITS не нужен Web сервер, это означает, что вы можем скопировать файлы непосредственно с других Windows-компьютеров или общих сетевых папок:
Start-BitsTransfer -Source \\msk-rep01\os\rhel-server-7.0-x86_64-dvd.iso -Destination c:\temp -Asynchronous
Командлеты модуля BitsTransfer не умеют рекурсивно копировать все файлы и папки из определённой директории, или файлы, которые используются другими программами. Чтобы из указанной сетевой папки скопировать все файлы с подкаталогами, воспользуемся такой функцией (можно предварительно проверить, существует ли целевой каталог и создать его):
Import-Module BitsTransfer
$Source="\\msk-rep01\os\"
$Destination="c:\tmp\"
if ( -Not (Test-Path $Destination))
$null = New-Item -Path $Destination -ItemType Directory
>
$folders = Get-ChildItem -Name -Path $source -Directory -Recurse
$job = Start-BitsTransfer -Source $Source\*.* -Destination $Destination -asynchronous -Priority low
while( ($job.JobState.ToString() -eq 'Transferring') -or ($job.JobState.ToString() -eq 'Connecting') )
Sleep 3
>
Complete-BitsTransfer -BitsJob $job
foreach ($i in $folders)
$exists = Test-Path $Destination\$i
if ($exists -eq $false)
$job = Start-BitsTransfer -Source $Source\$i\*.* -Destination $Destination\$i -asynchronous -Priority low
while( ($job.JobState.ToString() -eq 'Transferring') -or ($job.JobState.ToString() -eq 'Connecting') )
Sleep 3
>
Complete-BitsTransfer -BitsJob $job
>
Если вы используете анонимную авторизацию, необходимо разрешить анонимным пользователям запись в каталог на уровне NTFS. Если загрузка файлов выполняется под авторизованными пользователями, им необходимо предоставить RW разрешения на папку загрузки.
Обратите внимание, что по-умолчанию IIS позволяет загружать файлы до 30 Мб. Чтобы разрешить загружать большие файлы, нужно в файле web.config изменить значение в параметре maxAllowContentLength.Таким образом, использование возможностей BITS представляет собой отличную альтернативу традиционному копированию файлов по сети по протоколу SMB. В отличии от последнего, задание копирования файлов BITS выполняется несмотря на разрывы связи и перезагрузки компьютеров, и не так загружает канал связи, не мешая работе других сетевых приложений и пользователей. Протокол BITS может быть оптимальным решением для передачи по WAN сети больших файлов ISO образов и файлов виртуальных машин (vmdk, vhdx).
Вопрос пользователя
Здравствуйте.
Помогите передать папку, в которой примерно 350 ГБ информации (разные видео, картинки и пр.) с одного компьютера на другой по сети Интернет. Дело в том, что компьютеры находятся в разных городах, и возможности пока приехать и перевезти диск нет. Можно ли как решить задачу малой кровью?
Михаил.
Если вы живете в крупных городах, наверное, у вас нормальная скорость подключения к сети, например, не ниже 40-50 Мбит/с (а это позволит передать около 15-18 ГБ информации за час). Таким образом, для передачи 350 ГБ, нужно около суток (т.е. будет достаточно одних выходных).
В этой статье разберу и вашу задачу, и другие способы, как можно передавать файлы/папки самых разных размеров: от 1 Кб и до 10000 ГБ (и более ✌).
Способы передачи файлов по Интернет
Способ №1: с помощью P2P программ (например, uTorrent)
- если скачка прервется (по вашей причине или нет) - вы ее сможете продолжить с того момента, с которого оборвалась связь;
- нет сторонних серверов, сервисов и пр., передача идет непосредственно от одного ПК на другой - т.е. вы ни от кого не зависите;
- бесплатность - не нужно никому платить (если только за Интернет-трафик, но сейчас во многих городах Интернет уже безлимитный);
- можно передавать неограниченное количество информации - хоть 1 ТБ, хоть 10 ТБ.
- способ очень простой: разберется даже совсем начинающий пользователь: уже через 5 минут можно начать передавать файл/папку;
- передаваемые файлы никак ненужно подготавливать (сжимать там, или еще что-то. );
- можно передавать файлы сразу нескольким людям (сразу в несколько городов, и даже стран)!
- отдающий файлы и скачивающие их компьютеры должны быть включены и одновременно подключены к сети.
1) После запуска uTorrent, зайдите в его настройки в раздел "BitTorrent", и поставьте галочки напротив пунктов:
- включить сеть DHT;
- включить DHT для новых клиентов;
- поиск локальных пиров, управлять скоростью;
- поддержка UDP-трекеров;
- включить scrape-запросы;
- включить обмен пирами (так-то по умолчанию они обычно включены, но на всякий случай. ) .
Рис. 1. Основные настройки BitTorrent
2) Далее в uTorrent нажмите "Файл/Создать новый торрент" , либо сочетание кнопок Ctrl+N . Должно появиться окно, как у меня на скрине ниже. При создании торрента нужно:
- указать папку (или конкретный файл), которую вы хотите передать;
- в подразделе "другое" поставьте только одну галочку "Начать раздачу" (как у меня в примере!);
- в графе "описание" можете написать кратко, что за файл собираетесь раздавать;
- и нажмите кнопку "Создать" .
Рис. 2. Создание торрент-файла
uTorrent создаст раздачу и предложит вам сохранить небольшой файл в 1-2 Кб (такой же, который вы скачиваете с торрент-трекеров, когда хотите загрузить какой-либо файл).
Теперь достаточно передать этот файл в 1-2 Кб на другой компьютер (на тот, который хочет скачать вашу папку/файл), и у него на ПК в uTorrent открыть этот файл и начать загрузку.
Рис. 3. Передаем файл в 1-2 Кб на загрузку торрента
Вместо передачи файла, можно вообще передать обычную ссылку.
Для этого щелкните по своему созданному торренту правой кнопкой мышки и выберите "Копировать Magnet URL" . Затем скидываете в чат (ВК, ОК, Skype и т.д.) эту магнитную ссылку, и тот, кто хочет скачать ваши файлы в этом торренте - спокойно это делает.
Рис. 4. Вместо файла можно передать магнитную ссылку
3) Кстати, если кто не знает, как открыть магнитную ссылку: в uTorrent нажмите "Файл/добавить торрент из URL" - далее вписываете ссылку (которую скопировали чуть выше в статье). Всё!
Рис. 5. Добавляем торрент и загружаем данные
Про скорость загрузки.
При скачивании/раздачи больших папок/файлов часто скорость скачет: то низкая, то высокая. Рекомендую на время передачи файлов: не загружать ничего постороннего с других сайтов (так вы забиваете канал).
Кроме этого, у многих провайдеров Интернет есть опции по увеличению скорости канала на некоторое время (типа, турбо-скорости), посмотрите, если есть возможность - включите!
Вместо uTorrent можно воспользоваться программой StrongDC. Работа с ней строится несколько отличным образом:
- сначала нужно будет подключиться к какому-нибудь серверу (с обоих ПК);
- после, на одном из них расшарить папку (файл);
- а с другого ПК загрузить ее.
Способ №2: с помощью Skype, ICQ, электро-почты (для относительно небольших файлов)
Для передачи относительно небольших файлов (ну, например, сотня-другая мегабайт данных) возиться с uTorrent не всегда удобно (тем более, если вы им постоянно не пользуетесь).
Куда более правильнее в этом случае — просто передать данные через Skype или ICQ (например).
Преимущества на лицо: это быстро, не нужно возиться с доп. программами, приемлемая скорость. Для передачи файла в Skype, например, достаточно просто кликнуть правой кнопкой мышки по нику (имени вашего собеседника), и в меню появиться данная опция (см. рис. 6).
Рис. 6. Skype передать файл
Рис. 7. Почта Yahoo
Кстати, если у вас в передаваемой папке много мелких файлов, рекомендую ее сжать в архив.
Во-первых, файл в архиве меньше весит (файлы будут сжаты), а значит быстрее будет передан; во-вторых, архив можно зашифровать и поставить пароль, чтобы никто не смог его вскрыть (если вдруг кто-то посторонний скачает архив).
Способ №3: с помощью программ для удаленного доступа
Есть отдельный ряд программ (AnyDesk, TeamViewer и др.), которые позволяет подключаться к рабочему столу другого компьютера через Интернет и управлять им. Разумеется, таким образом можно и обмениваться файлами (причем, это не сложнее, чем работать в проводнике).
"Чужой" рабочий стол.
Теперь мы можем управлять этим ПК удаленно.
Форма для скачивания и загрузки файла на удаленный ПК / AnyDesk
Способ №4: с помощью файлообменников и облачных дисков
В последнее время все большую популярность стали завоевывать различные облачные диски. Т.е. вы регистрируетесь в сервисе, и вам дается, скажем 10 ГБ диск, на котором вы можете хранить любые файлы.
И, в том числе, давать ссылки на загрузку другим людям (они не обязательно могут качать их к себе - могут также сохранить к себе на свой облачный диск).
Основные преимущества данного способа:
- во-первых, компьютеры не обязательно держать включенными одновременно (т.е. каждый загружает/качает, когда ему удобно);
- во-вторых, файлы в надежном хранении (даже понадежнее, чем на вашем жестком диске);
- в-третьих, вы можете получить к ним доступ с любого ПК или смартфона, подключенного к Интернет;
- в-четвертых, многие файлы можно просмотреть (или даже редактировать) прямо в облачном диске, не скачивая к себе на ПК.
Предложу ниже несколько интересных сервисов.
Диск от известнейшего поисковика. После регистрации и скачивания мобильного приложения, размер диска будет около 50 ГБ (по крайней мере, такая реклама идет уже долго, см. рис. 8 ниже)! Думаю, более, чем достаточно для многих пользователей.
В арсенале Яндекс-диска есть инструменты для просмотра и редактирования документов Word, Excel, фотографий, и даже видео-файлов. Через диск можно в два клика передавать файлы со смартфона на ПК. В общем-то, очень удобная штука, рекомендую к ознакомлению.
Рис. 8. Яндекс-диск
По своим инструментам и возможностям очень похож на Яндекс-диск: также есть редактор фото, просмотр таблиц, документов MS Office, просмотр видео-файлов и пр.
После регистрации на сегодняшний день дают 8 ГБ, но часто бывают акции, и вполне место можно расширить еще на несколько десятков ГБ. За небольшую плату диск можно расширить на несколько сотен ГБ (чем не вариант, если вам часто нужно передавать большие объемы информации).
После регистрации будет доступно около 15 ГБ (за несколько сотен рублей в месяц его можно довести до 1 ТБ). Пользоваться, также просто - даже не вижу смысла показывать, как загружать/передавать файл через этот сервис.
При работе на серверах в режиме подключения Remote Desktop Connection (RDP) постоянно возникает необходимость копирования/перемещения файлов между локальной и удаленной машиной. Для этого в подключении настраивается "проброс" дисков и буфера обмена локальной машины. Файлы копируются обычным способом в проводнике удаленной машины или просто через буфер обмена.
Такой "обычный" метод прекрасно работает до тех пор, пока файлы не оказываются сравнительно большими или соединение недостаточно стабильным. А большинство файлов, которые необходимо скопировать, как раз и являются большими: дистрибутивы, конфигурации, выгрузки баз, архивы логов, бэкапы и т.д. Загрузка / выгрузка таких файлов не всегда проходит успешно. Малейшая нестабильность канала приводит к обрыву передачи с ошибкой. Иногда приходится возобновлять передачу вновь и вновь и вновь, что может длиться часами. Особенно, если размер файла составляет несколько Гигабайт.
И если на серверах, которыми владеете Вы или Ваша Компания, возможны другие варианты организации файлообмена, кроме как по RDP-соединению, то к серверам, находящихся в инфраструктуре Заказчика, чаще всего есть только RDP доступ (к тому же, в большинстве случаев, через VPN) и организация альтернативных способов требует согласования со службой информационной безопасности Заказчика.
Однажды, после того как выгрузка нескольких гигабайт архивированных логов ТехЖурнала с продуктивной системы в контуре Заказчика для отправки на контроль в
Целью заметки не является подробное описание данного протокола. В Сети достаточно материала, в том числе и на русском языке. Сосредоточимся лишь на практическом применении в отношении RDP-сессий.
Реализация
При решении задачи я воспользовался реализацией скрипта на PowerShell
Для примера будем загружать с локальной машины на удаленную дистрибутив сервера 1С, т.к. доступа к Интернет с самого сервера нет.
Ниже привожу основную, рабочую часть скрипта. Достаточно указать в параметрах -Source и -Destination свои пути к файлам. Оба пути - с удаленной машины. Один указывает на локальный диск, второй - на "проброшенный" (\\tsclient)
Служба может работать в обе стороны, т.е. как скачивать на удаленную машину с локальной, так и закачивать с удаленной на локальную. Достаточно поменять местами значения параметров -Source и -Destination.
Запускать скрипт нужно на удаленной машине, т.е. в RDP-сессии.
Совет: самый простой способ добавить путь к файлу - найти его в проводнике, выделить, нажать Shift+ПКМ и выбрать "Копировать как путь". Что сделать дальше со строкой в буфере, полагаю и так все знают.
После запуска скрипт демонстрирует прогресс операции в процентах.
Можно в любой момент прервать его выполнение по Ctrl-C или закрыв окно. При следующем запуске через несколько минут можно заметить что процент выполнения будет больше того, на котором был произведен обрыв. Таким же образом будет возобновлена передача файлов после повторного соединения при обрыве связи или отключении сессии. При настройках по умолчанию, следующая попытка после неудачной предпринимается через 10 минут. Чтобы не ожидать автоматического возобновления, можно запустить скрипт повторно.
Если оставить задачу "без присмотра", т.е. без работающего скрипта, то загрузка выполнится, но загружаемые файлы не появятся в целевом каталоге. Вернее, в нём будут временные файлы вида "BIT5F71.tmp". Для того, чтобы в каталоге назначения объявились "правильные" файлы, необходимо выполнить "финализацию", при которой созданные временные файлы будут переименованы и задание службы будет удалено.
Сделать это можно, просто повторно запустив скрипт. Либо выполнить в консоли:
В случае, если на протяжении загрузки скрипт выполнялся, то финализация будет выполнена автоматически, без дополнительных действий.
Как уже было показано, при завершении скрипта по Ctrl-C или закрытием окна и даже выходом из сессии, задача BITS-transfer не удаляется.
При необходимости отменить задачу, сделать это можно следующим образом:
Возможные ошибки
При первом запуске скрипта может возникнуть ошибка вида:
Для устранения ошибки необходимо разрешить выполнение сценариев, сменив политику выполнения:
Файл для загрузки
В загружаемом файле приложена чуть более доработанная версия скрипта, с интерактивными диалоговыми окнами выбора файла-источника и каталога-назначения, а также возможностью выбора нескольких файлов.
Есть папка. В ней 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-снапшот можно как то копировать кусками?
> Если при передаче одного файла в середине было потеряно несколько
Читайте также: