ChinaPhone может получать партнерскую комиссию за покупки, сделанные по ссылкам на нашем сайте.
Служба хранения файлов iCloud от Apple — это удобный способ хранения и обмена файлами, но он может удалять важные атрибуты файлов во время синхронизации. Вот как это исправить.
MacOS от Apple и некоторые другие операционные системы хранят описательную информацию о файлах, известную как метаданные, в томах хранилища в расширенных атрибутах (xattr). Расширенные атрибуты содержат дополнительную информацию о файлах, используемых операционными системами.
Сохраняя и извлекая расширенные атрибуты, операционные системы могут изменять информацию о файлах без непосредственного изменения содержимого файла.
Например, в macOS Finder, когда вы выбираете файл и нажимаете Команда-I на клавиатуре Finder открывает окно Get Info, считывает некоторые расширенные атрибуты файла и отображает их.
Некоторые расширенные атрибуты создаются и управляются самой macOS, но приложения могут создавать свои собственные расширенные атрибуты и сохранять их. Каждое приложение должно решить, как оно хочет управлять расширенными атрибутами.
Некоторые файловые системы вообще не поддерживают расширенные атрибуты, например NFS. Если вы копируете файлы в файловую систему, которая не поддерживает расширенные атрибуты, эти атрибуты будут потеряны навсегда.
Большинство распространенных современных файловых систем поддерживают расширенные атрибуты, но могут управлять данными по-разному. В большинстве операционных систем расширенные атрибуты хранятся не вместе с самими файлами, а в томных каталогах метаданных, которые хранят дополнительные атрибуты в списках или базах данных для каждого файла.
Когда файл копируется, метаданные копируются вместе с ним и вставляются в каталоги метаданных целевого тома, чтобы сохранить дополнительные атрибуты. Используя это поведение, операционные системы перемещают метаданные файлов с одного тома на другой вместе с самими файлами во время копирования.
Apple публикует ограниченную, но не всю информацию для разработчиков о системе метаданных macOS и о том, как она работает. В настоящее время нет документации Apple на уровне пользователя для управления метаданными в macOS или iOS.
xattrs и обратная организация доменных имен
Мы знаем, что в macOS расширенные атрибуты и метаданные организованы в обратной нотации домена — так же, как имена пакетов приложений и организация компании. Несколько обратных доменов Apple, используемых для метаданных, включают:
- com.apple.FinderInfo
- com.apple.metadata
- com.apple.TextEncoding
Все расширенные атрибуты не требуются в каждом файле — в некоторых файлах могут полностью отсутствовать xattrs из определенных обратных доменов.
xattrs в iCloud
Когда Apple выпустила iCloud Drive как способ копирования и хранения файлов в облаке, пользователи стали замечать, что некоторые, но не все метаданные файлов были потеряны. Хуже того, такое поведение стало непоследовательным в разных версиях macOS, где-то после выпуска Mac OS X Mojave.
Пользователи заметили, что некоторые — но не все — расширенные атрибуты удаляются из файлов при перемещении в iCloud, а затем копируются обратно.
Как минимум мы знаем, что все расширенные атрибуты из com.apple.FinderInfo и все добавленные пользователем метаданные, включая комментарии Get Info в домене com.apple.metadata, удаляются при перемещении файлов в iCloud.
Расширенные атрибуты, такие как в домене com.apple.TextEncoding и некоторых других доменах, сохраняются. В некотором смысле это имеет смысл, поскольку каждое приложение и даже Finder должны знать, как текстовые данные внутри каждый файл кодируется для корректного отображения.
С другой стороны, Apple может не иметь смысла для iCloud сохранять некоторые атрибуты, такие как com.apple.FinderInfo, поскольку эти данные могут быть уникальными для настроек отображения Finder на Mac каждого пользователя.
Тем не менее удаление комментариев пользователей Get Info из файлов явно означает потерю данных. Хуже того, были сообщения о том, что iCloud Drive удаляет сторонние расширенные атрибуты из файлов в разных версиях macOS при доступе к одним и тем же файлам в iCloud. Это явно плохо.
До сих пор Apple публично не обращалась и не комментировала это, поэтому мы не знаем, является ли это преднамеренным поведением или нерешенной проблемой.
Неудачное исправление (вроде)
Что Apple сделала примерно с 2013 года, так это незаметно добавила своего рода хак разработчика в метаданные файла, называемый расширенным атрибутом. теги.
Система тегов Apple xattrs состоит из добавления одного из четырех символов (C, P, N или S) в конец каждого xattr, которому предшествует символ #’. Поскольку #’ является одним из символов, запрещенных в именах xattr, флаги игнорируются большинством кодов приложений, обрабатывающих xattrs.
Каждый из четырех символов флага соответствует уровню сохранения метаданных xattr в программных интерфейсах Apple. Мы не будем вдаваться в подробности здесь, но достаточно сказать, что флаги P, N и S примерно соответствуют этим уровням сохранения атрибутов:
- C – Сохранить при изменении данных файла.
- P – Сохранить при копировании.
- N — Всегда удалять xattrs — даже при копировании.
- S — всегда сохранять xattrs при синхронизации.
Следовательно, при копировании файлов в iCloud Drive все xattrs файлов, к которым в конце добавлен флаг «#S», будут сохранены.
В настоящее время нет простого способа внести эти изменения в файлы без использования Терминала и точного понимания того, какие изменения следует внести.
И мы должны предупредить вас, что изменение расширенных атрибутов может быть рискованным делом. Любые ошибки в xattrs могут изменить способ отображения файлов в Finder, окнах Get Info, даты создания и изменения файлов, а в некоторых случаях даже могут сделать файлы поврежденными или непригодными для использования.
Мы точно знаем, что в macOS Ventura индексация Spotlight знает, как обрабатывать дополнительные флаги xattr без путаницы или потери данных, но окна Get Info в Finder не всегда это делают. Обычно добавление флагов xattr к xattrs, которые использует Finder Get Info, может сделать файлы нечитаемыми и, возможно, даже недоступными для открытия из Finder.
Также обратите внимание, что Finder всегда учитывать любые флаги xattr во время копирования — например, если флаг ‘#N’ существует в любых xattrs в любом файле во время местный Finder, эти атрибуты всегда будут удалены из скопированных файлов во всех случаях.
С другой стороны, команда копирования файла Терминала (cp) всегда сохранять все флаги xattr во всех случаях – копирование всех xattr во все скопированные файлы, несмотря ни на что.
Вы можете просмотреть довольно скудную информацию разработчика о флагах xattr в Терминале, набрав:
человек xattr_name_with_flags и нажав Возвращаться.
Но если вы не разработчик, предоставленную информацию может быть трудно понять, поскольку она в основном Стандартная библиотека C информация о программировании, включенная в заголовочный файл C xattr_flags.h
xattrs в Терминале
Вы можете просматривать и изменять xattrs файлов в macOS Терминал с использованием xattr команду, но будьте предельно осторожны при этом.
Вы также можете использовать стандартные списки каталогов терминала, чтобы увидеть, есть ли у данного файла xattrs или нет. Для этого в Терминале перейдите в каталог, файлы которого вы хотите просмотреть, с помощью команды «cd», затем введите:
Вы увидите список каталогов, подобный этому:
В левой части списка каталогов указаны разрешения UNIX для каждого файла. Права доступа к файлам, оканчивающиеся на «@» или «+», указывают на файлы, к которым прикреплены расширенные атрибуты.
Чтобы увидеть, к каким обратным доменам принадлежат атрибуты каждого файла, введите:
Список будет таким же, как при использовании «ls -l», за исключением того, что также будут перечислены любые обратные домены xattr, используемые в файлах:
xattr Команда UNIX — это способ просмотра и изменения xattrs в файлах, но, как мы упоминали выше, будьте предельно осторожны при ее использовании. Команда мощная и может легко разрушить удобство использования файла.
Вы можете просмотреть все параметры команды xattr в Терминале, набрав:
мужчина xattr и нажав Возвращаться.
Нажимать Контроль-Z для выхода из системы человека.
Таким образом, не существует простого и удобного способа справиться с xattrs при копировании файлов в iCloud и из него.
Пока для данного флага xattr установлено значение «#S» при синхронизации с iCloud или из него, этот xattr всегда будет сохраняться.
Apple должна исправить это в Finder macOS и в iOS, но это представляет проблему: потребуется добавить тег «#S» ко всем файловым xattrs при синхронизации, и это, вероятно, сломает, по крайней мере, некоторые сторонние приложения, которые читают и писать xattrs, но пока не знаю, как обращаться с тегами.
ресурсы xattr
Разработчик Говард Окли написал несколько приложений и инструментов, помогающих справиться с xattrs, в том числе редактор под названием xattred (рифмуется со словом «рассеянный»), а инструмент командной строки cmpxat который сравнивает и отображает все различия xattr между двумя файлами.
Он также написал Перистые – инструмент для браузера iCloud – и его блог ведет несколько дискуссий по проблеме iCloud xattr.
У него также есть два очень интересных приложения для виртуализацииViable и Liviable, которые запускают виртуальные машины macOS и Linux на компьютерах Apple Silicon Mac.
Если вы можете читать код C, файл с открытым исходным кодом Apple xattr_flags.c
показывает внутреннюю работу кода тега xattr, добавленного Apple в 2013 году.
Надеемся, что в ближайшем будущем Apple найдет решение, которое решит все вышеперечисленные проблемы iCloud и беспрепятственно сохранит метаданные xattr при синхронизации всех файлов iCloud.