
AppleInsider může získat přidruženou provizi za nákupy uskutečněné prostřednictvím odkazů na našich stránkách.
Služba úložiště souborů iCloud společnosti Apple je praktický způsob ukládání a sdílení souborů, ale během synchronizace může odstranit důležité atributy souborů. Zde je návod, jak to opravit.
MacOS společnosti Apple a některé další operační systémy ukládají popisné informace o souborech známých jako metadata na úložných svazcích v rozšířených atributech (xattr). Rozšířené atributy obsahují další informace o souborech používaných operačními systémy.
Ukládáním a načítáním rozšířených atributů mohou operační systémy upravovat informace o souborech bez přímé změny obsahu souboru.
Například v macOS Finder, když vyberete soubor a stisknete Příkaz-I Finder na klávesnici otevře okno Získat informace a přečte některé rozšířené atributy souboru a zobrazí je.
Některé rozšířené atributy vytváří a spravuje samotný macOS, ale aplikace si mohou vytvářet vlastní rozšířené atributy a také je ukládat. Je na každé aplikaci, aby se rozhodla, jak chce spravovat rozšířené atributy.
Některé souborové systémy vůbec nepodporují rozšířené atributy, jako je NFS. Pokud zkopírujete soubory do souborového systému, který nepodporuje rozšířené atributy, tyto atributy budou navždy ztraceny.
Většina běžných moderních souborových systémů podporuje rozšířené atributy, ale může spravovat data různými způsoby. Na většině operačních systémů nejsou rozšířené atributy uloženy se soubory samotnými, ale v katalozích metadat svazků, které ukládají další atributy v seznamech nebo databázích pro každý soubor.
Když se soubor zkopíruje, metadata se zkopírují spolu s ním a vloží se do katalogů metadat cílového svazku, aby se zachovaly další atributy. Pomocí tohoto chování operační systémy přesouvají metadata souborů z jednoho svazku na druhý spolu se samotnými soubory během kopírování.
Apple zveřejňuje omezené, ale ne všechny, vývojářské informace o systému metadat macOS a o tom, jak funguje. V současné době neexistuje žádná uživatelská dokumentace Apple pro správu metadat na macOS nebo iOS.
xattrs a reverzní organizace doménových jmen
Víme, že v macOS jsou rozšířené atributy a metadata organizovány pod reverzní notací domény – podobně jako názvy balíčků aplikací a organizace společnosti. Několik reverzních domén Apple používaných pro metadata zahrnuje:
- com.apple.FinderInfo
- com.apple.metadata
- com.apple.TextEncoding
Všechny rozšířené atributy nejsou vyžadovány v každém souboru – v některých souborech mohou zcela chybět xattrs z určitých reverzních domén.
xattrs v iCloudu
Když Apple vydal iCloud Drive jako způsob kopírování a ukládání souborů v cloudu, uživatelé si začali všímat, že některá, ale ne všechna metadata souborů byla ztracena. Ještě horší je, že toto chování se stalo nekonzistentním napříč různými verzemi macOS, někdy kolem vydání Mac OS X Mojave.
Uživatelé si všimli, že některé – ale ne všechny – rozšířené atributy jsou při přesunu do iCloudu odstraněny ze souborů a poté zkopírovány zpět.
Minimálně víme, že všechny rozšířené atributy z com.apple.FinderInfo a všechna metadata přidaná uživatelem včetně komentářů Get Info v doméně com.apple.metadata se při přesunu souborů do iCloudu smažou.
Rozšířené atributy, jako jsou ty v doméně com.apple.TextEncoding a některých dalších doménách, jsou zachovány. Svým způsobem to dává smysl, protože každá aplikace a dokonce i Finder musí znát textová data uvnitř každý soubor je zakódován, aby se správně zobrazil.
Na druhou stranu nemusí mít pro Apple pro iCloud smysl zachovat některé atributy, jako je com.apple.FinderInfo, protože tato data mohou být jedinečná pro předvolby zobrazení Finderu na Macu každého uživatele.
Odstranění komentářů uživatelů Get Info souborů je však zjevně ztrátou dat. Horší je, že se objevily zprávy o tom, že iCloud Drive odstraňuje rozšířené atributy třetích stran ze souborů v různých verzích macOS, když je přístup ke stejným souborům na iCloudu. To je jednoznačně špatné.
Apple to zatím veřejně neřešil a nekomentoval, takže nevíme, zda se jedná o zamýšlené chování nebo neřešený problém.
Šikovná oprava (tak nějak)
To, co Apple udělal někdy kolem roku 2013, je potichu přidat jakýsi vývojářský hack do metadat souboru nazvaný rozšířený atribut značky.
Systém značek xattrs společnosti Apple spočívá v připojení jednoho ze čtyř znaků (C, P, N nebo S) na konec každého xattr, kterému předchází znak #‘. Protože #‘ je jeden ze znaků zakázaných v názvech xattr, většina aplikačního kódu, který zpracovává xattrs, příznaky ignoruje.
Každý ze čtyř příznaků odpovídá úrovni uchování metadat xattr v programovacích rozhraních Apple. Nebudeme se zde zabývat těmito detaily, ale stačí říci, že příznaky P, N a S odpovídají zhruba těmto úrovním zachování atributů:
- C – Zachovat při změně dat souboru.
- P – Zachovat během kopírování.
- N – Vždy odizolujte xattrs – i při kopírování.
- S – Při synchronizaci vždy zachovat xattrs.
Proto při kopírování souborů na iCloud Drive budou zachovány všechny soubory xattrs, které mají na konci připojen příznak „#S“.
V současné době neexistuje snadný způsob, jak provést tyto úpravy souborů, aniž byste použili Terminál a přesně pochopili, jaké změny by měly být provedeny.
A měli bychom vás varovat, že změna rozšířených atributů může být riskantní. Jakékoli chyby v xattrs mohou změnit způsob zobrazení souborů ve Finderu, v oknech Get Info, data vytvoření a úpravy souborů a mohou dokonce v některých případech způsobit poškození nebo nepoužitelnost souborů.
S jistotou víme, že od macOS Ventura indexování Spotlight ví, jak zacházet s dalšími příznaky xattr bez zmatků nebo ztráty dat, ale okna Get Info Finderu ne vždy. Obvykle přidání příznaků xattr do xattrs, které používá Finder’s Get Info, může způsobit, že soubory budou nečitelné a možná dokonce neotevřené z Finderu.
Všimněte si také, že Finder bude vždy respektovat všechny příznaky xattr během kopírování – například pokud příznak ‚#N‘ existuje v jakémkoli xattrs v jakémkoli souboru během místní Finder copy, tyto atributy budou vždy ve všech případech odstraněny z kopírovaných souborů.
Na druhou stranu příkaz Terminal file copy (cp) bude vždy zachovat všechny příznaky xattr ve všech případech – kopírování všech xattrs ze všech zkopírovaných souborů bez ohledu na to, co.
Poměrně řídké informace o vývojářích o příznacích xattr v Terminálu můžete zobrazit zadáním:
muž xattr_name_with_flags a lisování Vrátit se.
Pokud však nejste vývojář, poskytnuté informace mohou být obtížně srozumitelné, protože se většinou jedná o informace o programování standardní knihovny C zahrnuté v záhlaví souboru C xattr_flags.h
xattrs v Terminálu
Xattr souborů můžete zobrazit a změnit v terminálu macOS pomocí příkazu xattr, ale buďte při tom velmi opatrní.
Můžete také použít standardní výpisy adresářů terminálu, abyste zjistili, zda daný soubor obsahuje xattrs nebo ne. Chcete-li tak učinit, přejděte v Terminálu do adresáře, jehož soubory chcete zobrazit, pomocí příkazu „cd“ a zadejte:
Zobrazí se seznam adresáře, podobný tomuto:

