TMPFS(5) فایلهای پیکربندی TMPFS(5)

tmpfs - سامانه پرونده حافظه موقت (RAM-based filesystem) در لینوکس

سامانه پرونده tmpfs فایلها را در حافظه فرار (RAM و swap) ذخیره میکند و گزینههای اتصالی مانند size, mode, uid, gid, nr_blocks را پشتیبانی مینماید.

قابلیت tmpfs امکان ایجاد سامانه‌های پرونده‌ای را فراهم می‌کند که محتویات آن‌ها در حافظه مجازی قرار می‌گیرد. از آنجا که فایل‌ها در چنین سامانه‌های پرونده‌ای معمولاً در رم (RAM) ذخیره می‌شوند، دسترسی به فایل‌ها فوق‌العاده سریع است.

سامانه پرونده به هنگام سوار کردن (mount) با نوع tmpfs توسط دستوری مانند نمونه زیر به طور خودکار ایجاد می‌شود:


$ sudo mount -t tmpfs -o size=10M tmpfs /mnt/mytmpfs

یک سامانه پرونده tmpfs دارای ویژگی‌های زیر است:

•
سامانه پرونده می‌تواند در صورت وجود فشار بر روی حافظه فیزیکی، از فضای مبادله (swap) استفاده کند.
•
سامانه پرونده تنها به میزانی حافظه فیزیکی و فضای مبادله مصرف می‌کند که برای نگهداری محتویات جاری سامانه پرونده مورد نیاز است.
•
در طول عملیات سوار کردن مجدد (mount -o remount)، اندازه سامانه پرونده می‌تواند تغییر کند (بدون آنکه محتویات موجود سامانه پرونده از دست برود).

چنانچه سامانه پرونده tmpfs پیاده‌سازی (unmount) شود، محتویات آن به طور کامل پاک شده و از بین می‌رود.

سامانه پرونده tmpfs از گزینه‌های سوار کردن زیر پشتیبانی می‌کند:

حد بالایی برای اندازه سامانه پرونده تعیین می‌کند. اندازه بر حسب بایت مشخص شده و به بالا تا صفحات کامل (full pages) گرد می‌شود. اگر اندازه برابر با 0 قرار گیرد، این محدودیت برداشته می‌شود.
اندازه می‌تواند دارای پسوند k، m، یا g برای کیبی‌بایت (Ki)، مبی‌بایت (Mi) و گیبی‌بایت (Gi) باشد (کیلو، مگا و گیگای دودویی).
همچنین اندازه می‌تواند دارای پسوند % باشد تا این نمونه را به درصدی از حافظه فیزیکی RAM محدود کند.
مقدار پیش‌فرض در صورتی که هیچ‌یک از size یا nr_blocks مشخص نشده باشد، size=50% است.
مشابه size است، اما اندازه بر حسب بلوک‌هایی از PAGE_CACHE_SIZE محاسبه می‌شود.
بلوک‌ها را می‌توان با پسوندهای k، m یا g مشابه size تعیین کرد، اما نمی‌توان از پسوند % استفاده نمود.
حداکثر تعداد آی‌نودها (inodes) برای این نمونه را تعیین می‌کند. مقدار پیش‌فرض برابر با نصف تعداد صفحات رم فیزیکی شما است، یا (در دستگاه‌هایی با highmem) تعداد صفحات رم lowmem، هرکدام که کمتر باشد. اگر این مقدار برابر با 0 قرار گیرد، محدودیت برداشته می‌شود.
آی‌نودها را می‌توان با پسوندهای k، m یا g مشابه size مشخص کرد، اما امکان استفاده از پسوند % وجود ندارد.
فضای مبادله (swap) را غیرفعال می‌کند. سوار کردن مجدد باید به تنظیمات اولیه احترام بگذارد. به‌طور پیش‌فرض، سوآپ فعال است.
سطح دسترسی‌های اولیه (permissions) دایرکتوری ریشه را تنظیم می‌کند.
شناسه گروهی اولیه (GID) دایرکتوری ریشه را مشخص می‌کند.
شناسه کاربری اولیه (UID) دایرکتوری ریشه را مشخص می‌کند.
سیاست تخصیص حافظه جدول بزرگ (huge page) را برای تمام فایل‌های این نمونه تنظیم می‌کند (اگر CONFIG_TRANSPARENT_HUGEPAGE در هسته فعال باشد).
مقدار huge_option یکی از موارد زیر است:
هرگز صفحات بزرگ تخصیص داده نشود. این گزینه پیش‌فرض است.
تلاش شود هر بار که صفحه جدیدی نیاز است، صفحات بزرگ تخصیص یابد.
صفحه بزرگ تنها در صورتی تخصیص یابد که به طور کامل درون i_size قرار گیرد. همچنین به راهنمایی‌های توابع fadvise(2) و madvise(2) احترام گذاشته می‌شود.
صفحات بزرگ تنها در صورتی تخصیص داده شوند که توسط fadvise(2) یا madvise(2) درخواست شده باشد.
برای استفاده در شرایط اضطراری، به منظور غیرفعال کردن اجباری گزینه huge در تمام اتصالات.
فعال‌سازی اجباری گزینه huge برای تمام اتصالات؛ برای تست و آزمایش کاربرد دارد.
سیاست تخصیص حافظه نُما (NUMA) را برای تمام فایل‌های این نمونه تنظیم می‌کند (در صورتی که CONFIG_NUMA در هسته فعال باشد).
مقدار mpol_option یکی از موارد زیر است:
استفاده از سیاست تخصیص پیش‌فرض فرآیند (به set_mempolicy(2) مراجعه کنید).
ترجیحاً حافظه از گره (node) مشخص‌شده تخصیص یابد.
حافظه تنها از گره‌های موجود در nodelist تخصیص داده شود.
حافظه به صورت چرخشی از هر گره به نوبت تخصیص داده شود.
حافظه به صورت چرخشی از هر گره در nodelist به نوبت تخصیص داده شود.
ترجیحاً حافظه از گره محلی (local node) تخصیص داده شود.
در موارد بالا، nodelist فهرستی جداشده با کاما از اعداد ده‌دهی و بازه‌ها است که گره‌های NUMA را مشخص می‌کنند. یک بازه، جفتی از اعداد ده‌دهی جداشده با خط تیره است که کوچک‌ترین و بزرگ‌ترین شماره گره در آن بازه را نشان می‌دهد. به عنوان مثال: mpol=bind:0-3,5,7,9-15.

