لینوکس حافظه فیزیکی رم خود را به بخشهای بزرگی بهنام صفحه تقسیم میکند. عملیات جابهجایی (Swapping) عملیاتی است که یک صفحه از حافظه به روی یک فضای از پیش تعیین شده در دیسک سخت منتقل می شود. دلیل این کار این است که آن فضا در حافظه خالی شده تا صفحه دیگری جایگزین آن شود. میزان حافظه مجازی در لینوکس به مجموع حافظه فیزیکی و فضای سواپ گفته میشود.
جابهجایی به دو دلیل بسیار مهم است. نخست این که وقتی سیستم به حافظه بیشتری نیاز پیدا میکند، هسته صفحههایی که کمتر استفاده شده است را جابهجا میکند و حافظه را برای برنامهها و پروسسهای فعلی آزاد میکند، بههمین ترتیب برنامههای جاری اجازه اجرا شدن را پیدا میکنند. دوم اینکه تعداد زیادی از صفحهها توسط برنامههایی اشغال میشود که تنها در مرحله استارتآپ اجرا میشوند و دیگر هیچ وقت اجرا نمیشوند، بدین ترتیب سیستم میتواند حافظه را برای دیگر برنامهها آزاد کند.
هر چند که جابهجایی مضراتی هم دارد. در مقایسه با حافظه اصلی، دیسکها خیلی کندتر هستند. سرعت حافظه اصلی در مقیاس نانوثانیه است و سرعت دیسکها در مقیاس میلیثانیه، بنابراین دسترسی به دیسک ده هزار برابر کندتر از دسترسی به حافظه اصلی خواهد بود. هر چه بیشتر جابهجایی رخ بدهد، در این صورت سیستم کندتر خواهد بود. گاهی اوقات که سیستم بسیار کند میشود، یک صفحه به دیسک میرود و سریعتر به دیسک باز میگردد. اگر این اتفاق پشت سر هم رخ بدهد، در این صورت سیستم در وضعیتی قرار میگیرد که در تلاش برای یافتن حافظه بیشتر است و از طرفی برنامهها را باید در همان لحظه اجرا کند. (سرعت آن بسیار پایین میآید) در این حالت بهترین کار این است که حافظه رم را بیشتر کنید.
لینوکس دو مدل فضای سواپ دارد: پارتیشن و فایل. پارتیشن بخش مستقلی از دیسک سخت است که بهطور خاص برای سواپ کردن استفاده میشود؛ هیچ فایل دیگری در آن بخش قرار نمیگیرد. فایل سواپ فایل مخصوصی است که در سیستم فایل قرار میگیرد و میان فایلهای سیستمی و داده شما است.
برای اینکه ببینید کدام نوع از حافظه سواپ را استفاده میکنید. از دستور swapon –s استفاده کنید. خروجی چیزی شبیه به خط زیر خواهد بود:
Filename Type Size Used Priority
/dev/sda5 partition 859436 0 -1
هر خط در خروجی یک فضای سواپ را نشان میدهد. در اینجا فیلد تایپ مشخص میکند که فضای سواپ به صورت پارتیشنی است. حجم آن در مقیاس کیلوبایت نوشته شده است و فیلد Used نشان میدهد که چه مقدار کیلوبایت از آن استفاده شده است. (که در این حالت استفاده نشده است.) نکته جالب در مورد فضای سواپ این است که اگر چند حافظه با یک اولویت داشته باشید، لینوکس بهصورت همزمان از این حافظهها استفاده میکند و این باعث بهینه شدن عملیات میشود.
برای افزودن فضای سواپ اول باید آن را آماده کنید. قدم اول برای این موضوع این است که یک پارتیشن را کنار بگذارید و بعد آن را بهعنوان سواپ تعیین کنید. بنابراین با دسترسی روت وارد شوید و دستور زیر را بنویسید:
fdisk -l /dev/hdb
توجه داشته باشید که /dev/hdb را با دستگاه روی دیسک خود عوض کنید. خروجی باید چیزی شبیه به مثال زیر باشد:
Device Boot Start End Blocks Id System
--------- ---- ----- ---- ------ -- --------------------
/dev/hdb1 None 2328 2434 859446 82 Linux swap / Solaris
اگر پارتیشن بهعنوان سواپ نشان نشده باشد، باید بعدا آن را با کمک دستور fdisk تغییر دهید و از گزینه –t استفاده کنید. البته حواستان باشد که مطمئن باشید با کدام پارتیشن کار میکنید در غیر این صورت ممکن است اطلاعات مهم خود را از دست بدهید. بنابراین قبل از هر تغییر، دستورات را مجددا چک کنید.
اگر یک پارتیشن بهعنوان سواپ تعریف کنید، باید آن را با استفاده از دستور mkswap آماده کنید.
Mkswap /dev/hdb1
اگر پیغام خطایی وجود نداشت، در این صورت پارتیشن سواپ شما آماده استفاده است. برای فعالسازی آن، کافی است از دستور زیر استفاده کنید:
Swapon /dev/hdb1
همچنین میتوانید متوجه شوید که این پارتیشن در حال استفاده است یا خیر. کافی است به دستور swapon سوییچ –s را بدهید. برای سوار کردن خودکار فضای سواپ در زمان استارتآپ، باید در فایل /etc/fstab یک مدخل جدید ایجاد کنید. در این فایل فهرستی از سیستم فایلهایی که در زمان بوت سوار میشوند وجود دارد.
برای افزودن فضای سواپ خود، کافی است مقادیر زیر را وارد کنید:
/dev/hdb1 none swap sw 0 0
از آنجایی که فضای سواپ نیازی به نقطه سوار شدن (Mount Point) ندارد، آن را none گذاشتیم. برای اینکه بفهمید دستورات موجود در فایل را درست نوشتهاید ولی نمیخواهید سیستم را ریستارت کنید، با دستور swapoff –a (که تمام فضاهای سواپ را غیر فعال میکند) و بعد دستور swapon –a را بنویسید. این دستور تمام فضاهای سواپ در فایل /etc/fstab را استفاده میکند.
فایل سواپ
همانطور که گفتیم، همانند پارتیشن سواپ، لینوکس همچنین از فایل سواپ هم پشتیبانی میکند. درست همانند پارتیشنها، میتوان فایلهای سواپ را هم ایجاد کرد، و بههمان طریق آنها را مورد استفاده قرار داد. استفاده از فایلهای سواپ در مقایسه با پارتیشنها این است که برای استفاده و یا ایجاد سواپ، نیاز نیست یک پارتیشن خالی پیدا کنید و یا یکی از پارتیشنهای خود را تغییر دهید تا یک فضای خالی برای سواپ ایجاد کنید.
برای ایجاد فایل سواپ، از دستور dd استفاده کنید تا یک فایل خالی ایجاد کنید. برای ایجاد یک فایل خالی 1گیگابایتی، کافی است دستور زیر را بنویسید:
dd if=/dev/zero of=/swapfile
bs=1024 count=1048576
در مثال بالا، /swapfile اسم فایل سواپی است که میخواهید بسازید.
با کمک دستور mkswap میتوانید فایل درست شده خود را به فایل سواپ تبدیل کنید. اما این بار تنها کافی است نام فایل را بدهید:
mkswap /swapfile
همچنین میتوانید با کمک دستورهای swapon و swapoff فایل ایجاد شده خود را استفاده و یا غیرفعال کنید. همانند حالت پارتیشنی، اگر بخواهید فایلتان همانند حالت پارتیشنی در زمان بوت سوار شود، خط زیر را در فایل /etc/fstab بنویسید.
/swapfile none swap sw 0 0
حجم فضای سواپ
میتوان بدون در نظر گرفتن حتی یک مگابایت فضای سواپ هم لینوکس را راهاندازی کرد، و در صورتی که حافظه رم بالایی داشته باشید، سیستم بدون مشکل کار خواهد کرد. اما اگر حافظه فیزیکی شما پر شد، در این صورت سیستم کرش خواهد کرد و نمیتواند کار دیگری انجام دهد. بنابراین استفاده از حافظه سواپ توصیه میشود، بهخصوص به این دلیل که دیسکهای سخت خیلی ارزان هستند.
سوال کلیدی این است که چه میزان فضا به سواپ اختصاص بدهید. سیستمهای قدیمیتر و یونیکسی از جمله Sun OS و Ultrix نیاز داشتند حداقل دو یا سه برابر حافظه اصلی را بهعنوان حافظه سواپ تعریف کنید، اما سیستمهای مدرن امروزی به چنین رقمی نیاز ندارند. اما در صورتی که قواعد زیر را رعایت کنید، مشکلی در پیش نخواهید داشت:
1- برای یک سیستم خانگی دو برابر حافظه اصلی خود را به سواپ اختصاص دهید.
2- برای سرور میزان اندکی سواپ کافی است (حدود نیمی از فضای حافظه اصلی)
3- برای کامپیوترهای قدیمیتر مثلا با حافظه 256مگابایت، تا حد امکان سواپ را افزایش دهید.
مدیریت فضای سواپ بخش بسیار مهمی در استفاده و مدیریت لینوکس است و با یک برنامهریزی صحیح و استفاده درست از سواپ کردنها، میتوانید از سیستمی سریع و با ریسک خرابی پایین لذت ببرید. از اینکه چیز جدیدی تجربه کنید نترسید.
محمدرضا قربانی
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم