LINUX.ORG.RU

Перемещение файлов торрента во время раздачи


0

1

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

★★★★

я так во время скачки делал — всё получилось

teod0r ★★★★★
()

Не может, если это делается за достаточно короткий промежуток времени.

crowbar
()

Может, но вероятность крайне мала. Если успеет попытаться открыть файл после перемещения, но до создания ссылки.

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

А если перемещение идёт в пределах одного раздела, то вместо мягких ссылок можно использовать жесткие.

NeXTSTEP ★★
()

Поставь на паузу и перемещай. Меньше вероятность, что торрент-клиенту захочется обращаться к файлу.

aidan ★★★★
()
Ответ на: комментарий от aidan

А даже если и обломается - то просто пометит торрент как broken, дальше сделаешь verify и всё заработает. Всё клиенто-зависимо.

aidan ★★★★
()

всё получилось

Вопрос в том, следует ли так делать.

Поставь на паузу и перемещай

Не хочется. Если проблем больших не предвидится, я бы предпочёл не заморачиваться.

Если успеет попытаться открыть файл после перемещения, но до создания ссылки

Это да, но это вылезет сразу же, а после создания ссылки уже нет. Накалякал скрипт, который делает перемещение и ссылку, чтобы было почти атомарно.

Других косяков я пока не придумал.

Xenesz ★★★★
() автор топика

Так, разбиваем задачу на два случая:

1. Файл открыт, в него что-то льется. Тогда перемещение файла (по крайней мере в пределах одного раздела) никак не повлияет, ибо программа будет обращаться к нему по некоторому дескриптору, и с этой точки зрения все равно где файл лежит. Даже симлинк можешь не создавать. Это общий принцип unix.

2. Открытие/закрытие файла (или перезапуск торрент-клиента). Иными словами, может ли торрент-клиент работать с симлинками. Здесь ответ такой: смотря какой торрент-клиент. Мой Deluge не умеет (помечает симлинк как проблемную закачку). Говорят, Transmission умеет.

Kroz ★★★★★
()
Ответ на: комментарий от Xenesz

Не хочется.

А в чем проблема-то, ни секунды раздачи потерять нельзя? Да к тому же нафига тебе эти костыли со ссылками? У transmission, например, из коробки есть функция переместить данные. Практически уверен, что в других клиентах тоже можно указать новое местоположение файлов.

Worron ★★★
()
Ответ на: комментарий от Worron

ни секунды раздачи потерять нельзя?

Поставишь на паузу — личеры отвалятся и хрен их знает, когда снова прицепятся.

из коробки есть функция переместить данные

Попадаются отдельные торренты и файлы с незначащими именами, трансмишен тут не помощник. В transmission-qt даже название, видимое в клиенте, нельзя поменять.

Xenesz ★★★★
() автор топика
Ответ на: комментарий от Kroz

программа будет обращаться к нему по некоторому дескриптору

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

может ли торрент-клиент работать с симлинками

Слава ТНБ, трансмишен может.

Xenesz ★★★★
() автор топика

В код смотри, скородрочер.

anonymous
()
Ответ на: комментарий от Xenesz

Ну, тогда у тебя все ответы есть, верно?

Kroz ★★★★★
()
Ответ на: комментарий от Xenesz

файлы с незначащими именами, трансмишен тут не помощник

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

Worron ★★★
()

Перемещаю файлы в контекстном меню файла в торрент клиенте.

f1xmAn ★★★★★
()
Ответ на: комментарий от Xenesz

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

anonymous
()

Зачем это нужно, когда в любом нормальном торрент-клиенте есть функция «Переместить данные»?

KivApple ★★★★★
()
Ответ на: комментарий от aidan

Transmission version need to be 2.80+

Ага, вот оно че. Ценители стабильности немного не в курсе были, спасибо.

Worron ★★★
()
Ответ на: комментарий от aidan

У меня более старая версия. Тикет называется «Change/rename torrent folder name» — так реализовано или по-другому? В каком-то клиенте можно было менять отображаемое в гуе название, не трогая ФС.

Xenesz ★★★★
() автор топика
Ответ на: комментарий от KivApple

функция «Переместить данные»?

В трансмишене есть опция «set location» для перемещения данных в другой каталог. Это не то, что мне нужно.

Xenesz ★★★★
() автор топика
Ответ на: комментарий от Xenesz

В transgui (http://code.google.com/p/transmisson-remote-gui/) есть F6 - Set data location и F2 - Rename. В webui этого точно нет. Про оффициальные transmission-gtk/qt - не знаю. В rpc этот метод добавили, а все ли клиенты поддержали - не ведаю.

aidan ★★★★
()

Постоянно такое практикую уже много лет :) Раньше rtorrent, сейчас - transmission. Разделы для закачек и для хранения разные, плюс переименование файлов при хранении в единую систему имён.

KRoN73 ★★★★★
()
Ответ на: комментарий от Xenesz

