Share via


Az Azure NetApp Files elérési úthosszainak ismertetése

A fájl és az elérési út hossza a fájl elérési útjának Unicode-karaktereinek számát jelenti, beleértve a könyvtárakat is. Ez a korlát az egyes karakterhosszok egyik tényezője, amelyet a karakter mérete bájtban határoz meg. Az NFS és az SMB például 255 bájt elérési utat engedélyez. Az ASCII fájlkódolási formátuma 8 bites kódolást használ, ami azt jelenti, hogy az ASCII fájlelérési útvonal összetevői (például fájl- vagy mappanév) legfeljebb 255 karakter hosszúságúak lehetnek, mivel az ASCII-karakterek mérete 1 bájt.

Az alábbi táblázat az Azure NetApp Files-kötetek támogatott összetevőjét és elérési útját mutatja be:

Összetevő NFS SMB
Elérésiút-összetevő mérete 255 bájt 255 bájt
Elérési út hossza méret Korlátlan Alapértelmezett: 255 bájt
A windowsos verziók maximális száma: 32 767 bájt
A keresztirányú út maximális mérete 4096 bájt 255 bájt

Feljegyzés

A kétprotokollos kötetek a legalacsonyabb maximális értéket használják.

Ha SMB-megosztás neve van \\SMB-SHARE, a megosztás neve 11 Unicode-karaktert ad hozzá az elérési út hosszához, mivel mindegyik karakter 1 bájt. Ha egy adott fájl \\SMB-SHARE\apps\archive\fileelérési útja 29 Unicode karakter; minden karakter, beleértve a perjeleket is, 1 bájt. Az NFS-csatlakoztatások esetében ugyanazok a fogalmak érvényesek. A csatlakoztatási útvonal /AzureNetAppFiles 17 Unicode karakterből áll, egyenként 1 bájtból.

Az Azure NetApp Files ugyanazt az elérési utat támogatja az SMB-megosztásokhoz, amelyeket a modern Windows-kiszolgálók támogatnak: legfeljebb 32 767 bájt. A Windows-ügyfél verziójától függően azonban egyes alkalmazások nem támogatják a 260 bájtnál hosszabb elérési utakat. Az egyes elérési utak összetevői (perjelek, például fájl- vagy mappanevek) legfeljebb 255 bájtot támogatnak. Az Azure NetApp Files fájlútvonalában például az "A" latin nagybetűt használó fájlnév (amely karakterenként 1 bájtot vesz igénybe) nem haladhatja meg a 255 karaktert.

# mkdir 256charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

mkdir: cannot create directory ‘256charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’: File name too long 

# mkdir 255charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

# ls | grep 255 
255charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

Karakterméretek felismerése

A Linux segédprogrammal uniutils megkeresheti a Unicode-karakterek bájtméretét a karakterpéldány több példányának beírásával és a bájtok mező megtekintésével.

1. példa: Az A latin nagybetű minden használatkor 1 bájttal növekszik (egyetlen 41 hexa értékkel, amely 0–255 ASCII-karaktertartományban van).

# printf %b 'AAA' | uniname
character  byte  UTF-32   encoded as glyph      name
        0     0  000041   41             A      LATIN CAPITAL LETTER A
        1     1  000041   41             A      LATIN CAPITAL LETTER A
        2     2  000041   41             A      LATIN CAPITAL LETTER A

1. eredmény: Az AAA név 255 bájtból 3 bájtot használ.

2. példa: A japán karakter 字 példányonként 3 bájtot növekményes. Ezt a mezőként kódolt 3 különálló hexakódérték (E5, AD, 97) alapján is ki lehet számítani. Minden hexa érték 1 bájtot jelöl:

# printf %b '字字字' | uniname
character  byte  UTF-32   encoded as  glyph     name
        0     0  005B57   E5 AD 97       字      CJK character Nelson 1281
        1     3  005B57   E5 AD 97       字      CJK character Nelson 1281
        2     6  005B57   E5 AD 97       字      CJK character Nelson 1281

