[Solved для Samba] "надежное" копирование по сети
Beelzebubbie 13 сентября, 2010 - 16:07
необходим механизм копирования больших (десятки ГБ) файлов по сети с учетом обрывов в этой самой сети (воздух n-диапазона) - какую-нибудь cli утилитку, которая ожидает восстановления связи и прет дальше. самостоятельно найти удалось только под оффтопик.
»
- Для комментирования войдите или зарегистрируйтесь
wget, опция --tries
wget, опция --tries
Не грусти, товарищ! Всё хорошо, beautiful good!
-c еще
-c еще
это я знаю, но wget только
это я знаю, но wget только http/ftp умеет afaik
сеть бывает разной, по какомц
сеть бывает разной, по какому протоколу передавать собираетесь?
semlanik написал(а): сеть
UDP :D
хотелось бы что-нить
хотелось бы что-нить протоколо-независимое. то есть я монтирую (samba, NFS etc) и копирую.
типа reliablecp /mnt/netshare/file /path
Ну самба с НФС тоже как бы
Ну самба с НФС тоже как бы протоколы для передачи данных используют ) это меня как раз и интересовало. Ну для NFS знаю фичу что оно само поднимает коннект после отвала, т.е. смотированая шара после поднятия сети, подцепится сама. Отсюда вывод что можно написать простенький скрипт копирования. А вот насчет самбы ничего посоветовать не могу...
ну хотелось бы более-менее
ну хотелось бы более-менее абстрактного решения проблемы для всего того, что является файлом и может быть смонтировано. Насчет простенького скрипта: не уверен, что он будет простым - наверное надо хотя бы блоки данных переданные непосредственно перед обрывом сверять
rsync -c плюс --bwlimit плюс
rsync -c
плюс --bwlimit плюс --timeout
ну это к созданию скрипта
ну это к созданию скрипта полезно. а неужели подобная проблема ранее не ставилась/решалась?
От чего же не
От чего же не ставилась/решалась? И ставилась, и решена. Торрент как комплексное решение (Докачка, расчет контрольных сумм и все такое. ), wget опять же. Насколько в курсе, rsync поддерживает докачку (http://surrender-zen-way.blogspot.com/2009/05/rsync-ssh.html), можно использовать его. По приведенной ссылке описано как все это завернуть в туннель, ежели вас беспокоит безопасность соединения.
Вся проблема в том, что вы по каким либо причинам не желаете, или не имеете возможности этим пользоваться. На мой взгляд проще всего на источнике поднять фтп, и организовать расчет контрольной суммы. На приемнике wget завернуть в скрипт с контролем суммы. Строк пять кода.
Ну разумеется я не желаю это
Ну разумеется я не желаю это делать неправильно. Т.е. создавать лишние сущности вроде FTP/HTTP серверов, торрент-клиентов. Задача-то простая и предполагается что я могу стандартными средствами системы, например cp, скопировать файл.. необходим враппер-функционал который отслеживает обрыв и возобновляет трансфер.
Кроме того, хотелось бы эту задачу решить не "для данного конкретного случая" - в конкретном случае проще и быстрее перенести на флэшке, диске нежели поднимать сервисы ТОЛЬКО ДЛЯ ДАННОЙ ЗАДАЧИ - что категорически неправильно. И еще раз кроме того - вовсе не предполагается, что есть права рута "на том конце". Все, что есть - это доступ к шаре.
как я писал в постах ниже - докачка rsync работает как "перекачка" (может это только в моем случае). Если у Вас реально докачивает - плз поделитесь опытом, буду весьма благодарен.
?
Если взглянуть на это теоретически.
При каких джентльменских соглашениях - на получаете можно узнать, что на ресурсе за разрыв связи содержимое файла не было изменено?
не изменилось modification
не изменились modification time и размер например. Это не гарантия но приемлемое соглашение.
wget надо полагать примерно так и определяет?
если теоретически - то задача
если теоретически - то задача мне видится так (я не программировал в Linux но думаю в данном случае платформа не важна)
если
1)дескриптор, возвращаемый функцией OpenFile (для стороннего файла), поддерживает операцию Seek
и
2)поддерживается получение размера и времени модификации (для стороннего файла)
то после срабатывания таймаута заново открываем файл делаем Seek и дописываем
ну возможно придется после обрыва перемонтировать но это уже детали
в принципе на питоне несложно сделать, но это наверняка велосипед
попробовал rsync с -P и
попробовал rsync с -P и --partial-dir - все равно копирование начинается сначала. Вот засада - как же файл-то скопировать? )
если это один большой файл -
если это один большой файл - то wget'ом получше будет
а как wget'ом мне с самбы
а как wget'ом мне с самбы скопировать?
Beelzebubbie
Как Вы это определили?
начал копировать подождал до
начал копировать подождал до пары гигов, оборвал. Файл остался. Еще раз повторил команду, опять прервал. В результате получилось меньше 2 гигов. Значит не продолжилось (
конкретно команды такие были
mount //host/share /mnt/netshare
rsync -vP --partial-dir=/somedir/.rsync-partial --bwlimit=6000 /mnt/netshare/myfile /destpath
Цитата: --inplace
А partial-dir добавит дисковых операций и только, т.к. будет гонять файлы из одной диры в другую при окончании докачки, ИМХО. Однако:
И, что важно:
про partial-dir согласен, это
про partial-dir согласен, это уже от безысходности )
inplace ситуацию не меняет. То есть при повторном запуске с -vP --inplace запись в имеющийся файл происходит с его начала (файл начинает расти только после того, как будет записан его старый размер)
...вопрос пока остается открытым ....
Как бы, из мана следует, что
Как бы, из мана следует, что --partial очень нужен, при нём должна быть докачка. А иначе: By default, rsync will delete any partially transferred file if the transfer is interrupted.
в мане: -P == --partial
в мане: -P == --partial --progress
Так сверкой блоков будет
Так сверкой блоков будет заниматься сама nfs. На время обрыва соединения процесс копирования будет "замораживаться", потом продолжать дальше.
в общем-то да. в таком случае
в общем-то да. в таком случае задача сводится к rsync с таймаутом + (восстановление монтировки) + продолжение копирования с места обрыва.
вот с продолжением у меня пока не выходит.
наткнулся тут на няшечку
наткнулся тут на няшечку smbget -rqn smb://server/share/data
SOLVED
вот оно! спасибо доброму и компетентному человеку ))
.
Для smb нашли. А как для остальных?
Почему когда речь шла о wget, то [SOLVED для HTTP,FTP] не появилось?
И неужели на этом всё закончится, когда просили ...
? Опять победил офтопик!? Дальнейшей поиск истины умрет?
Лучше бы тогда изменить название на
[Solved] "надежное" копирование по сети для Samba
да, я не совсем корректно
да, я не совсем корректно поставил вопрос - потому что я не знаю правильной формулировки.
wget как докачка для HTTP, FTP - вещь имхо общеизвестная, да и нагуглить кто не знает - пара секунд поэтому таким углом я вопрос и не ставил.
Где-то в этих постах я уже отметил, что мой вопрос был - "надежное копирование для всего, что можно смонтировать и скопировать командой cp" - каким словом это объединить? Разумеется, для локально подключаемых ФС такой вопрос ставиться не должен в принципе, может быть это NFS как "Сетевые Файловые Системы"? )))
Я не придумал формулировки, к которой нельзя было бы придраться )
Посоветуйте, как правильно - исправлю. Посоветуете метод не только для самбы - будет вообще замечательно. Еще один момент - если писать самому универсальный скрипт то нужно учитывать тот факт, что Samba нуждается в перемонтировании после обрыва связи. Как этот вопрос обстоит с другими "NFS" - я не знаю.
Beelzebubbie написал(а): Как
NFS не нуждается в перемонтировании, более того процессы, которые через NFS что-то используют, "замораживаются" сами, без скриптов, а затем продолжают работу после появления связи.
Но NFS почему-то не подошёл?!
Поднятие сервисов, отличных от Samba и NFS отметалось сразу. Хотя именно они для этого подходят лучше всего (проектировались в расчёте на плохие линии связи).
То что "победила самба" меня не удивляет.
я "NFS" употребил как
я "NFS" употребил как собирательное определение для "Сетевые Файловые Системы" поэтому и кавычки поставил. Среда дома гетерогенная (win, linux) поэтому разумеется самба и победила.
Поднятие других сервисов? На всех участниках сети? Это по сути дела будет дублирование не более. Можно конечно еще проще решить - купить действительно достойное сетевое оборудование итд.
Есть же у нас команда cp - достаточно абстрагированная от ФС и Сетевых ФС. Все, что в данном случае надо - это дополнить ее функционал (а не сужать путем использования ФС-специфичных функций)
В общем, я за ООП и "черные ящики" в данном случае )
Я тут хотел нарезать коммент
Я тут хотел нарезать коммент с ворчанием, но не получилось
поэтому скажу лишь, что самба победила по хомячковости задачи и не желанию думать
.
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
а предполагается, что на
а предполагается, что на любом Win компе уже стоит SFU?
Или, более того, предлагается устанавливать поддержку NFS _только для этой задачи_? )))
Кроме того, на xp home sfu afaik не ставится а бесплатных NFS клиентов я еще года 3 назад искал - других не было.
Или такая ситуация - пришел сосед с рабочим ноутом, фильмы принес. А права у него тока юзера - как тогда?
Так что хомячковость здесь отсутствует. Сначала БГ убедите чтобы NFS клиент "искаропки" стоял )
Я не спорю, что NFS во многих отношениях лучше Samba, однако напомню про Ethernet и VHS vs сами знаете что.
Самба победила только потому, что она, в отличие от всего остального, почти везде уже есть.
в данном случае (на скрине),
в данном случае (на скрине), я никакой SFU не ставил :)
Убедил - уже стоит. с переходом на Генту выкинул самбу, кому надо - тот и мучается :)
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Цитата: в данном случае (на
потому что это server
Это у Вас стоит и это более исключение, нежели правило. Как бы там ни было, самбу поддерживает большинство участников сети и этот факт не стоит игнорировать.
Можно и по-другому: если для решения вопроса не требуется привлечения лишних сущностей, то привлекать их - _неправильное_ решение вопроса.
если вернуться к теме вопроса
если вернуться к теме вопроса - я ставил задачу не относительно samba, NFS или чего-то еще. На данный момент удовлетворительного решения задачи не обнаружено, поскольку:
- NFS: см выше
- Samba: после отвала сети нужно повторить mount, что невозможно сделать без указания учетных данных (поправьте, если ошибаюсь)
smbget - частное решение, кроме того, как показала практика, не всегда надежно отрабатывает таймаут
dd + скрипты и творите, что
dd + скрипты и творите, что хотите. )
поясните плз - как dd здесь
поясните плз - как dd здесь поможет?
dd позволяет копировать
dd позволяет копировать отдельно любую часть файла, если он не сможет что-то скопировать, то напишет "где остановился", после восстановления соединения можно сказать ему копировать оставшуюся часть.
Возможно я не учел каких-то подводных камней, да и скрипт придется написать, зато совершенно по барабану где реально находится файл, куда копировать и какое качество связи.
хм.. похоже, так и есть, skip
хм.. похоже, так и есть, skip и seek - это то, что надо. Осталось только победить отвал монтировки и проблема будет решена вполне правильным образом.