fuse(8) System Manager's Manual fuse(8)

mount.fuse - ابزار سوار کردن فایل سیستم‌های FUSE

سامانه FUSE (کوته‌نوشت Filesystem in Userspace یا فایل‌سیستم در فضای کاربری) یک رابط ساده برای برنامه‌های فضای کاربری است تا یک فایل‌سیستم مجازی را به هسته لینوکس صادر کنند. همچنین FUSE در پی فراهم کردن روشی امن برای کاربران غیرممتاز است تا پیاده‌سازی‌های فایل‌سیستم اختصاصی خود را بسازند و سوار کنند.

برخی از گزینه‌های مربوط به سیاست سوار کردن را می‌توان در فایل /etc/fuse.conf تنظیم کرد. در حال حاضر این گزینه‌ها عبارتند از:

حداکثر تعداد سوار کردن‌های FUSE مجاز برای کاربران غیرریشه را تعیین می‌کند. مقدار پیش‌فرض 1000 است.
به کاربران غیرریشه اجازه می‌دهد گزینه‌های سوار کردن allow_other یا allow_root را مشخص کنند (پایین‌تر را ببینید).

بیشتر گزینه‌های عمومی سوار کردن که در mount شرح داده شده‌اند پشتیبانی می‌شوند (ro، rw، suid، nosuid، dev، nodev، exec، noexec، atime، noatime، sync، async، dirsync). فایل‌سیستم‌ها به‌طور پیش‌فرض با nodev,nosuid سوار می‌شوند، که تنها توسط یک کاربر ممتاز قابل لغو و تغییر است.

این‌ها گزینه‌های اختصاصی سوار کردن FUSE هستند که می‌توانند برای همه فایل‌سیستم‌ها مشخص شوند:

به‌طور پیش‌فرض FUSE مجوزهای دسترسی به فایل را بررسی نمی‌کند؛ فایل‌سیستم در پیاده‌سازی سیاست دسترسی خود آزاد است یا می‌تواند آن را به سازوکار زیربنایی دسترسی به فایل واگذار کند (برای مثال در مورد فایل‌سیستم‌های شبکه‌ای). این گزینه بررسی مجوزها را فعال می‌کند و دسترسی را بر اساس حالت فایل محدود می‌سازد. این گزینه معمولاً به همراه گزینه سوار کردن allow_other مفید است.
این گزینه تدبیر امنیتی محدودکننده دسترسی فایل به کاربری که فایل‌سیستم را سوار کرده است لغو می‌کند. بنابراین همه کاربران (شامل ریشه) می‌توانند به فایل‌ها دسترسی داشته باشند. این گزینه به‌طور پیش‌فرض تنها برای ریشه مجاز است، اما این محدودیت را می‌توان با یک گزینه پیکربندی که در بخش قبل شرح داده شد برطرف کرد.
این گزینه شبیه به allow_other است اما دسترسی فایل به کاربر سوارکننده فایل‌سیستم و ریشه محدود می‌شود. این گزینه و allow_other مانعة‌الجمع هستند.
این گزینه تخلیه حافظه پنهان محتویات فایل در هر فراخوانی open(2) را غیرفعال می‌کند. این گزینه تنها باید روی فایل‌سیستم‌هایی فعال شود که در آن‌ها داده‌های فایل هرگز از خارج تغییر نمی‌کنند (نه از طریق فایل‌سیستم سوارشده FUSE). بنابراین برای فایل‌سیستم‌های شبکه‌ای و سایر فایل‌سیستم‌های واسطه مناسب نیست.

نکته: اگر این گزینه (و همچنین direct_io) مشخص نشده باشد، داده‌ها همچنان پس از open(2) در حافظه پنهان ذخیره می‌شوند، بنابراین یک فراخوانی سیستمی read(2) همیشه عملیات خواندن جدیدی را آغاز نمی‌کند.