2. eredmény: A 字字字 nevű fájl 255-ből 9 bájtot használ.

3. példa: A diaeresis Ä betű példányonként 2 bájtot használ (C3 + 84).

# printf %b 'ÄÄÄ' | uniname
character  byte  UTF-32   encoded as     glyph  name
        0     0  0000C4   C3 84          Ä      LATIN CAPITAL LETTER A WITH DIAERESIS
        1     2  0000C4   C3 84          Ä      LATIN CAPITAL LETTER A WITH DIAERESIS
        2     4  0000C4   C3 84          Ä      LATIN CAPITAL LETTER A WITH DIAERESIS

3. eredmény: Az ÄÄÄ nevű fájl 255-ből 6 bájtot használ.

4. példa: Egy speciális karakter, például az 😃 emoji egy meghatározatlan tartományba esik, amely meghaladja a Unicode-karakterekhez használt 0–3 bájtot. Ennek eredményeképpen helyettesítő párt használ a karakterkódoláshoz. Ebben az esetben a karakter minden példánya 4 bájtot használ.

# printf %b '😃😃😃' | uniname
character  byte       UTF-32 encoded as  glyph   name
        0     0  01F603   F0 9F 98 83    😃      Character in undefined range
        1     4  01F603   F0 9F 98 83    😃      Character in undefined range
        2     8  01F603   F0 9F 98 83    😃      Character in undefined range 

4. eredmény: Egy elnevezett 😃😃😃 fájl 255 bájtból 12 bájtot használ.

A legtöbb emoji a 4 bájtos tartományba esik, de akár 7 bájt is lehet. A több mint ezer szabványos emoji közül körülbelül 180 található az alapszintű többnyelvű síkban (BMP), ami azt jelenti, hogy az ügyfél nyelvtípusának támogatásától függően szövegként vagy emojiként jeleníthetők meg az Azure NetApp Filesban.

A BMP-ről és más Unicode-síkokról további információt az Azure NetApp Files kötetnyelveinek ismertetése című témakörben talál.

Karakter bájt hatása az elérési út hosszára

Bár az elérési út hossza a fájl- vagy mappanévben szereplő karakterek száma, valójában az elérési út támogatott bájtjainak mérete . Mivel minden karakter hozzáad egy bájtméretet egy névhez, a különböző nyelvek különböző karakterkészletei támogatják a fájlnév hosszát.

Vegyük példaként a következő forgatókönyveket:

  • Egy fájl vagy mappa megismétli a latin betűs "A" karaktert a fájlnévhez. (például AAAAAAAA)

    Mivel az "A" 1 bájtot és 255 bájtot használ az elérési út összetevőjének méretkorlátja, a fájlnévben 255 "A" példány lesz engedélyezve.

  • Egy fájl vagy mappa a nevében megismétli a japán 字 karaktert.

    Mivel a "字" mérete 3 bájt, a fájlnév hosszának korlátja 85 字 (3 bájt * 85 = 255 bájt) vagy összesen 85 karakter.

  • Egy fájl vagy mappa megismétli a rinning face emojit (😃) a nevében.

A grinning face emoji (😃) 4 bájtot használ, ami azt jelenti, hogy egy olyan fájlnév, amelynek csak az emojija lehetővé teszi összesen 64 karakter (255 bájt/4 bájt) használatát.

  • A fájlok vagy mappák különböző karakterek kombinációját használják (például Név字😃).

Ha különböző bájtméretű karaktereket használnak egy fájl vagy mappa nevében, az egyes karakterek bájtmérete a fájl vagy a mappa hosszában van. A Name字😃 fájl- vagy mappaneve a teljes 255 bájt hosszúságú 1+1+1+3+4 bájtot (11 bájt) használná.

Speciális hangulatjelek fogalmai