قابلیت tmpfs در لینوکس 2.4 به عنوان جانشینی برای قابلیت قدیمی‌تر ramfs اضافه شد که بررسی محدودیت‌ها یا امکان استفاده از فضای مبادله (swap) را فراهم نمی‌کرد.

برای اینکه ابزارها و برنامه‌های فضای کاربر بتوانند سامانه‌های پرونده tmpfs را ایجاد کنند، هسته باید با گزینه CONFIG_TMPFS پیکربندی شده باشد.

سامانه پرونده tmpfs از خصیصه‌های گسترش‌یافته (به xattr(7) مراجعه کنید) پشتیبانی می‌کند، اما خصیصه‌های گسترش‌یافته کاربری (user) مجاز نیستند.

یک سامانه پرونده حافظه اشتراکی داخلی برای حافظه اشتراکی System V (shmget(2)) و نگاشت‌های ناشناس اشتراکی (mmap(2) با پرچم‌های MAP_SHARED و MAP_ANONYMOUS) استفاده می‌شود. این سامانه پرونده بدون توجه به اینکه هسته با گزینه CONFIG_TMPFS پیکربندی شده باشد یا خیر، در دسترس است.

یک سامانه پرونده tmpfs که در مسیر /dev/shm سوار می‌شود، برای پیاده‌سازی حافظه اشتراکی POSIX (shm_overview(7)) و سمافورهای POSIX (sem_overview(7)) به کار می‌رود.

میزان حافظه مصرف‌شده توسط تمام سامانه‌های پرونده tmpfs در فیلد Shmem از فایل /proc/meminfo و در فیلد shared که توسط free(1) نمایش داده می‌شود، قابل مشاهده است.

قابلیت tmpfs پیش‌تر با نام shmfs شناخته می‌شد.

df(1), du(1), memfd_create(2), mmap(2), set_mempolicy(2), shm_open(3), mount(8)

فایل‌های راهنمای منبع هسته لینوکس: Documentation/filesystems/tmpfs.txt و Documentation/admin-guide/mm/transhuge.rst.

مه ۲۰۲۵ man-pages