Вопрос или проблема
На macOS у меня есть два больших (по 8 ТБ) внешних диска с библиотеками аудиосэмплов, содержащие в настоящее время около 6 ТБ данных, которые должны поддерживаться идентично.
Эти два диска в настоящее время идентичны через процесс копирования с помощью dd, но мне нужно сохранять их таким образом при изменениях и обновлениях, идеальным вариантом было бы двунаправленное синхронизирование. Естественно, я обратился к Unison за помощью в этом.
Я попытался настроить Unison (v2.53.5) с двумя локальными корнями:
root = /Volumes/Audio
root = /Volumes/Audio\ 1
Примечание: Кавычки не сработали для пробела в имени пути, также пробовал без обратной косой черты.
Наибольшие проблемы, с которыми я сталкиваюсь, кажутся следующими:
-
Хотя Unison поддерживает свои архивные файлы, как и ожидалось, в директории
~/.unison
, он также пытается записать временные данные в родительскую директорию моего второго корня, что крайне неудобно, поскольку это значит попытку записи в/Volumes
:Не удалось []: Ошибка при создании директории:
Доступ запрещен [mkdir(/Volumes/.unison.Audio\ 1.060b577813c414eb57b579a48c18b778.unison.tmp)]Ошибка с правами доступа имеет смысл, так как unison работает от имени соответствующего пользователя (меня) для внешних дисков, а не root/wheel. Я не хочу делать sudo или устанавливать setuid.
Тем более, что директория /Volumes не место для кеширования временных данных! И я не понимаю, зачем ему нужно сначала развертывать копии целых файлов. Я искал способ указать unison записывать эти временные данные в другую директорию (включая рассмотрение rootaliases и т.д.), но не нашел решения.
-
Существует ли способ указать временное местоположение для Unison?
Чтобы временно обойти проблему, я решил использовать sudo для unison, чтобы он мог записывать в
/Volumes
. Это вызвало следующую проблему:
-
Unison пытается сохранить полные файлы в этой временной директории. Эти файлы уже существуют локально на обоих внешних дисках, доступные для сравнения/контроля суммы/псевдо-индексации и т.д., поэтому неясно, зачем нужна третья временная копия.
Суть в том, что 6 ТБ внешних данных не поместятся на моём системном/корневом диске и не должны там находиться изначально. Заполнение моего системного/корневого диска файлами в конечном итоге остановит мою систему, поэтому мне нужно прервать процесс.
- Существует ли способ синхронизации через unison без записи в директорию
/Volumes
или двойного дублирования больших структур директорий на мой системный диск?
И последний вопрос:
-
Оба диска должны быть названы
Audio
, чтобы мое программное обеспечение указывало на правильный путь. Когда macOS монтирует диски с одинаковыми именами, какAudio
, второй монтируется как/Volumes/Audio 1
. Это ожидаемо и именно поэтому два корня объявлены таким образом. Единственное условие заключается в том, чтоAudio
иAudio 1
могут по-разному относиться к любому диску, в зависимости от того, какой из них был подключен первым. Это означает, что то, что unison предполагал быть корнем 1 в прошлый раз, может стать корнем 2 в этот раз.Поскольку диски должны быть идентичны после каждого синхронизации через uni Unison, может быть, это не проблема, но я не знаю:
- Постановка этого вопроса является ли проблемой для Unison?
Ответ или решение
На macOS вы имеете дело с двумя большими (8 ТБ) внешними жесткими дисками аудиобиблиотек образцов, которые в настоящее время содержат около 6 ТБ данных и должны быть поддерживаемыми в идентичном состоянии. Использование Unison для синхронизации этих дисков является разумным решением, однако возникли некоторые проблемы, которые следует решить.
1. Указание временного каталога для Unison
Unison по умолчанию пытается записывать временные данные в родительский каталог второго корня, что приводит к ошибке разрешения при попытке записи в /Volumes
. К сожалению, Unison не предоставляет прямой поддержки для изменения места назначения временных файлов непосредственно через конфигурацию. Однако, возможно, вы можете использовать переменную окружения TMPDIR
, чтобы указать альтернативный каталог для временных файлов. Попробуйте выполнить следующую команду перед запуском Unison:
export TMPDIR=/путь/к/вашему/временному/каталогу
Замените /путь/к/вашему/временному/каталогу
на путь к каталогу, где Unison может записывать временные файлы без проблем с разрешениями. Это должно помочь избежать необходимости выполнения Unison с привилегиями sudo
.
2. Синхронизация без записи в директорию /Volumes
Чтобы избежать записи больших файлов в каталоги на системном диске, вы можете рассмотреть возможность использования опции -no-backup
, которая предотвратит создание резервных копий удаляемых или измененных файлов. Это может снизить потребность в двойной репликации. Однако вам все равно придется убедиться, что Unison корректно синхронизирует файлы между двумя приводами без создания временной копии на системном диске.
Тем не менее, важно отметить, что если в процессе синхронизации возникает необходимость временных файлов, может потребоваться пересмотреть стратегию синхронизации или использовать другой инструмент, поддерживающий желаемую функциональность без таких ограничений.
3. Вопрос о наименовании дисков и их идентичности
С точки зрения Unison, факт того, что ваши диски могут быть смонтированы в разных каталогах (как Audio
и Audio 1
), не должен быть проблемой, поскольку вы всегда будете указывать оба корня. Unison будет сравнивать файлы на двух указанных дисках, независимо от их фактических имен. Однако будет логично использовать переменные окружения для хранения путей к каждому диску перед запуском Unison, таким образом, вы сможете избежать путаницы с тем, какой диск подключен первым.
Вы можете создать небольшой скрипт, который будет определять, какой из дисков был подключен первым и сохранять пути в переменные, например:
if [ -e /Volumes/Audio ]; then
ROOT1="/Volumes/Audio"
ROOT2="/Volumes/Audio 1"
else
ROOT1="/Volumes/Audio 1"
ROOT2="/Volumes/Audio"
fi
unison $ROOT1 $ROOT2
Резюме
Вам удалось выявить важные проблемы при использовании Unison для синхронизации двух внешних жестких дисков. Решения, предложенные выше, касаются изменения временного каталога, минимизации избыточных записей на системный диск и управления путями при монтировании дисков. Возможно, если Unison не будет обеспечивать необходимую гибкость, стоит рассмотреть альтернативные инструменты для синхронизации, такие как rsync, которые могут предложить более гибкие параметры для ваших случаев использования.