A speciális hangulatjelek, például a jelző emojik a BMP-besorolás alatt léteznek: az emoji az ügyféltámogatástól függően szövegként vagy képként jelenik meg. Ha egy ügyfél nem támogatja a képmegjelölést, az inkább regionális szövegalapú megjelöléseket használ.

A Egyesült Államok jelző például az "us" karaktereket használja (amelyek hasonlítanak az U+S latin karakterekre, de valójában speciális karakterek, amelyek különböző kódolásokat használnak). Az Uniname a karakterek közötti különbségeket jeleníti meg.

# printf %b 'US' | uniname
character  byte  UTF-32   encoded as     glyph  name
        0     0  000055   55             U      LATIN CAPITAL LETTER U
        1     1  000053   53             S      LATIN CAPITAL LETTER S


# printf %b '🇺🇸' | uniname
character  byte  UTF-32   encoded as     glyph  name
        0     0  01F1FA   F0 9F 87 BA    🇺      Character in undefined range
        1     4  01F1F8   F0 9F 87 B8    🇸      Character in undefined range

A jelző hangulatjelekhez kijelölt karakterek a támogatott rendszerek rendszerképeinek megjelölésére szolgálnak, de a nem támogatott rendszerekben szöveges értékként maradnak. Ezek a karakterek karakterenként 4 bájtot használnak, összesen 8 bájtot, ha jelölő emojit használnak. Így egy fájlnévben összesen 31 jelző emoji engedélyezett (255 bájt/8 bájt).

SMB-elérési utak korlátai

A Windows-kiszolgálók és -ügyfelek alapértelmezés szerint legfeljebb 260 bájt hosszúságú elérési utat támogatnak, de a tényleges fájl elérési útja rövidebb, mivel a Windows-elérési utakhoz hozzáadott metaadatok, például az érték és a <NUL> tartomány adatai.

Ha túllép egy elérési útkorlátot a Windowsban, megjelenik egy párbeszédpanel:

Screenshot of path length dialog warning.

Az SMB-elérési utak hossza meghosszabbítható a Windows 10/Windows Server 2016 1607-es vagy újabb verziójának használatakor, ha módosít egy beállításjegyzék-értéket a maximális elérési úthossz korlátozásának megfelelően. Az érték módosításakor az elérési utak hossza akár 32 767 bájtra is kiterjeszthető (a metaadatértékek nélkül).

Screenshot of Group Policy Management window.

Screenshot of window to enable long file paths.

Ha ez a funkció engedélyezve van, hozzá kell férnie az SMB-megosztáshoz, amelyet az elérési úton kell használnia \\?\ a hosszabb elérési úthosszok engedélyezéséhez. Ez a módszer nem támogatja az UNC-elérési utakat, ezért az SMB-megosztást meghajtóbetűjelre kell leképezni.

Screenshot of dialog window with undiscoverable path.

Ehelyett \\?\Z: lehetővé teszi a hozzáférést, és támogatja a hosszabb fájlelérési utakat.

Screenshot of a directory with a long name.

Feljegyzés

A Windows CMD jelenleg nem támogatja a használatát \\?\.

Megkerülő megoldás, ha a maximális elérési úthossz nem növelhető

Ha a maximális elérési úthossz nem engedélyezhető a Windows-környezetben, vagy a Windows-ügyfélverziók túl alacsonyak, van egy megkerülő megoldás. Az SMB-megosztást mélyebben csatlakoztathatja a címtárszerkezethez, és csökkentheti a lekérdezett elérési út hosszát.

Például ahelyett, hogy a megfeleltetést a következőre Z:Z:rendeli \\NAS-SHARE\AzureNetAppFiles\\NAS-SHARE\AzureNetAppFiles\folder1\folder2\folder3\folder4: .

NFS-elérési utak korlátai

