حافظه Swap چیست؟ آموزش ایجاد و استفاده از Swap File در لینوکس
زمانی که شما می خواهید یک برنامه ای را در سیستم عامل اجرا کنید، نیاز است که این برنامه به داخل حافظه اصلی یا همان (RAM) انتقال داده شود. سیستم عامل های جدیدتر و به روز تر، تعداد برنامه های بیشتری را اجرا می کنندو سرویس های زیادی هم در بک گراند در حال اجرا هستند. اما از طرف دیگر RAM محدود است و زمانی که تعداد زیادی از برنامه ها به صورت همزمان اجرا می شوند، در این شرایط میزان رم که برای اجرا کردن این برنامه ها نیاز است، از میزان حافظه اصلی بیشتر می شود و مشاهده خواهید کرد که سیستم شما با کمبود حافظه اصلی مواجه شده است و درنهایت کرش (crash) می کند.
Swap یک فضا در سیستم عامل لینوکس است که سبب می شود سبب افزایش کارایی فضای رم شما در سیستم عامل می شود. در حقیقت Swap یک حافظه مجازی است که زمانی که سیستم عامل رم کافی ندارد، می توانید از آن استفاده کنید.
این وضعیت چندان مطلوب نیست و شما باید برای این مشکل راه حلی پیدا کنید. اولین راه حلی که می توانید برای رفع این مشکل انجام دهید، این است که حافظه اصلی سیستم را افزایش دهید که البته هزینه این کار بالا است و حتی میزان رم قابل آدرس دهی محدودیت هایی دارد و به همین دلیل بسیاری از افراد از راه حل دوم استفاده می کنند.
راه حل دومی که برای حل این مشکل وجود دارد، این است که قسمتی از فضای هارد دیسک را به صورت مجازی برای استفاده به عنوان حافظه اصلی معرفی کنیم. در دنیای لینوکس و یونیکس به این فضا swap گفته می شود که می توانید آن را هم به صورت پارتیشن و هم فایل تعریف کنید که بهترین کار تعریف آن به صورت پارتیشن است. علت این موضوع این است که در صورتی که فضای swap به شکل فایل معرفی شود، در این صورت تکه تکه شدن سبب می شود که فایل سرعت و بهره وری عملیات swap پایین بیاید.
البته این مشکل معمولا در سیستم های کامپیوتری خانگی به وجود می آید و اگر شما خرید سرور مجازی لینوکس را از آسام سرور انجام داده باشید، نه با این مشکلات مواجه خواهید بود و نه نیاز به استفاده از این روش خواهید داشت؛ چرا که به راحتی می توانید منابع خودتان را ارتقا دهید.
همراه ما باشید تا به شما به صورت کامل در مورد حافظه swap بگوییم و آموزش ایجاد و استفاده از Swap File در لینوکس را در اختیار شما قرار دهیم.
فایل swap در لینوکس چیست؟
یک فایل swap به لینوکس اجازه می دهد تا فضای دیسک را به عنوان RAM شبیه سازی کند. هنگامی که سیستم شما شروع به اتمام رم می کند، از فضای swap استفاده می کند و مقداری از محتوای RAM را روی فضای دیسک جابجا می کند. این کار RAM را آزاد می کند تا فرآیندهای مهم تری را ارائه دهد. هنگامی که RAM دوباره آزاد شد، داده ها را از دیسک تعویض می کند. به طور سنتی، فضای swap به عنوان یک پارتیشن جداگانه روی دیسک استفاده می شود. وقتی لینوکس را نصب می کنید، یک پارتیشن جداگانه فقط برای تعویض ایجاد می کنید. اما این روند در سال های اخیر تغییر کرده است.
با فایل swap، دیگر نیازی به پارتیشن جداگانه ندارید. شما یک فایل زیر روت ایجاد میکنید و به سیستم خود میگویید که از آن به عنوان فضای swap استفاده کند.
با پارتیشن swap اختصاصی، تغییر اندازه فضای مبادله یک کابوس و در بسیاری از موارد یک کار غیرممکن است. اما با فایل های swap، می توانید اندازه آن ها را به دلخواه تغییر دهید.
نسخه های اخیر اوبونتو و برخی دیگر از توزیع های لینوکس به طور پیش فرض شروع به استفاده از فایل swap کرده اند. حتی اگر یک پارتیشن swap ایجاد نکنید، اوبونتو به تنهایی یک فایل swap حدود 1 گیگابایت ایجاد می کند.
بیایید اطلاعات بیشتری در مورد فایل های swap به دست آوریم.
فضای swap را در لینوکس بررسی کنید
پیش از اینکه بروید و شروع به اضافه کردن فضای swap کنید، ایده خوبی است که بررسی کنید که آیا فضای swap از قبل در سیستم خود موجود است یا خیر.
می توانید آن را با دستور رایگان در لینوکس بررسی کنید. سیستم ما، Dell XPS دارای 14 گیگابایت swap است.
free -h
total used free shared buff/cache available
Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G
Swap: 14G 0B 14G
دستور free اندازه فضای swap را به شما می دهد، اما به شما نمی گوید که یک پارتیشن swap واقعی است یا یک فایل swap. دستور swapon گزینه بهتری است.
swapon --showNAME TYPE SIZE USED PRIO/dev/nvme0n1p4 partition 14.9G 0B -2
همانطور که می بینید، ما 14.9 گیگابایت فضای swap داریم که در یک پارتیشن جداگانه قرار دارد. اگر فایل swap بود، نوع آن به جای پارتیشن، فایل بود.
swapon --showNAME TYPE SIZE USED PRIO/swapfile file 2G 0B -2
اگر فضای swap در سیستم خود ندارید، باید چیزی شبیه به این نشان دهد:
free -h
total used free shared buff/cache available
Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G
Swap: 0B 0B 0B
دستور swapon هیچ خروجی را نشان نمی دهد.
ایجاد فایل swap در لینوکس
اگر سیستم شما فضای swap ندارد یا اگر فکر می کنید فضای swap به اندازه کافی نیست، می توانید فایل swap را در لینوکس ایجاد کنید. همچنین می توانید چندین فایل مبادله ایجاد کنید.
بیایید نحوه ایجاد فایل swap در لینوکس را ببینیم. ما در این آموزش از اوبونتو 18.04 استفاده می کنم اما باید روی سایر توزیع های لینوکس نیز کار کند.
- یک فایل swap جدید بسازید
اول از همه، یک فایل با اندازه فضای مبادله ای که می خواهید ایجاد کنید. فرض کنید می خواهم 1 گیگابایت فضای مبادله به سیستم خود اضافه کنم. از دستور fallocate برای ایجاد یک فایل با حجم 1 گیگابایت استفاده کنید.
sudo fallocate -l 1G /swapfile
توصیه می شود فقط به root اجازه خواندن و نوشتن در فایل swap را بدهید. حتی وقتی میخواهید از این فایل برای ناحیه مبادله استفاده کنید، هشداری مانند «مجوزهای ناامن 0644، 0600 پیشنهاد شده» را مشاهده خواهید کرد.
sudo chmod 600 /swapfile
توجه داشته باشید که نام فایل swap می تواند هر چیزی باشد. اگر به چند فضای مبادله نیاز دارید، می توانید نام مناسبی مانند swap_file_1، swap_file_2 و غیره را به آن بدهید. این فقط یک فایل با اندازه از پیش تعریف شده است.
- فایل جدید را به عنوان فضای مبادله علامت گذاری کنید
باید به سیستم لینوکس بگویید که این فایل به عنوان فضای مبادله استفاده خواهد شد. می توانید این کار را با ابزار mkswap انجام دهید.
sudo mkswap /swapfile
شما باید یک خروجی مانند این را ببینید:
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)no label, UUID=7e1faacb-ea93-4c49-a53d-fb40f3ce016a
- فایل swap را فعال کنید
اکنون سیستم شما می داند که فایل swap می تواند به عنوان فضای مبادله استفاده شود. اما هنوز انجام نشده است. باید فایل swap را فعال کنید تا سیستم شما بتواند از این فایل به عنوان swap استفاده کند.
sudo swapon /swapfile
حالا اگر فضای swap را بررسی کنید، باید ببینید که سیستم لینوکس شما آن را به عنوان ناحیه swap شناسایی و استفاده می کند:
swapon --showNAME TYPE SIZE USED PRIO/swapfile file 1024M 0B -2
- تغییرات را دائمی کنید
هر کاری که تاکنون انجام داده اید موقتی است. سیستم خود را مجددا راه اندازی کنید و تمام تغییرات ناپدید می شوند.
می توانید با افزودن فایل swap ایجاد شده به فایل /etc/fstab تغییرات را دائمی کنید.
همیشه ایده خوبی است که قبل از ایجاد هر گونه تغییر در فایل /etc/fstab یک نسخه پشتیبان تهیه کنید.
sudo cp /etc/fstab /etc/fstab.back
اکنون می توانید خط زیر را به انتهای فایل /etc/fstab اضافه کنید:
/swapfile none swap sw 0 0
می توانید این کار را به صورت دستی با استفاده از ویرایشگر متن خط فرمان انجام دهید یا فقط از دستور زیر استفاده کنید:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
حالا شما همه چیز را سر جای خود دارید. فایل swap شما حتی پس از راه اندازی مجدد سیستم لینوکس مورد استفاده قرار خواهد گرفت.
swappiness را تنظیم کنید
پارامترهای swappiness تعیین می کند که هر چند وقت یکبار باید از فضای مبادله استفاده شود. مقدار مبادله از 0 تا 100 متغیر است. مقدار بالاتر به این معنی است که فضای مبادله بیشتر استفاده می شود.
swappiness پیشفرض در دسکتاپ اوبونتو 60 است در حالی که در سرور 1 است. میتوانید swappiness را با دستور زیر بررسی کنید:
cat /proc/sys/vm/swappiness
چرا سرورها باید از مبادله کم استفاده کنند؟ از آنجایی که swap کندتر از RAM است و برای عملکرد بهتر، RAM باید تا حد امکان استفاده شود. در سرورها، ضریب عملکرد بسیار مهم است و از این رو جابجایی تا حد ممکن کم است.
می توانید با استفاده از دستور systemd زیر، swappiness را تغییر دهید:
sudo sysctl vm.swappiness=25
هر چند این تغییر آن فقط موقت است. اگر میخواهید آن را دائمی کنید، میتوانید فایل /etc/sysctl.conf را ویرایش کنید و مقدار swappiness را در انتهای فایل اضافه کنید:
vm.swappiness=25
تغییر اندازه فضای مبادله در لینوکس
چند راه وجود دارد که می توانید اندازه فضای swap را در لینوکس تغییر دهید. اما قبل از دیدن آن، باید چند چیز در مورد آن یاد بگیرید.
هنگامی که از سیستم خود میخواهید استفاده از فایل swap را برای ناحیه swap متوقف کنید، تمام دادهها (به طور دقیق صفحات) را به RAM باز میگرداند. بنابراین قبل از تعویض باید مقدار کافی رم آزاد داشته باشید.
به همین دلیل است که یک تمرین خوب ایجاد و فعال کردن یک فایل مبادله موقت دیگر است. به این ترتیب، هنگامی که منطقه مبادله اصلی را تعویض می کنید، سیستم شما از فایل swap موقت استفاده می کند. اکنون می توانید اندازه فضای مبادله اصلی را تغییر دهید. شما می توانید به صورت دستی فایل swap موقت را حذف کنید یا آن را به حال خود رها کنید و در بوت بعدی به طور خودکار حذف می شود.
اگر رم آزاد کافی دارید یا فضای تعویض موقت ایجاد کرده اید، فایل اصلی خود را تعویض کنید.
sudo swapoff /swapfile
اکنون می توانید از دستور fallocate برای تغییر اندازه فایل استفاده کنید. فرض کنید، اندازه آن را به 2 گیگابایت تغییر دهید:
sudo fallocate -l 2G /swapfile
حالا فایل را دوباره به عنوان فضای مبادله علامت بزنید:
sudo mkswap /swapfile
و دوباره swap را روشن کنید:
sudo swapon /swapfile
همچنین می توانید انتخاب کنید که چندین فایل مبادله همزمان داشته باشید.
حذف فایل swap در لینوکس
ممکن است دلایل خود را برای عدم استفاده از فایل swap در لینوکس داشته باشید. اگر میخواهید آن را حذف کنید، فرآیند مشابه چیزی است که در تغییر اندازه swap مشاهده کردید.
ابتدا مطمئن شوید که رم آزاد کافی دارید. حالا فایل را عوض کنید:
sudo swapoff /swapfile
مرحله بعدی حذف ورودی مربوطه از فایل /etc/fstab است.
و در پایان، می توانید فایل را حذف کنید تا فضا آزاد شود:
sudo rm /swapfile
سخن آخر
فکر می کنم اکنون درک خوبی از مفهوم فایل swap در لینوکس دارید و می توانید به راحتی فایل swap ایجاد کنید یا اندازه آن ها را بنا به نیاز خودتان تغییر دهید. در صورتی که سوالی در رابطه با این مقاله دارید، می توانید با ما در قسمت نظرات به اشتراک بگذارید تا در سریع ترین زمان شما را راهنمایی کنیم.
سوالات متداول:
به چند شکل فضای swap وجود دارد؟
به دو شکل فایل Swap و پارتیشن اختصاصی Swap است.
پسوند فایل SWAPچیه؟
سواپ در لینوکس پسوند ندارد. نیازی هم به وجودش نیست. برای ایجاد فایل و تبدیل آن به swap نیازی به گذاشتن پسوند نیست.