Swap لینوکس چیست و آموزش ساخت و افزایش swap در لینوکس
Swap لینوکس چیست؟
فضای Swap، مکانی روی دیسک ذخیرهسازی سیستم شما (مانند HDD یا SSD) است که به عنوان یک افزونه برای حافظه فیزیکی (RAM) عمل میکند. سیستمعامل لینوکس تلاش میکند تا دادههای برنامههای در حال اجرا و فرآیندهای کرنل را در RAM نگه دارد، زیرا دسترسی به آن بسیار سریعتر از دیسک است.
اما RAM یک منبع محدود است. زمانی که حافظه فیزیکی پر میشود، کرنل لینوکس صفحات (pages) حافظه که کمتر مورد استفاده قرار گرفتهاند را از RAM به فضای Swap منتقل میکند تا جا برای دادههای فعال و ضروریتر باز شود. این فرآیند “swapping” نامیده میشود. وجود Swap به دو دلیل اصلی مهم است:
- جلوگیری از خطاهای کمبود حافظه (Out-of-Memory): وقتی RAM کاملا پر شود، سیستم به جای از کار انداختن برنامهها، از Swap استفاده کرده و پایدار باقی میماند.
- امکان 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 و نوع کاربری سیستم شما بستگی دارد. در گذشته قانونی کلی مبنی بر “دو برابر حجم رم” وجود داشت، اما برای سیستمهای مدرن، توصیههای زیر کاربردیتر است:
میزان RAM | Swap پیشنهادی (بدون Hibernation) | Swap پیشنهادی (با Hibernation) |
---|---|---|
کمتر از 2GB | حداقل به اندازه RAM، حداکثر دو برابر | دو برابر RAM |
2GB تا 8GB | به اندازه RAM | 1.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 دارید (مثلاً برای ایجاد یک فایل جدید و بزرگتر)، مراحل زیر را دنبال کنید:
- غیرفعال کردن Swap:
sudo swapoff /swapfile
- حذف از fstab:فایل
/etc/fstab
را با یک ویرایشگر متن (مانند nano) باز کنید و خط مربوط بهswapfile
را که در مرحله قبل اضافه کردید، کاملا حذف کنید.sudo nano /etc/fstab
- حذف فیزیکی فایل:در نهایت، فایل را از روی دیسک پاک کنید:
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
فهرست تیترها