AudionAudion

ТРАНСФЕР ДАННЫХ

TRANSFER_RU.md

ТРАНСФЕР ДАННЫХ

Один раздел на всё: папка на этой машине, сетевая шара, сервер по SFTP, облако. Раньше их было два — Robocopy отдельно, RClone отдельно, — и чтобы выбрать кнопку, надо было сперва знать, какой инструмент куда дотягивается. Теперь выбирают не инструмент, а действие: что сделать и куда отправить. Движок выбирается сам и назван в окне.

Пять операций

ОперацияЧто происходит с назначениемrcloneCLI аудитора
Односторонняяновое приезжает, лишнее остаётся житьcopysync
Зеркалоназначение становится копией источника, лишнее удаляетсяsyncbackup
Перенестиприезжает и пропадает с источникаmove
Двусторонняяобе стороны догоняют друг другаbisyncsync2
Сверитьничего не пишется, только сравнениеcheckcompare

Зеркало и Односторонняя — не одно и то же с разной галочкой удаления.

У зеркала назначение — копия и ничего своего не имеет. Так работает эталонная машина и её реплики: изменилось на эталоне — разъехалось по всем, включая удаления. Это самый частый режим для файлов.

У односторонней у назначения своя жизнь. Что-то легло на одно облако и должно доехать до другого, где уже лежит своё. Сделать второе облако точной копией первого — значит стереть то, что там было.

У операции «Перенести» нет команды в CLI аудитора. Кнопка там не предлагается, а если позвать напрямую — будет ошибка. Молчаливая подмена переноса на зеркало обошлась бы дороже отказа.

Кто везёт

Выбор не спрашивают, его показывают в окне строкой «движок и почему».

RClone берётся, когда в паре есть облако или сохранённое подключение, когда адрес — ссылка http(s)://, когда операция двусторонняя, и когда сверяют по хешу.

Robocopy берётся на всё остальное — папка в папку, папка в шару. Он не убран за ненадобностью, он понижен из раздела в движок: на дереве папок он быстрее, и он один из двух переносит NTFS-атрибуты, которые rclone на Windows теряет.

Robocopy отвечает битовой маской, а не привычным «ноль или ошибка»: 0..7 — это успех, 8 и выше — сбой. Код 1 означает «файлы скопированы» и встречается чаще всех. Обёртки, проверяющие != 0, объявляют ошибкой каждое удачное копирование.

Один эталон, список машин

Назначение — не одно поле, а список. Разложить с эталонной машины на четыре реплики — это один запуск, а не четыре.

Вся раскладка собирается до того, как тронется первый байт: для каждой машины уже известно, каким движком поедет, и отказ виден сразу, а не на середине. Если пара невозможна — например, копирование папки в папку просят сделать через облако, — это будет сказано до старта.

Маски

Маски берутся из тех же групп расширений, что и везде в программе. docx и *.docx — одно и то же, точка внутри означает имя файла целиком: Thumbs.db останется Thumbs.db, а не превратится в *.thumbs.db. Регистр не различается, *.DOCX рядом с *.docx не удвоится.

Отрицательные маски — то, что не должно уехать. Robocopy получает их через /XF. У rclone включения и исключения не складываются: если задан хоть один --include, всё остальное и так отсечено, и исключения не передаются.

Начиная с 12 масок список уходит в файл через --filter-from, а не выкладывается в командную строку. В файле сперва исключения, потом включения, в конце - *.

Проверено: 301 маска в Robocopy работает. Ограничение в 128 относится к /MT — это число потоков, а не масок.

У rclone *.docx ловит файл на любой глубине. **/*.docx — не то же самое: он пропускает файлы верхнего уровня.

Пробный прогон

Галочка «Пробный прогон» есть у всех операций и ничего не пишет. Robocopy получает /L /BYTES /FP, rclone — --dry-run.

Пробные прогоны намеренно устроены дешевле настоящих: их бывает много, и они не должны стоить столько же, сколько работа.

Сначала упаковать

Мелкие файлы по сети идут медленно, и виновата не скорость канала. Замерено на живом сервере через SFTP:

Разница в пятьдесят раз, при загрузке процессора 19.7%. В процессор не упирается, значит больше ядер не помогут; время уходит на то, что сеть здоровается с каждым файлом отдельно. --sftp-concurrency тут тоже не помогает: он про параллельность внутри одного файла.

Помогает одно — отправить один файл вместо трёхсот. Переключатель «Сначала упаковать» собирает источник в архивы, кладёт их в workspace\transfer_pack\<имя> и отправляет уже оттуда. Если упаковать нечего — источник не на этой машине, а на удалённой стороне — будет сказано об этом, а не тихий обычный перенос.

Потолок удалений

--max-delete доступен и не навязан. Значения по умолчанию нет: это была бы догадка о том, как человек работает, а релиз, в котором отваливается сотня старых файлов, — обычное дело.

Двусторонняя память

bisync помнит прошлый прогон списком файлов. rclone держал бы его в %LOCALAPPDATA%; здесь он лежит в config\bisync, вместе с проектом.

Не в workspace: чистка workspace опустошает папку, и потеря этих списков ломается тихо — следующий запуск потребует полной пересинхронизации, то есть ровно того единственного момента, когда двусторонней синхронизации надо объяснить, какая сторона главная.

Что рядом

Все проекты