Swap لینوکس چیست و آموزش ساخت و افزایش swap در لینوکس



Swap لینوکس چیست؟

فضای Swap، مکانی روی دیسک ذخیره‌سازی سیستم شما (مانند HDD یا SSD) است که به عنوان یک افزونه برای حافظه فیزیکی (RAM) عمل می‌کند. سیستم‌عامل لینوکس تلاش می‌کند تا داده‌های برنامه‌های در حال اجرا و فرآیندهای کرنل را در RAM نگه دارد، زیرا دسترسی به آن بسیار سریع‌تر از دیسک است.

اما RAM یک منبع محدود است. زمانی که حافظه فیزیکی پر می‌شود، کرنل لینوکس صفحات (pages) حافظه که کمتر مورد استفاده قرار گرفته‌اند را از RAM به فضای Swap منتقل می‌کند تا جا برای داده‌های فعال و ضروری‌تر باز شود. این فرآیند “swapping” نامیده می‌شود. وجود Swap به دو دلیل اصلی مهم است:

  1. جلوگیری از خطاهای کمبود حافظه (Out-of-Memory): وقتی RAM کاملا پر شود، سیستم به جای از کار انداختن برنامه‌ها، از Swap استفاده کرده و پایدار باقی می‌ماند.
  2. امکان Hibernation: برای استفاده از قابلیت Hibernation، وضعیت فعلی سیستم از RAM به فضای Swap نوشته می‌شود تا هنگام روشن شدن مجدد، همه چیز به حالت قبل بازگردد.

برای سرورها، به خصوص در زمان تهیه خرید سرور مجازی، پیکربندی صحیح Swap می‌تواند تفاوت چشمگیری در پایداری و عملکرد ایجاد کند.

بررسی وضعیت فعلی Swap

قبل از هر تغییری، ابتدا باید بررسی کنید که آیا سیستم شما فضای Swap فعال دارد یا خیر. یکی از دستورات زیر را در ترمینال وارد کنید:

sudo swapon --show

اگر خروجی این دستور خالی بود، یعنی هیچ فایل یا پارتیشن Swap فعالی روی سیستم شما وجود ندارد. در غیر این صورت، خروجی چیزی شبیه به این خواهد بود:

NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2

همچنین می‌توانید از دستور free برای مشاهده کلی حافظه و Swap استفاده کنید:

free -h

خروجی:


              total        used        free      shared  buff/cache   available
Mem:          3.8Gi       1.0Gi       1.2Gi       1.0Mi       1.6Gi       2.5Gi
Swap:         2.0Gi          0B       2.0Gi

 

چه مقدار Swap نیاز داریم؟

اندازه بهینه برای Swap به میزان RAM و نوع کاربری سیستم شما بستگی دارد. در گذشته قانونی کلی مبنی بر “دو برابر حجم رم” وجود داشت، اما برای سیستم‌های مدرن، توصیه‌های زیر کاربردی‌تر است:

میزان RAMSwap پیشنهادی (بدون Hibernation)Swap پیشنهادی (با Hibernation)
کمتر از 2GBحداقل به اندازه RAM، حداکثر دو برابردو برابر RAM
2GB تا 8GBبه اندازه RAM1.5 برابر RAM
بیش از 8GBحداقل 4GB، بسته به نیاز نرم‌افزارهاRAM + حداقل 4GB

این مقادیر نقطه‌ی شروع هستند و ممکن است بسته به بار کاری سرور شما، مانند یک vps آلمان که میزبان دیتابیس‌های سنگین است، نیاز به تنظیمات متفاوتی داشته باشید.

آموزش ساخت و افزایش Swap (روش Swap File)

استفاده از فایل Swap نسبت به پارتیشن Swap انعطاف‌پذیری بیشتری دارد و امروزه روش رایج‌تری است. این مراحل برای اوبونتو، آلمالینوکس و دیگر توزیع‌های مدرن لینوکس یکسان است.

مرحله 1: ایجاد فایل Swap

ابتدا یک فایل با اندازه دلخواه ایجاد کنید. برای مثال، برای ساخت یک فایل 8 گیگابایتی از دستور fallocate استفاده می‌کنیم که بسیار سریع است:

sudo fallocate -l 8G /swapfile

نکته: اگر فایل‌سیستم شما از fallocate پشتیبانی نمی‌کند، می‌توانید از دستور dd استفاده کنید که کمی کندتر است:

sudo dd if=/dev/zero of=/swapfile bs=1G count=8

 

مرحله 2: تنظیم دسترسی‌های امنیتی

برای امنیت، باید دسترسی به این فایل را فقط به کاربر ریشه (root) محدود کنید:

sudo chmod 600 /swapfile

 

مرحله 3: فرمت کردن فایل برای Swap

حالا با دستور mkswap، فایل ایجاد شده را به عنوان یک فضای Swap فرمت می‌کنیم:

sudo mkswap /swapfile

خروجی باید چیزی شبیه به این باشد:

Setting up swapspace version 1, size = 8 GiB (8589934592 bytes)
no label, UUID=a1e8d34e-7aa7-414c-9f7c-08e1a17c0a6a

 

مرحله 4: فعال‌سازی فضای Swap

فایل را به عنوان فضای Swap فعال کنید:

sudo swapon /swapfile

حالا با اجرای مجدد sudo swapon --show یا free -h می‌توانید ببینید که فضای Swap جدید به سیستم اضافه شده است.

مرحله 5: دائمی کردن تغییرات

برای اینکه بعد از هر بار ریبوت سیستم، این فایل Swap به طور خودکار فعال شود، باید آن را به فایل /etc/fstab اضافه کنید. دستور زیر این کار را برای شما انجام می‌دهد:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

 

آموزش حذف Swap

اگر به هر دلیلی نیاز به حذف فضای Swap دارید (مثلاً برای ایجاد یک فایل جدید و بزرگتر)، مراحل زیر را دنبال کنید:

  1. غیرفعال کردن Swap:
    sudo swapoff /swapfile
  2. حذف از fstab:فایل /etc/fstab را با یک ویرایشگر متن (مانند nano) باز کنید و خط مربوط به swapfile را که در مرحله قبل اضافه کردید، کاملا حذف کنید.
    sudo nano /etc/fstab
  3. حذف فیزیکی فایل:در نهایت، فایل را از روی دیسک پاک کنید:
    sudo rm /swapfile

 

نکته پیشرفته: تنظیم Swappiness

پارامتر Swappiness یک عدد بین 0 تا 100 است که به کرنل لینوکس می‌گوید با چه شدتی از فضای Swap استفاده کند.

  • مقدار 100: استفاده بسیار تهاجمی از Swap.
  • مقدار 0: استفاده از Swap تنها در زمانی که RAM کاملا در آستانه پر شدن باشد.

مقدار پیش‌فرض برای دسکتاپ‌ها معمولا 60 است. اما برای سرورها، به خصوص سرورهای دیتابیس، توصیه می‌شود این مقدار را به 10 کاهش دهید تا سیستم تا جای ممکن از RAM سریع‌تر استفاده کند.

برای مشاهده مقدار فعلی:

cat /proc/sys/vm/swappiness

برای تغییر موقت آن به 10:

sudo sysctl vm.swappiness=10

و برای دائمی کردن این تغییر، خط زیر را به انتهای فایل /etc/sysctl.conf اضافه کنید:

vm.swappiness=10