Тикет называется «Change/rename torrent folder name» — так реализовано или по-другому?

Это 2 разных действия. Сменить download_dir и переименовать сам файл/каталог. Реализованы оба. Но где это поддержано - смотри выше.

aidan ★★★★
()
Ответ на: комментарий от KRoN73

Разделы для закачек и для хранения разные

Как реализовано перемещение? Если средствами клиента — раздача при этом приостанавливается?

Xenesz ★★★★
() автор топика
Ответ на: комментарий от Xenesz

Как реализовано перемещение?

mv & ln

Чаще всего этим скрипт занимается, который находит данные фильма на Кинопоиске, перемещает с перименовыванием в постоянное хранилище, ставит симлинки по оригинальному пути + симлинки в классификации по годам/жанрам/людям/оценкам/странам.

Если не кино или кино не художественное (что редко), то то же самое, но вручную.

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

KRoN73 ★★★★★
()

Проблемы тех, кто не скачивает сразу куда надо

Deleted
()
Ответ на: комментарий от Xenesz

Переименовать файл можно в свойствах торрента.

goingUp ★★★★★
()

qbtorrent умеет перемещать файло во время раздачи сам, без костылей.

Goury ★★★★★
()
Ответ на: комментарий от Xenesz

Вопрос в том, следует ли так делать.

можно. Побьётся конечно(на загрузке), но это не страшно, битые чанки скачаются ещё раз. А на раздаче просто ты кого-то обломаешь, и этому кому-то придётся качать лишний мегабайт с тебя.

Это да, но это вылезет сразу же, а после создания ссылки уже нет. Накалякал скрипт, который делает перемещение и ссылку, чтобы было почти атомарно.

оно и так атомарно. Старая копия остаётся на месте, пока она кому-то нужна. Т.е. удалённый файл продолжает раздаваться, но новые личеры тянут уже из копии. Когда насосётся последний личер сосущий удалённый файл, тогда он и удалится с диска. Если файл большой, то это можно заметить по свободному месту — файла уже нет, а место занято. Ну а в /proc/PID/fs/ лежит ссылка на файл, который удалён (битая). И ещё lsof покажет как [deleted].

emulek
()
Ответ на: комментарий от Worron

Названия файлам или торренту нельзя поменять это да, данной фичи не хватает.

это косорылость самого протокола, в ed2k исправлено. В торрентах иногда делают кривыми костылями.

emulek
()

Я почти уверен, что перемещение происходит в пределах одной файловой системы, так что используй mkdir и ln для создания жестких линков на файлы.

sdio ★★★★★
()
Ответ на: комментарий от KRoN73

Есть, конечно, малая вероятность, что раздача попытается начаться в момент копирования

нет такой вероятности. Она

1. копирует cat X>Y

2. одновременно удаляет имя X и переименовывает Y=>X

3. теперь старые личеры тянут из старого X(без имени), а вот новые личеры тянут из нового X, который бывший Y

4. когда безымянный старый X будет никому не нужен, он удалится с диска, и место освободится.

И да, transmission ничего для этого не делает, как и vim или там sed. Это проблемы ФС.

emulek
()
Ответ на: комментарий от emulek

Побьётся конечно(на загрузке), но это не страшно, битые чанки скачаются ещё раз. А на раздаче просто ты кого-то обломаешь, и этому кому-то придётся качать лишний мегабайт с тебя.

это я писал про говнофс типа fat&ntfs.

emulek
()
Ответ на: комментарий от sdio

что перемещение происходит в пределах одной файловой системы, так что используй mkdir и ln для создания жестких линков на файлы.

mv лучше тебя это знает.

emulek
()
Ответ на: комментарий от sdio

ну и зря. Потому что ты сказал глупость. mv сама делает хардлинки, и ты можешь в этом убедится выполнив ls -li до и после mv. Инод файла не меняется, т.е. создаётся хардлинк, и старое имя удаляется. Причём с каталогом у тебя(командой ln/mkdir) так не получится, а вот mv умеет.

emulek
()
Ответ на: комментарий от emulek

Спасибо К.О., как работает mv я знаю
Я советовал, не делать mv + ln -s, а просто сделать директорию с желаемым именем и хард линки на файлы (с вменяемыми именами) — это для человека, а для торента оставить как есть, т.е. не удалять (места все-равно не прибавится)

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
Ответ на: комментарий от sdio

Я советовал, не делать mv + ln -s, а просто сделать директорию с желаемым именем и хард линки на файлы (с вменяемыми именами) — это для человека, а для торента оставить как есть, т.е. не удалять (места все-равно не прибавится)

потом задолбаешься искать все хардлинки, когда надо будет удалить. Да, я знаю про find / -inum.

emulek
()
Ответ на: комментарий от emulek

Их не надо искать.

1. Из торрента удаляешь раздачу.

2. Из директории (для людей) удаляешь просмотренное кино или что там у него.

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
20 февраля 2014 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.