Az Azure NetApp Files-kötetek NFS-elérési útvonalának korlátai az egyes elérési utak összetevőire vonatkozó 255 bájtos korláttal rendelkeznek. Az egyes összetevőket azonban egyenként értékelik ki, és kérésenként legfeljebb 4096 bájtot képesek feldolgozni, közel korlátlan teljes elérési úthosszsal. Ha például minden elérésiút-összetevő 255 bájt, az NFS-ügyfél kérésenként legfeljebb 15 összetevőt értékelhet ki (a karaktereket is beleértve / ). Ezért a cd 4096 bájtos korláton túli elérési út kérése "Túl hosszú fájlnév" hibaüzenetet eredményez.

A Legtöbb esetben a Unicode-karakterek legfeljebb 1 bájtosak, ezért a 4096 bájtos korlát 4096 karakternek felel meg. Ha egy karakter mérete 1 bájtnál nagyobb, akkor az elérési út hossza kisebb, mint 4096 karakter. Az 1 bájtnál nagyobb méretű karakterek az 1 bájtnál több karaktert számlálnak meg.

Az elérési út maximális hossza a getconf PATH_MAX /NFSmountpoint parancs használatával kérdezhető le.

Feljegyzés

A korlát az limits.h NFS-ügyfél fájljában van meghatározva. Ezeket a korlátokat nem szabad módosítania.

Kétprotokollos kötetekkel kapcsolatos szempontok

Ha az Azure NetApp Filest kétprotokollos hozzáféréshez használja, az elérési utak hosszának az NFS- és SMB-protokollokban való kezelése közötti különbség inkompatibilitásokat hozhat létre a fájlok és mappák között. A Windows SMB például legfeljebb 32 767 karaktert támogat egy elérési úton (feltéve, hogy a hosszú elérési út funkció engedélyezve van az SMB-ügyfélen), de az NFS-támogatás meghaladhatja ezt az értéket. Ilyen esetben, ha az SMB-támogatásnál hosszabb elérési út jön létre az NFS-ben, az ügyfelek nem férnek hozzá az adatokhoz az elérési út maximális értékének elérése után. Ezekben az esetekben vagy vegye figyelembe a fájlelérési út hosszának alsó határát a protokollok között a fájl- és mappanevek létrehozásakor (és a mappa elérési útjának mélysége), vagy az SMB-megosztások leképezése közelebb a kívánt mappa elérési úthoz az elérési út hosszának csökkentése érdekében.

Ahelyett, hogy az SMB-megosztást a kötet legfelső szintjére szeretné leképezni, érdemes lehet az SMB-megosztást a teljes elérési útra \\share\folder1\folder2\folder3\folder4\\share\folder1\folder2\folder3\folder4leképezni. Ennek eredményeképpen egy meghajtóbetűjel megfeleltetése Z: a kívánt mappába landolt, és csökkenti az elérési út hosszát Z:\folder1\folder2\folder3\folder4\fileZ:\file.

Speciális karakterekkel kapcsolatos szempontok

Az Azure NetApp Files-kötetek a C.UTF-8 nyelvtípust használják, amely számos országot és nyelvet érint, beleértve a német, cirill, héber és legtöbb kínai/japán/koreai (CJK) nyelvet. A Unicode leggyakoribb szöveges karakterei 3 bájt vagy annál kisebbek. A speciális karakterek – például az emojik, a zenei szimbólumok és a matematikai szimbólumok – gyakran 3 bájtnál nagyobbak. Vannak, akik az UTF-16 helyettesítő pár logikáját használják.

Ha olyan karaktert használ, amelyet az Azure NetApp Files nem támogat, előfordulhat, hogy egy másik fájlnevet kérő figyelmeztetés jelenik meg.

Screenshot of an invalid file name warning.

Ahelyett, hogy a név túl hosszú, a hiba valójában azt eredményezi, hogy a karakter bájtmérete túl nagy ahhoz, hogy az Azure NetApp Files-kötet SMB-en keresztül legyen használva. Erre a korlátozásra nincs áthidaló megoldás az Azure NetApp Filesban. Az Azure NetApp Files speciális karakterkezelésével kapcsolatos további információkért lásd a protokoll viselkedését speciális karakterkészletekkel.

Következő lépések