این گزینه تخلیه خودکار حافظه پنهان داده‌ها را در هنگام open(2) فعال می‌کند. حافظه پنهان تنها در صورتی تخلیه می‌شود که زمان تغییر یا اندازه فایل تغییر کرده باشد.
درخواست‌های خواندن بزرگ صادر می‌کند. این کار می‌تواند کارایی را برای برخی فایل‌سیستم‌ها بهبود بخشد، اما می‌تواند کارایی را کاهش نیز بدهد. این گزینه تنها در هسته‌های سری 2.4.X مفید است، زیرا در هسته‌های سری 2.6 اندازه درخواست‌ها به‌طور خودکار برای کارایی بهینه تعیین می‌شود.
این گزینه استفاده از حافظه پنهان صفحه (page cache، حافظه پنهان محتوای فایل) در هسته را برای این فایل‌سیستم غیرفعال می‌کند. این امر چندین تأثیر دارد:
1.
هر فراخوانی سیستمی read(2) یا write(2) یک یا چند عملیات خواندن یا نوشتن را آغاز می‌کند، و داده‌ها در هسته در حافظه پنهان ذخیره نخواهند شد.
2.
مقدار بازگشتی فراخوانی‌های سیستمی read() و write() با مقادیر بازگشتی عملیات خواندن و نوشتن مطابقت خواهد داشت. این ویژگی برای مثال در حالتی که اندازه فایل از قبل مشخص نیست (پیش از خواندن آن) مفید است.
با این گزینه می‌توان حداکثر اندازه عملیات خواندن را تعیین کرد. مقدار پیش‌فرض نامحدود است. توجه داشته باشید که اندازه درخواست‌های خواندن در هر صورت به ۳۲ صفحه (که در i386 برابر ۱۲۸ کیلوبایت است) محدود می‌شود.
حداکثر تعداد بایت‌ها برای پیش‌خوانی (read-ahead) را تعیین می‌کند. مقدار پیش‌فرض توسط هسته تعیین می‌شود. در linux-2.6.22 یا پیش از آن، این مقدار ۱۳۱۰۷۲ (۱۲۸ کیلوبایت) است.
حداکثر تعداد بایت‌ها در یک عملیات نوشتن منفرد را تعیین می‌کند. مقدار پیش‌فرض ۱۲۸ کیلوبایت است. توجه داشته باشید که به دلیل محدودیت‌های گوناگون، اندازه درخواست‌های نوشتن می‌تواند بسیار کوچک‌تر (۴ کیلوبایت) باشد. این محدودیت در آینده برداشته خواهد شد.
عملیات خواندن را به‌صورت ناهمگام انجام می‌دهد. این حالت پیش‌فرض است.
تمام عملیات خواندن (حتی پیش‌خوانی) را به‌صورت همگام انجام می‌دهد.
رفتار پیش‌فرض این است که اگر فایلی باز باشد و حذف شود، نام آن به یک فایل پنهان (.fuse_hiddenXXX) تغییر می‌یابد و تنها زمانی که فایل در نهایت رها و بسته شود حذف می‌گردد. این کار پیاده‌سازی فایل‌سیستم را از نیاز به مدیریت این مشکل معاف می‌کند. این گزینه رفتار پنهان‌سازی را غیرفعال می‌کند و فایل‌ها بلافاصله در عملیات unlink (یا در عملیات تغییر نامی که روی یک فایل موجود بازنویسی انجام می‌دهد) حذف می‌شوند.

توصیه می‌شود از گزینه hard_remove استفاده نکنید. هنگام تنظیم hard_remove، توابع libc زیر روی فایل‌های پیوندزدوده‌شده (unlinked) با شکست مواجه می‌شوند (و کد خطای errno معادل ENOENT برمی‌گردانند): read(2)، write(2)، fsync(2)، close(2)، f*xattr(2)، ftruncate(2)، fstat(2)، fchmod(2)، fchown(2)

