mc mirror --preserve s3old s3newmc du s3old
mc du s3newfor b in $(mc ls s3old | awk '{print $NF}'); do mc version enable s3new/$b; donemc mirror --preserve --overwrite s3old s3newГлавное, что стоит знать до запуска: mc mirror тянет только текущие версии объектов. Если на источнике включено версионирование, старые версии и delete-маркеры на приёмник не поедут, и команда об этом не предупредит. Для хранилища бэкапов это чаще всего приемлемо — нужны актуальные копии. Для хранилища, где версии сами по себе ценны, mirror не подходит: нужна репликация бакетов.
Версионирование на приёмнике включается до копирования: включённое задним числом оно не восстановит того, что уже приехало одной версией.
--preserve сохраняет метаданные и время модификации, --overwrite нужен для повторного прохода — без него дельта не перезапишет изменившиеся объекты.
Сверять результат надёжнее по mc du с обеих сторон, а не по ощущению «команда отработала». Расхождение в объёме — ожидаемо ровно на потерянных версиях; расхождение в числе объектов при выключенном версионировании означает, что что-то не доехало.
Первичная синхронизация на сотни гигабайт идёт часами, и узкое место обычно не полоса, а IOPS на мелких объектах: 90 тысяч файлов поедут заметно дольше, чем те же гигабайты в крупных. Запускать в screen или tmux — разрыв SSH оборвёт копирование.