فهم أطوال المسار في Azure NetApp Files
يشير طول الملف والمسار إلى عدد أحرف Unicode في مسار ملف، بما في ذلك الدلائل. هذا الحد هو عامل في أطوال الأحرف الفردية، والتي يتم تحديدها حسب حجم الحرف بالبايت. على سبيل المثال، يسمح NFS وSMB بمكونات المسار من 255 بايت. يستخدم تنسيق ترميز الملف للتعليمات البرمجية القياسية الأمريكية لتبادل المعلومات (ASCII) ترميز 8 بت، ما يعني أن مكونات مسار الملف (مثل اسم الملف أو المجلد) في ASCII يمكن أن تصل إلى 255 حرفا نظرا لأن حجم أحرف ASCII هو 1 بايت.
يعرض الجدول التالي أطوال المكون والمسار المدعومة في وحدات تخزين Azure NetApp Files:
المكون | NFS | SMB |
---|---|---|
حجم مكون المسار | 255 بايت | 255 بايت |
حجم طول المسار | غير محدود | الافتراضي: 255 بايت الحد الأقصى في إصدارات Windows الأحدث: 32767 بايت |
الحد الأقصى لحجم المسار ل transversal | 4,096 بايت | 255 بايت |
إشعار
تستخدم وحدات تخزين البروتوكول المزدوج أقل قيمة قصوى.
إذا كان اسم مشاركة SMB هو \\SMB-SHARE
، يضيف اسم المشاركة 11 حرف Unicode إلى طول المسار لأن كل حرف هو 1 بايت. إذا كان المسار إلى ملف معين هو \\SMB-SHARE\apps\archive\file
، فإنه 29 حرف Unicode؛ كل حرف، بما في ذلك الشرطة المائلة، هو 1 بايت. بالنسبة لتركيبات NFS، تنطبق نفس المفاهيم. مسار /AzureNetAppFiles
التحميل هو 17 حرف Unicode من 1 بايت لكل منهما.
تدعم Azure NetApp Files نفس طول المسار لمشاركات SMB التي تدعمها خوادم Windows الحديثة: حتى 32767 بايت. ومع ذلك، اعتمادا على إصدار عميل Windows، لا يمكن لبعض التطبيقات دعم المسارات التي تزيد عن 260 بايت. تدعم مكونات المسار الفردية (القيم بين الشرطة المائلة، مثل أسماء الملفات أو المجلدات) ما يصل إلى 255 بايت. على سبيل المثال، لا يمكن أن يتجاوز اسم الملف الذي يستخدم رأس المال اللاتيني "A" (الذي يستغرق 1 بايت لكل حرف) في مسار ملف في Azure NetApp Files 255 حرفا.
# mkdir 256charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
mkdir: cannot create directory ‘256charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’: File name too long
# mkdir 255charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# ls | grep 255
255charsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
تمييز أحجام الأحرف
يمكن استخدام الأداة uniutils
المساعدة Linux للعثور على حجم البايت لأحرف Unicode عن طريق كتابة مثيلات متعددة لمثيل الحرف وعرض حقل البايت .
مثال 1: تتزايد العاصمة اللاتينية A بمقدار بايت واحد في كل مرة يتم استخدامها (باستخدام قيمة سداسية واحدة من 41، وهي في نطاق 0-255 من أحرف ASCII).
# 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: يستخدم الاسم AAA 3 بايت من أصل 255.
مثال 2: الحرف الياباني 字 زيادة 3 بايت لكل مثيل. يمكن أيضا حساب هذا بواسطة قيم التعليمات البرمجية السداسية العشرية المنفصلة الثلاثة (E5، AD، 97) ضمن الحقل المشفرة. تمثل كل قيمة سداسية 1 بايت:
# 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: يستخدم ملف يسمى 字字字 9 بايت من أصل 255.
مثال 3: الحرف Ä مع diaeresis يستخدم 2 بايت لكل مثيل (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: يستخدم الملف المسمى ÄÄÄ 6 بايت من أصل 255.
مثال 4: يقع حرف خاص، مثل 😃 رمز المشاعر، في نطاق غير معرف يتجاوز 0-3 بايت المستخدمة لأحرف Unicode. ونتيجة لذلك، فإنه يستخدم زوج بديل لترميز الحرف الخاص به. في هذه الحالة، يستخدم كل مثيل من الحرف 4 بايت.
# 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: يستخدم الملف المسمى 😃😃😃 12 بايت من أصل 255.
تقع معظم رموز المشاعر في نطاق 4 بايت ولكن يمكن أن تصل إلى 7 بايت. من بين أكثر من ألف رمز مشاعر قياسي، يوجد ما يقرب من 180 في المستوى الأساسي متعدد اللغات (BMP)، ما يعني أنه يمكن عرضها كنص أو رمز مشاعر في Azure NetApp Files، اعتمادا على دعم العميل لنوع اللغة.
لمزيد من المعلومات التفصيلية حول BMP ووحدات Unicode الأخرى، راجع فهم لغات وحدة التخزين في Azure NetApp Files.
تأثير بايت الأحرف على أطوال المسار
على الرغم من أنه يعتقد أن طول المسار هو عدد الأحرف في اسم ملف أو مجلد، إلا أنه في الواقع حجم وحدات البايت المدعومة في المسار. نظرا لأن كل حرف يضيف حجم بايت إلى اسم، فإن مجموعات الأحرف المختلفة بلغات مختلفة تدعم أطوال أسماء الملفات المختلفة.
ضع في الاعتبار السيناريوهات التالية:
يكرر ملف أو مجلد الحرف الأبجدي اللاتيني "A" لاسم الملف الخاص به. (على سبيل المثال، AAAAAAAA)
نظرا لأن "A" يستخدم 1 بايت و255 بايت هو حد حجم مكون المسار، السماح ب 255 مثيلا من "A" في اسم الملف.
يكرر الملف أو المجلد الحرف الياباني 字 باسمه.
نظرا لأن "字" له حجم 3 بايت، فإن حد طول اسم الملف سيكون 85 مثيلا ل 字 (3 بايت * 85 = 255 بايت)، أو ما مجموعه 85 حرفا.
يكرر الملف أو المجلد رمز مشاعر الوجه المبتسم (😃) باسمه.
يستخدم رمز مشاعر الوجه المبتسم (😃) 4 بايت، مما يعني أن اسم الملف مع رمز المشاعر هذا فقط سيسمح بإجمالي 64 حرفا (255 بايت/4 بايت).
- يستخدم الملف أو المجلد مجموعة من الأحرف المختلفة (أي الاسم字😃).
عند استخدام أحرف مختلفة ذات أحجام بايت مختلفة في اسم ملف أو مجلد، فإن حجم البايت لكل حرف يكون في طول الملف أو المجلد. يستخدم اسم ملف أو مجلد بالاسم字😃 1+1+1+1+3+4 بايت (11 بايت) من إجمالي طول 255 بايت.
مفاهيم رموز المشاعر الخاصة
توجد رموز المشاعر الخاصة، مثل رمز مشاعر العلامة، ضمن تصنيف BMP: يتم عرض رموز المشاعر كنص أو صورة اعتمادا على دعم العميل. عندما لا يدعم العميل تعيين الصورة، فإنه يستخدم بدلا من ذلك التعيينات الإقليمية المستندة إلى النص.
على سبيل المثال، تستخدم علامة الولايات المتحدة الأحرف "us" (التي تشبه الأحرف اللاتينية U+S، ولكنها في الواقع أحرف خاصة تستخدم ترميزات مختلفة). يظهر Uniname الاختلافات بين الأحرف.
# 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
تترجم الأحرف المعينة لرموز مشاعر العلامة إلى وضع علامة على الصور في الأنظمة المدعومة، ولكنها تظل كقيم نصية في الأنظمة غير المدعومة. تستخدم هذه الأحرف 4 بايت لكل حرف لإجمالي 8 بايت عند استخدام رمز مشاعر علامة. على هذا النحو، يسمح بإجمالي 31 رمز مشاعر علامة في اسم ملف (255 بايت/8 بايت).
حدود مسار SMB
بشكل افتراضي، تدعم خوادم Windows وعملاء أطوال المسار حتى 260 بايت، ولكن أطوال مسار الملف الفعلية أقصر بسبب بيانات التعريف المضافة إلى مسارات Windows مثل <NUL>
القيمة ومعلومات المجال.
عند تجاوز حد المسار في Windows، يظهر مربع حوار:
يمكن توسيع أطوال مسار SMB عند استخدام الإصدار 1607 من Windows 10/Windows Server 2016 أو أحدث عن طريق تغيير قيمة سجل كما هو مغطى في الحد الأقصى لطول المسار. عند تغيير هذه القيمة، يمكن أن تمتد أطوال المسار إلى ما يصل إلى 32767 بايت (ناقص قيم بيانات التعريف).
بمجرد تمكين هذه الميزة، يجب عليك الوصول إلى احتياجات مشاركة SMB باستخدام \\?\
في المسار للسماح بطول مسار أطول. لا يدعم هذا الأسلوب مسارات UNC، لذلك يجب تعيين مشاركة SMB إلى حرف محرك أقراص.
يسمح استخدام \\?\Z:
بدلا من ذلك بالوصول ويدعم مسارات الملفات الأطول.
إشعار
لا يدعم WINDOWS CMD حاليا استخدام \\?\
.
الحل البديل إذا تعذر زيادة الحد الأقصى لطول المسار
إذا تعذر تمكين الحد الأقصى لطول المسار في بيئة Windows أو كانت إصدارات عميل Windows منخفضة جدا، فهناك حل بديل. يمكنك تحميل مشاركة SMB بشكل أعمق في بنية الدليل وتقليل طول المسار الذي تم الاستعلام عليه.
على سبيل المثال، بدلا من التعيين \\NAS-SHARE\AzureNetAppFiles
إلى Z:
، قم بتعيين \\NAS-SHARE\AzureNetAppFiles\folder1\folder2\folder3\folder4
إلى Z:
.
حدود مسار NFS
حدود مسار NFS مع وحدات تخزين Azure NetApp Files لها نفس حد 255 بايت لمكونات المسار الفردية. ومع ذلك، يتم تقييم كل مكون واحدا في كل مرة ويمكن معالجة ما يصل إلى 4096 بايت لكل طلب مع طول مسار إجمالي غير محدود تقريبا. على سبيل المثال، إذا كان كل مكون مسار 255 بايت، يمكن لعميل NFS تقييم ما يصل إلى 15 مكونا لكل طلب (بما في ذلك /
الأحرف). على هذا النحو، cd
ينتج عن الطلب إلى مسار فوق حد 4096 بايت رسالة خطأ "اسم الملف طويل جدا".
في معظم الحالات، تكون أحرف Unicode 1 بايت أو أقل، لذلك يتوافق حد 4096 بايت مع 4096 حرفا. إذا كان حجم الحرف أكبر من بايت واحد، فسيكون طول المسار أقل من 4096 حرفا. عدد الأحرف التي يزيد حجمها عن 1 بايت في الحجم أكبر مقابل إجمالي عدد الأحرف من 1 بايت.
يمكن الاستعلام عن الحد الأقصى لطول المسار باستخدام getconf PATH_MAX /NFSmountpoint
الأمر .
إشعار
يتم تعريف الحد في limits.h
الملف على عميل NFS. لا يجب عليك ضبط هذه الحدود.
اعتبارات حجم البروتوكول المزدوج
عند استخدام Azure NetApp Files للوصول إلى البروتوكول المزدوج، يمكن للفرق في كيفية معالجة أطوال المسار في بروتوكولات NFS وSMB إنشاء عدم توافق عبر الملفات والمجلدات. على سبيل المثال، يدعم Windows SMB ما يصل إلى 32767 حرفا في مسار (شريطة تمكين ميزة المسار الطويل على عميل SMB)، ولكن يمكن أن يتجاوز دعم NFS هذا المبلغ. على هذا النحو، إذا تم إنشاء طول مسار في NFS يتجاوز دعم SMB، فلن يتمكن العملاء من الوصول إلى البيانات بمجرد الوصول إلى الحد الأقصى لطول المسار. في هذه الحالات، يجب مراعاة الحدود الدنيا لأطوال مسار الملف عبر البروتوكولات عند إنشاء أسماء الملفات والمجلدات (وعمق مسار المجلد) أو تعيين مشاركات SMB الأقرب إلى مسار المجلد المطلوب لتقليل طول المسار.
بدلا من تعيين مشاركة SMB إلى المستوى الأعلى من وحدة التخزين للانتقال لأسفل إلى مسار \\share\folder1\folder2\folder3\folder4
، ضع في اعتبارك تعيين مشاركة SMB إلى المسار بأكمله ل \\share\folder1\folder2\folder3\folder4
. ونتيجة لذلك، يهبط تعيين حرف محرك الأقراص إلى Z:
المجلد المطلوب ويقلل طول المسار من Z:\folder1\folder2\folder3\folder4\file
إلى Z:\file
.
اعتبارات الأحرف الخاصة
تستخدم وحدات تخزين Azure NetApp Files نوع لغة C.UTF-8، والذي يغطي العديد من البلدان/المناطق واللغات بما في ذلك الألمانية والسيريلية والعبرية ومعظم الصينية/اليابانية/الكورية (CJK). الأحرف النصية الأكثر شيوعا في Unicode هي 3 بايت أو أقل. غالبا ما تكون الأحرف الخاصة - مثل رموز المشاعر والرموز الموسيقية والرموز الرياضية - أكبر من 3 بايت. يستخدم البعض منطق الزوج البديل UTF-16.
إذا كنت تستخدم حرفا لا تدعمه Azure NetApp Files، فقد ترى تحذيرا يطلب اسم ملف مختلف.
بدلا من أن يكون الاسم طويلا جدا، ينتج الخطأ في الواقع من حجم بايت الحرف كبير جدا بحيث لا يمكن استخدام وحدة تخزين Azure NetApp Files عبر SMB. لا يوجد حل بديل في Azure NetApp Files لهذا القيد. لمزيد من المعلومات حول معالجة الأحرف الخاصة في Azure NetApp Files، راجع سلوك البروتوكول مع مجموعات الأحرف الخاصة.