چاپ اطلاعات اشکال‌زدایی توسط کتابخانه را فعال می‌کند.
منبع فایل‌سیستم (فیلد اول در /etc/mtab) را تعیین می‌کند. مقدار پیش‌فرض نام برنامه سوار کردن است.
نوع فایل‌سیستم (فیلد سوم در /etc/mtab) را تعیین می‌کند. مقدار پیش‌فرض نام برنامه سوار کردن است. اگر هسته از آن پشتیبانی کند، /etc/mtab و /proc/mounts نوع فایل‌سیستم را به‌صورت fuse.TYPE نشان خواهند داد.

اگر هسته از زیرنوع‌ها پشتیبانی نکند، فیلد منبع به‌صورت TYPE#NAME خواهد بود، یا اگر گزینه fsname مشخص نشده باشد، فقط TYPE خواهد بود.

فیلد st_ino را در توابع هسته getattr() و fill_dir() رعایت می‌کند. این مقدار برای پر کردن فیلد st_ino در توابع stat(2)، lstat(2)، fstat(2) و فیلد d_ino در تابع readdir(2) استفاده می‌شود. فایل‌سیستم مجبور نیست یکتا بودن را تضمین کند، اما برخی برنامه‌ها به یکتا بودن این مقدار برای کل فایل‌سیستم وابسته هستند.
اگر گزینه use_ino داده نشده باشد، باز هم تلاش می‌کند تا فیلد d_ino را در readdir(2) پر کند. اگر نام قبلاً جستجو شده باشد و هنوز در حافظه پنهان باشد، شماره inode یافت‌شده در آنجا استفاده خواهد شد. در غیر این صورت روی -1 تنظیم می‌شود. اگر گزینه use_ino داده شود، این گزینه نادیده گرفته می‌شود.
سوار کردن روی یک فایل یا دایرکتوری غیرخالی را مجاز می‌سازد. به‌طور پیش‌فرض این‌گونه سوار کردن‌ها برای جلوگیری از پوشانده شدن تصادفی داده‌ها (که برای مثال می‌تواند مانع پشتیبان‌گیری خودکار شود) رد می‌شوند.
بیت‌های مجوز در st_mode تعیین‌شده توسط فایل‌سیستم را بازنویسی می‌کند. بیت‌های مجوز حاصل، مواردی هستند که در مقدار umask داده‌شده وجود ندارند. این مقدار در مبنای هشت ارائه می‌شود.
فیلد st_uid تعیین‌شده توسط فایل‌سیستم را بازنویسی می‌کند (N عددی است).
فیلد st_gid تعیین‌شده توسط فایل‌سیستم را بازنویسی می‌کند (N عددی است).
یک فایل‌سیستم مبتنی بر دستگاه بلوکی (block device) را سوار می‌کند. این یک گزینه با امتیاز ویژه است. دستگاه باید با گزینه fsname=NAME مشخص شود.
مهلت زمانی (بر حسب ثانیه) برای نگهداری نتایج جستجوی نام در حافظه پنهان. مقدار پیش‌فرض 1.0 ثانیه است. برای تمام گزینه‌های مهلت زمانی، مشخص کردن کسری از ثانیه نیز ممکن است (مانند entry_timeout=2.8).
مهلت زمانی (بر حسب ثانیه) برای نگهداری جستجوی منفی در حافظه پنهان. این بدان معناست که اگر فایلی وجود نداشت (جستجو ENOENT برگرداند)، جستجو تنها پس از این مهلت تکرار خواهد شد و تا آن زمان فرض می‌شود فایل/دایرکتوری وجود ندارد. مقدار پیش‌فرض 0.0 ثانیه است، به این معنی که ذخیره جستجوهای منفی در حافظه پنهان غیرفعال است.
مهلت زمانی (بر حسب ثانیه) برای نگهداری ویژگی‌های فایل/دایرکتوری در حافظه پنهان. مقدار پیش‌فرض 1.0 ثانیه است.
مهلت زمانی (بر حسب ثانیه) برای نگهداری ویژگی‌های فایل در حافظه پنهان، با هدف بررسی اینکه آیا auto_cache باید داده‌های فایل را هنگام باز کردن تخلیه کند یا خیر. مقدار پیش‌فرض همان مقدار attr_timeout است.
اجازه می‌دهد تا درخواست‌ها قطع شوند. اگر فایل‌سیستم از وقفه درخواست‌ها پشتیبانی نکند، فعال کردن این گزینه ممکن است به رفتارهای غیرمنتظره منجر شود.
مشخص می‌کند که هنگام قطع شدن یک درخواست، کدام شماره سیگنال به فایل‌سیستم ارسال شود. مقدار پیش‌فرض به‌صورت پیش‌فرض روی USR1 تعیین شده است.
ماژول‌ها را به پشته فایل‌سیستم اضافه می‌کند. ماژول‌ها به همان ترتیبی که مشخص شده‌اند در پشته قرار می‌گیرند، به‌طوری که فایل‌سیستم اصلی در پایین پشته قرار می‌گیرد.