Na levé straně seznamu adresářů jsou oprávnění UNIX každého souboru. Oprávnění k souborům končící na „@“ nebo „+“ označují soubory, které mají připojené rozšířené atributy.
Chcete-li zjistit, do kterých reverzních domén patří atributy jednotlivých souborů, zadejte:
Výpis bude stejný jako při použití „ls -l“, kromě toho, že všechny reverzní domény xattr použité v souborech budou také uvedeny:

The xattr UNIXový příkaz je způsob, jak zobrazit a změnit xattrs na souborech, ale jak jsme zmínili výše, buďte při jeho používání extrémně opatrní. Příkaz je výkonný a může snadno zničit použitelnost souboru.
Všechny možnosti příkazu xattr můžete zobrazit v Terminálu zadáním:
muž xattr a lisování Vrátit se.
lis Control-Z opustit systém člověka.
Stručně řečeno, neexistuje žádný jednoduchý a snadný způsob, jak se vypořádat s xattrs při kopírování souborů do az iCloud.
Dokud je příznak daného xattr při synchronizaci do nebo z iCloud nastaven na ‚#S‘, bude tento xattr vždy zachován.
Apple by to měl opravit v macOS Finder a v iOS, ale to představuje problém: vyžadovalo by to přidání značky ‚#S‘ ke všem souborům xattrs při synchronizaci, což by pravděpodobně narušilo alespoň některé aplikace třetích stran, které čtou a psát xattrs, ale ještě nevím, jak zacházet se značkami.
xattr zdroje
Vývojář Howard Oakley napsal několik aplikací a nástrojů, které pomáhají vypořádat se s xattrs – včetně editoru nazvaného xattred (rýmuje se s ‚scattered‘) a nástroj příkazového řádku cmpxat který porovnává a zobrazuje všechny rozdíly xattr mezi dvěma soubory.
Je také napsaný Cirrus – nástroj prohlížeče iCloud – a jeho blog má několik diskusí o problému xattr iCloud.
Má také dvě velmi zajímavé virtualizační aplikace, Viable a Liviable, které provozují virtuální stroje MacOS a Linux na počítačích Apple Silicon Mac.
Pokud umíte číst kód C, otevřený zdrojový soubor společnosti Apple xattr_flags.c ukazuje vnitřní fungování kódu značky xattr, který Apple přidal v roce 2013.
Doufejme, že v blízké budoucnosti Apple dospěje k řešení, které vyřeší všechny výše uvedené problémy iCloud a bezproblémově zachová metadata xattr napříč všemi synchronizacemi souborů iCloud.
Zdroj: appleinsider.com