این ماژول
VFS بخشی از
مجموعه samba(7)
است.
ماژول vfs_fruit
سازگاری
بهبودیافتهای
با
کلاینتهای
SMB شرکت Apple و
تعاملپذیری
با کارساز
فایل Netatalk 3 AFP
فراهم
میکند.
در صورت
فعالسازی
تبدیل
نویسهها،
این ماژول
باید همراه
با vfs_catia
پشتهسازی
(stack) شود و
حتماً باید
همراه با vfs_streams_xattr
پشتهسازی
گردد؛ برای
پیکربندی
صحیح، بخش
مثالها را
ببینید.
این ماژول
پشتیبانی
از
جریانهای
داده
متناوب (ADS) را
برای یک
اشتراک
فعال
میکند،
جریانهای
ویژه OS X شامل
"AFP_AfpInfo" و "AFP_Resource" را
رهگیری
کرده و به
شیوهای
ویژه
مدیریت
میکند.
تمام
جریانهای
نامگذاریشده
دیگر به vfs_streams_xattr
واگذار
میشوند که
باید همراه
با vfs_fruit
بارگذاری
شود.
هنگام
ترکیب
اشتراکهای
دارای vfs_fruit و
بدون آن دقت
کنید.
کلاینتهای
OS X
افزونههای
پروتکل SMB2 AAPL را
در اولین tcon
مذاکره
میکنند،
بنابراین
ترکیب
اشتراکهای
دارای fruit با
اشتراکهای
بدون آن، در
صورتی که
اولین tcon
بدون fruit
باشد، AAPL را
به طور
سراسری
غیرفعال
خواهد کرد.
داشتن
اشتراکهایی
با
پشتیبانی
فعال از ADS
برای
کلاینت OS X
سودمند است
زیرا رفتار
کارساز SMB
خود Apple را
شبیهسازی
میکند و از
افت شدید
عملکرد
ناشی از
معناشناسی
حساسیت به
حروف کوچک و
بزرگ Samba
جلوگیری
مینماید.
متادیتا و
جریان
چنگال منبع
(resource fork) در OS X را
میتوان با
تنظیم fruit:resource = file و
fruit:metadata = netatalk به
شیوهای
سازگار با Netatalk 3
ذخیره کرد.
سیستمعامل
OS X در
درخواستهای
SMB،
نویسههای
غیرمجاز NTFS
را به
محدوده
خصوصی
یونیکد (Unicode private range)
نگاشت
میکند. با
تنظیم fruit:encoding = native،
تمام
نویسههای
نگاشتشده
به
نویسههای
بومی ASCII
تبدیل
میشوند.
در نهایت،
حالتهای
دسترسی به
اشتراک را
میتوان با
تنظیم fruit:locking = netatalk
بهصورت
اختیاری در
برابر
حالتهای
اشتراکگذاری
Netatalk AFP بررسی
کرد.
این ماژول
به جز موارد
شرح داده
شده در این
صفحه
راهنما،
پشتهپذیر
نیست.
گزینههای
زیر باید در
بخش سراسری
smb.conf تنظیم
شوند و در
صورت تنظیم
در هر
اشتراک
اعمال
نخواهند
شد.
fruit:aapl = yes | no
یک گزینه
سراسری
مبنی بر
اینکه آیا
افزونه SMB2+
شرکت Apple با
نام رمز AAPL
فعال شود یا
خیر.
پیشفرض
yes
است. این
افزونه
چندین
کاستی را
هنگام
اتصال از
رایانههای
Mac بهبود
میبخشد:
•پیمایش
دایرکتوری
با
متادیتای
مربوط به
فایلسیستم
Mac (حالت UNIX،
اطلاعات FinderInfo،
اندازه
چنگال منبع
و
دسترسیهای
موثر)
غنیسازی
میشود، در
نتیجه
کلاینت Mac
نیازی به
واکشی این
متادیتا به
طور
جداگانه
برای هر
مدخل
دایرکتوری
ندارد که
اغلب منجر
به افزایش
چشمگیر
کارایی
میشود.
•امکان
پرسوجو و
تغییر حالت UNIX
در
مدخلهای
دایرکتوری.
مجموعهای
از
گزینهها
در سطح هر
اشتراک
وجود دارد
که با فعال
شدن
fruit:aapl به
کار
میآیند.
این
گزینهها
که در زیر
فهرست
شدهاند،
میتوانند
برای
غیرفعال
کردن
محاسبه
متادیتای
خاص Mac در بستر
پیمایش
دایرکتوری
استفاده
شوند؛ همه
آنها به
طور
پیشفرض
فعال هستند:
•readdir_attr:aapl_rsize = yes | no
•readdir_attr:aapl_finder_info = yes | no
•readdir_attr:aapl_max_access = yes | no
برای شرح
این
گزینهها
بخش زیر را
ببینید.
fruit:nfs_aces = yes | no
یک گزینه
سراسری
مبنی بر
اینکه آیا
پشتیبانی
از پرسوجو
و تغییر
حالت UNIX در
مدخلهای
دایرکتوری
از طریق NFS ACEs
فعال باشد
یا خیر؛
پیشفرض yes
است.
fruit:copyfile = yes | no
یک گزینه
سراسری
مبنی بر
اینکه آیا ioctl
مربوط به copychunk
خاص OS X که کپی
کل فایل را
به همراه
تمام
متادیتای
متصل به آن
درخواست
میکند
فعال شود یا
خیر.
هشدار:
درخواست copyfile
تا زمانی که
کارساز کپی
را انجام
میدهد،
کلاینت را
مسدود (block)
میکند.
پیشفرض no
است.
fruit:model = MacSamba
این
گزینه رشته
مدل درون
افزونه AAPL را
تعریف
میکند و
ظاهر
آیکونی را
که
نمایانگر
کارساز Samba در
پنجره Finder است
مشخص
میسازد.
پیشفرض
MacSamba است.
گزینههای
زیر را
میتوان در
بخش سراسری
smb.conf یا به ازای
هر اشتراک
تنظیم کرد.
fruit:resource = [ file | xattr | stream ]
محل
ذخیره
چنگال منبع
(resource fork)
سیستمعامل
OS X را کنترل
میکند.
به دلیل یک
خطای
املایی در
تمامی
نسخههای Samba
قدیمیتر
از 4.6.0، این
گزینه را
میتوان
بهصورت
fruit:ressource، یعنی
با دو s نیز
مشخص کرد.
تنظیمات:
•file
(پیشفرض) -
استفاده از
یک فایل ._ AppleDouble
سازگار با OS X
و Netatalk
•xattr -
استفاده از
یک ویژگی
توسعهیافته
(xattr)؛ نیازمند
یک
فایلسیستم
با
پشتیبانی
از xattr بزرگ و
یک API
ورودی/خروجی
فایل
سازگار با xattr
است؛ این
امر اساساً
به Solaris و
پلتفرمهای
مشتقشده
از آن و ZFS
محدود
میشود
•stream
(آزمایشی) -
ارسال
جریان به
ماژول بعدی
در پشته VFS.
هشدار: این
گزینه به
دلیل
محدودیتهای
اندازه
ویژگیهای
توسعهیافته
در اکثر
فایلسیستمها
نباید با
ماژول streams_xattr
استفاده
شود.
fruit:time machine = [ yes | no ]
کنترل
میکند که
آیا
پشتیبانی
از Time Machine از
طریق
قابلیت حجم
FULLSYNC به
کلاینتها
اعلان شود
یا خیر.
•yes -
فعالسازی
پشتیبانی
از Time Machine برای
این اشتراک.
همچنین در
صورتی که Samba
با
پشتیبانی
از mDNS کامپایل
شده باشد،
اشتراک را
در mDNS ثبت
میکند.
•no
(پیشفرض) -
اعلان
پشتیبانی
از Time Machine را
غیرفعال
میکند.
این گزینه
تنظیمات
زیر را برای
هر اشتراک
(یا برای
تمام
اشتراکها
در صورت
فعالسازی
سراسری)
اعمال
میکند:
•durable handles = yes
•kernel oplocks = no
•kernel share modes = no
•posix locking = no
fruit:time machine max size = SIZE [K|M|G|T|P]
کاربردی
برای Time Machine:
اندازه
دیسک
گزارششده
را محدود
میکند و
بدین ترتیب
از اشغال
تمام فضای
واقعی دیسک
توسط Time Machine برای
پشتیبانگیری
جلوگیری
مینماید.
این گزینه
یک عدد به
همراه یک
واحد
اختیاری
دریافت
میکند.
مهم: این
یک محاسبه
تقریبی است
که تنها
محتویات
ایمیجهای
sparsebundle مربوط به Time
Machine را در نظر
میگیرد.
بنابراین
هنگام
استفاده از
این گزینه،
نباید از
این حجم
برای ذخیره
سایر
محتواها
استفاده
کنید، زیرا
آنها
محاسبه
نخواهند
شد.
این
محاسبه با
خواندن
اندازه
باند از
فایل XML با
نام Info.plist در sparsebundle،
خواندن
دایرکتوری
bands/ و شمارش
تعداد
فایلهای
باند، و سپس
ضرب کردن
آنها در
یکدیگر عمل
میکند.
fruit:metadata = [ stream | netatalk ]
محل
ذخیره
جریان
متادیتای OS X
را کنترل
میکند:
•netatalk
(پیشفرض) -
استفاده از
ویژگی
توسعهیافته
(xattr) سازگار با
Netatalk
•stream - ارسال
جریان به
ماژول بعدی
در پشته VFS
fruit:locking = [ netatalk | none ]
•none
(پیشفرض) -
بدون
قفلگذاری
میانپروتکلی
•netatalk -
استفاده از
قفلگذاری
میانپروتکلی
با Netatalk
fruit:encoding = [ native | private ]
نحوه
ذخیره
مجموعه
نویسههای
غیرمجاز NTFS ASCII،
که معمولاً
توسط
کلاینتهای
OS X استفاده
میشوند،
را در
فایلسیستم
کنترل
میکند.
مهم: مشخص
شده است که
این گزینه
با fruit:metadata=stream یا
fruit:resource=stream
بهطور
کامل کار
نمیکند.
•private
(پیشفرض) -
ذخیره
نویسهها
همانگونه
که توسط
کلاینت OS X
کدگذاری
شدهاند:
نگاشتشده
به محدوده
خصوصی
یونیکد
•native - ذخیره
نویسهها
با مقدار
بومی ASCII
آنها. مهم:
این گزینه
مستلزم
استفاده از
vfs_catia در پشته
ماژولهای VFS
است،
همانطور
که در بخش
مثالها
نشان داده
شده است.
fruit:veto_appledouble = yes | no
نکته:
این گزینه
فقط زمانی
اعمال
میشود که
fruit:resource روی
file
(مقدار
پیشفرض)
تنظیم شده
باشد.
هنگامی که
fruit:resource روی file
تنظیم شده
باشد، vfs_fruit
ممکن است
فایلهای ._
AppleDouble ایجاد
کند. این
گزینه
کنترل
میکند که
آیا این
فایلهای ._
AppleDouble وتو
(ممنوع) شوند
تا از
دسترسی
کلاینت به
آنها
جلوگیری
شود یا خیر.
وتو کردن
فایلهای ._
ممکن است
کارکرد
برخی
برنامهها
را مختل
کند، برای
مثال
استخراج
آرشیوهای ZIP
مک از
کلاینتهای
Mac ناموفق
خواهد بود،
زیرا آنها
شامل
فایلهای ._
هستند.
دستور rsync نیز
قادر به
همگامسازی
فایلهایی
که با زیرخط
آغاز
میشوند
نخواهد
بود، زیرا
فایلهای
موقتی که
برای آنها
استفاده
میکند با ._
شروع
میشوند و
بنابراین
امکان
ایجاد
آنها وجود
ندارد.
تنظیم این
گزینه روی false
این مشکل را
برطرف
میکند،
اما درز
لایه
انتزاع (abstraction leak)
ناشی از
نمایان شدن
فایلهای ._
ایجاد شده
داخلی ممکن
است عوارض
جانبی
ناشناخته
دیگری
داشته
باشد.
پیشفرض
yes است.
readdir_attr:aapl_rsize = yes | no
بازگرداندن
اندازه
چنگال منبع
در
پاسخهای SMB2 FIND.
پیشفرض
yes است.
readdir_attr:aapl_finder_info = yes | no
بازگرداندن
FinderInfo در
پاسخهای SMB2 FIND.
پیشفرض
yes است.
readdir_attr:aapl_max_access = yes | no
بازگرداندن
حداکثر
دسترسیهای
موثر کاربر
در
پاسخهای SMB2 FIND.
این یک
محاسبه
سنگین است؛
غیرفعال
کردن آن
وانمود
میکند که
کاربر
دارای
حداکثر
دسترسیهای
موثر است.
پیشفرض
yes است.
fruit:wipe_intentionally_left_blank_rfork = yes | no
آیا
دادههای
چنگال منبع
(Resource Fork) که با
بلاک
جانگهدارنده
ویژه ۲۸۶
بایتی
ایجادشده
توسط
کلاینت macOS
تطابق دارد
پاک شوند یا
خیر. این
بلاک شامل
رشته “This resource fork intentionally left
blank” است و
سایر
بایتهای
آن عمدتاً
صفر هستند.
از آنجا که
هیچ
کاربردی
برای این
دادهها
وجود
ندارد،
کنار
گذاشتن
آنها
بیخطر است.
هنگام فعال
بودن این
گزینه، این
ماژول
جریان Resource Fork را
به ۰ بایت
کوتاه (truncate)
میکند.
پیشفرض no
است.
fruit:delete_empty_adfiles = yes | no
آیا
فایلهای
خالی AppleDouble حذف
شوند یا خیر.
خالی به این
معناست که
مدخل چنگال
منبع در
فایلهای AppleDouble
دارای
اندازه ۰
است، یا
اندازه آن
دقیقاً ۲۸۶
بایت بوده و
محتوای آن
با یک چنگال
منبع
پیشفرض
الگویی
ایجادشده
توسط macOS
مطابقت
دارد.
پیشفرض no
است.
fruit:zero_file_id = yes | no
آیا در
صورت
مذاکره AAPL
توسط
کلاینت، در
پاسخ به
پرسوجوهای
شناسه فایل
روی دیسک،
مقدار صفر
بازگردانده
شود یا خیر.
برنامههای
Mac یا کد
کلاینت SMB در Mac
انتظار
دارند که
شناسه فایل
روی دیسک
دارای
معناشناسی
شناسه گره
فهرست HFS+ (یا CNID)
باشد.
نرمافزار
Samba
شناسههای
فایل (File-ID) را بر
اساس شماره
inode فایل
ارائه
میدهد که
در طول
ایجاد و حذف
فایل
بازیافت و
دوباره
استفاده
میشود و
بنابراین
نمیتوان
از آن برای
کلاینت Mac
استفاده
کرد.
بازگرداندن
شناسه فایل
صفر باعث
میشود
کلاینت Mac
استفاده و
اعتماد به
شناسه فایل
بازگرداندهشده
از کارساز
را متوقف
کند.
پیشفرض
yes است.
fruit:convert_adouble = yes | no
آیا
تلاشی برای
تبدیل
فایلهای
جانبی ._ AppleDouble به
جریانهای
بومی (xattr در
هنگام
استفاده از
vfs_streams_xattr) انجام
شود یا خیر.
کاربرد
اصلی این
تبدیل،
مهاجرت
شفاف از
پیکربندی
کارسازی
بدون
پشتیبانی
از
جریانها
است که در آن
کلاینت macOS آن
فایلهای
جانبی AppleDouble را
ایجاد کرده
بود.
پیشفرض
yes است.
fruit:validate_afpinfo = yes | no
کلاینتهای
Apple از جریان AFP_AfpInfo
برای ذخیره
متادیتای
ساختاریافته
فایل
استفاده
میکنند. به
عنوان بخشی
از
دادههای
مرتبسازیشده
(marshaled)
ذخیرهشده
در جریان،
هشت بایت
اول شامل
برخی
اطلاعات
هدر است.
کارساز SMB
شرکت Apple و
همچنین Samba
این
بایتهای
هدر را
هنگام
پردازش
درخواست
نوشتن
کلاینت روی
این جریان
اعتبارسنجی
میکنند و
در صورت
ناموفق
بودن
اعتبارسنجی،
عملیات
نوشتن با
شکست مواجه
میشود. در
حالی که این
اعتبارسنجی
به طور کلی
درست است،
در برخی
سناریوهای
مهاجرت
دادهها
کلاینتها
ممکن است
تلاش کنند
دادهها را
از
کارسازهای SMB
متفرقه (شخص
ثالث) به
کارسازهای Samba
انتقال
دهند، جایی
که اطلاعات
هدر به هر
دلیلی خراب
است. برای
مجاز کردن
مهاجرت و
تصحیح هدر
در این
سناریوها،
میتوان با
تنظیم این
گزینه روی
no،
اعتبارسنجی
را به طور
موقت
غیرفعال
کرد.
پیشفرض
yes است.
fruit:veto_localized = yes | no
هنگامی
که
fruit:veto_localized روی
yes تنظیم شده
باشد، vfs_fruit به
طور خودکار
هرگونه
تلاش برای
دسترسی به
فایل یا
دایرکتوری
.localized را وتو (رد)
میکند. این
موارد ممکن
است ایجاد
شوند تا به Mac OS
امکان دهند
ترجمههای
بومیسازیشده
برای نام
پوشهها
ارائه دهد
(معمولاً
برای
نسخههای
بومیسازیشده
Desktop،
Music و
غیره).
هنگامی که
دایرکتوریهای
بسیار بزرگ
فهرست
میشوند،
ممکن است یک
کلاینت Mac
برای تکتک
مدخلهای
آن فهرست
دایرکتوری،
وجود فایل .localized
را پرسوجو
کند. در
ترکیب با
فایلسیستمهای
کلاسترشده،
این امر
میتواند
تاثیر
چشمگیری بر
کارایی کلی
فهرست کردن
دایرکتوری
داشته باشد.
هنگامی که
ترجمه
احتمالی
نام پوشه
مورد نظر
نیست، این
گزینه
اجازه
میدهد با
جلوگیری از
پایین رفتن
کارساز به
لایه
فایلسیستم
برای هر
پرسوجو،
از بار
اضافی شبکه
جلوگیری
شود.
پیشفرض no
است.
fruit:posix_opens = yes | no
هنگامی
که
fruit:posix_opens روی
yes
تنظیم شده
باشد، vfs_fruit به
طور داخلی
تمام
معناشناسیهای
فایلسیستم
را به
استفاده از
رفتار POSIX به
جای رفتار Windows
ترجمه
میکند. از
آنجا که
رایانههای
Mac از نظر
معناشناسی
فایلسیستم
به POSIX
نزدیکتر
از Windows هستند،
این امر
معناشناسی
دسترسی را
برای
بسیاری از
حالتهای
خاص (corner cases)
بهبود
میبخشد.
پیشفرض
yes است.
fruit:ignore_zero_aces = yes | no
هنگامی
که
fruit:ignore_zero_aces
فعال باشد،
در صورتی که ACL
ارسالشده
روی شبکه
فاقد
هرگونه ACE
باشد،
تلاشها
برای تغییر
دسترسیهای
فایلسیستم
با شکست
مواجه
میشوند.
این یک
رفتار
کاملاً
معتبر از
سوی کلاینت
است، اما
بدین
معناست که
متعاقباً
هیچ دسترسی
دیگری به
فایل
امکانپذیر
نخواهد
بود، مگر
اینکه
دسترسیها
توسط یک
مدیر سیستم
اصلاح شوند.
این رفتار
مشکلساز
برای آخرین
نسخههای macOS
گزارش شده
است و این
گزینه جدید
امکان دور
زدن آن را
فراهم
میسازد.
پیشفرض
yes است.