ماژول‌ها پشتیبانی از پشته‌سازی فایل‌سیستم را برای رابط برنامه‌نویسی سطح بالا (API) فراهم می‌کنند. ماژول‌های فایل‌سیستم می‌توانند درون libfuse ساخته شوند یا از یک شیء اشتراکی (shared object) بارگیری گردند.

تبدیل مجموعه نویسه‌های نام فایل را انجام می‌دهد. گزینه‌ها عبارتند از:

مجموعه نویسه‌های مبدأ برای تبدیل (برای فهرستی از مقادیر ممکن دستور iconv -l را ببینید). مقدار پیش‌فرض UTF-8 است.
مجموعه نویسه‌های مقصد برای تبدیل. مقدار پیش‌فرض بر اساس محلی‌سازی (locale) جاری تعیین می‌شود.

دایرکتوری داده‌شده را به ابتدای هر مسیر اضافه می‌کند. گزینه‌ها عبارتند از:

دایرکتوری برای اضافه شدن به ابتدای همه مسیرها. این گزینه الزامی است.
پیوندهای نمادین مطلق را به نسبی تبدیل می‌کند.
پیوندهای نمادین مطلق را به نسبی تبدیل نمی‌کند. این حالت پیش‌فرض است.

برنامه fusermount با ویژگی set-user-gid برای گروه fuse نصب می‌شود. این کار برای آن انجام می‌گیرد تا کاربران عضو گروه fuse بتوانند پیاده‌سازی‌های فایل‌سیستم خود را سوار کنند. با این حال، برای جلوگیری از انجام کارهای مخرب توسط کاربران نابکار باید محدودیت‌هایی وجود داشته باشد. در حال حاضر این محدودیت‌ها عبارتند از:

1.
کاربر تنها می‌تواند روی نقطه سوار کردنی عمل سوار کردن را انجام دهد که مجوز نوشتن روی آن را داشته باشد.
2.
نقطه سوار کردن نباید یک دایرکتوری چسبان (sticky directory) باشد که متعلق به کاربر نیست (مانند حالتی که /tmp معمولاً دارد).
3.
هیچ کاربر دیگری (شامل ریشه) نتواند به محتویات فایل‌سیستم سوارشده دسترسی پیدا کند.

فایل‌سیستم‌های FUSE با استفاده از دستور fusermount(1) جدا می‌شوند (fusermount -u mountpoint).

نویسنده اصلی FUSE، Miklos Szeredi <mszeredi@inf.bme.hu> است.

این صفحه راهنما توسط Bastien Roucaries <roucaries.bastien+debian@gmail.com> بر اساس فایل README برای توزیع دبیان گنو/لینوکس (Debian GNU/Linux) نوشته شده است (اما دیگران نیز می‌توانند از آن استفاده کنند).

fusermount(1) mount(8)