اوبنتوسرور

آموزش افزودن فضای Swap روی اوبونتو

مقدمه

وقتی رم سرورهای اوبونتو پر می‌شود، قاتل کمبود حافظه (OOM Killer) در لینوکس می‌تواند پروسه‌ها را خاتمه داده و سرویس‌ها را مختل کند. افزودن فضای Swap به کرنل، فضای ذخیره‌سازی ثانویه‌ای برای صفحات حافظه بی‌نام (Anonymous) فراهم می‌کند تا بارهای کاری به‌جای شکست ناگهانی، با افت ملایم به کار خود ادامه دهند. این آموزش ساخت یک Swapfile روی اوبونتو 22.04 و 24.04، فعال‌سازی آن با mkswap و swapon، ماندگارکردن آن در /etc/fstab، تنظیم vm.swappiness و vm.vfs_cache_pressure و رفع خطاهای رایج راه‌اندازی را قدم‌به‌قدم بررسی می‌کند. این مقاله برای مدیرانی نوشته شده که سرورهای مجازی پارمین کلود، اینستنس‌های VPS یا سرورهای فیزیکی (Bare Metal) مبتنی بر اوبونتو را مدیریت می‌کنند.

نکات کلیدی

  • قبل از اعمال هرگونه تغییر، Swap موجود را با sudo swapon --show و free -h بررسی کنید.
  • فایل Swap را روی ext4 با fallocate بسازید؛ یا روی Btrfs، XFS و فایل‌سیستم‌های قدیمی‌تر — که در آن‌ها تخصیص Sparse باعث خرابی swapon می‌شود — با dd.
  • فایل Swap را با chmod 600 ایمن کنید، با mkswap مقداردهی اولیه کنید و با swapon فعالش کنید.
  • برای ماندگاری Swap بین ریبوت‌ها، خط /swapfile none swap sw 0 0 را به /etc/fstab اضافه کنید و قبل از ریبوت، آن را با sudo findmnt --verify --verbose اعتبارسنجی کنید.
  • vm.swappiness و vm.vfs_cache_pressure را برای بارهای کاری سرور تنظیم کنید و مقادیر دائمی را روی اوبونتو 22.04 و 24.04 زیر /etc/sysctl.d/ ذخیره کنید.
  • Swap را به‌صورت موقت با swapoff غیرفعال کنید؛ یا برای حذف دائمی آن، ورودی fstab را حذف و فایل /swapfile را پاک کنید.
  • از خطاهای رایجی مانند خطای Invalid argument در swapon، مشکلات دسترسی، مشکلات fallocate روی Btrfs و اشتباهات fstab بازیابی کنید.

پیش‌نیازها

  • یک سرور اوبونتو 22.04 یا 24.04 و یک کاربر غیر root با دسترسی sudo. اگر هنوز این مورد را پیکربندی نکرده‌اید، راهنمای راه‌اندازی اولیه سرور با اوبونتو 22.04 را دنبال کنید.
  • حداقل ۲ گیگابایت فضای دیسک آزاد روی فایل‌سیستمی که قرار است /swapfile را در خود جای دهد، برای یک تخصیص معمول (اگر فایل Swap بزرگ‌تری انتخاب کردید، این مقدار را بیشتر در نظر بگیرید).
  • آشنایی با کار با ترمینال و دسترسی‌های پایه فایل.

روی اوبونتو 22.04 و 24.04، دستورات و مسیرهای sysctl در این راهنما رفتار یکسانی دارند. بسیاری از ایمیج‌های پارمین کلود و سایر سرویس‌های ابری در پلن‌های کوچک‌تر بدون سوآپ فعال عرضه می‌شوند، در حالی که ایمیج‌های بزرگ‌تر ممکن است از قبل شامل فایل یا پارتیشن Swap باشند. پیش از افزودن دستگاه Swap دیگر، وضعیت فعلی خود را بررسی کنید.

برای بررسی وضعیت فعلی Swap از سرور خود، اجرا کنید:

sudo swapon --show
free -h

خروجی:

              total        used        free      shared  buff/cache   available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
Swap:            0B          0B          0B

اگر sudo swapon --show چیزی چاپ نکند، هیچ سوآپی فعال نیست. در این حالت، خط Swap در خروجی free -h باید مقدار کل 0B را نشان دهد.

فضای Swap چیست و چه زمانی به آن نیاز دارید

کرنل لینوکس چگونه از Swap استفاده می‌کند

Swap فضایی مبتنی بر دیسک است که کرنل زمانی از آن استفاده می‌کند که نمی‌تواند همه صفحات حافظه بی‌نام را در رم نگه دارد. صفحات بی‌نام به بخش‌های Heap و Stack تعلق دارند، نه نگاشت‌های مبتنی بر فایل. وقتی حافظه فیزیکی کم می‌شود، کرنل صفحات را بازیابی (Reclaim) می‌کند و ممکن است صفحات سردِ بی‌نام را به Swap بنویسد تا بارهای کاری فعال، رم را در اختیار داشته باشند. خواندن و نوشتن روی Swap از DRAM کندتر است؛ بنابراین Swap یک تور ایمنی است، نه جایگزینی برای رمِ کافی در بار ثابت.

اگر سرور شما قبلاً به دلیل اتمام حافظه پروسه‌ای را خاتمه داده، Swap به کرنل زمان می‌داد تا پیش از فراخوانی قاتل OOM، صفحات را بازیابی کند. برای بررسی اینکه آیا این اتفاق روی سیستم شما افتاده است، دستور sudo dmesg | grep -i 'killed process' یا sudo journalctl -k | grep -i 'killed process' را اجرا کنید. یافتن تطابق یعنی رم به پایان رسیده است و افزودن Swap، احتمال تکرار خاتمه پروسه‌ها زیر بار مشابه را کاهش می‌دهد.

فایل Swap در برابر پارتیشن Swap

پارتیشن Swap یک برش اختصاصی از دیسک است که برای Swap فرمت شده. فایل Swap یک فایل معمولی روی یک فایل‌سیستم موجود است که کرنل از آن به‌عنوان Swap استفاده می‌کند. پیش‌فرض‌های نصب‌کننده اوبونتو و بسیاری از ایمیج‌های ابری، فایل‌های Swap را ترجیح می‌دهند؛ چون تغییر اندازه به پارتیشن‌بندی مجدد نیاز ندارد. رفتار فایل‌سیستم اهمیت دارد: برخی چیدمان‌ها هنگام ساخت فایل، به‌جای fallocate به dd نیاز دارند. برای آشنایی بیشتر با رابطه فایل‌سیستم‌ها با ساختار ذخیره‌سازی، مقاله «درک ساختار فایل‌سیستم در یک VPS لینوکسی» را ببینید.

ویژگیپارتیشن Swapفایل Swap
پیچیدگی راه‌اندازینیازمند هم‌ترازی پارتیشن و اغلب Downtime برای تغییر اندازهبا fallocate یا dd ساخته می‌شود؛ تغییر اندازه با جایگزینی فایل
انعطاف تغییر اندازهپایین‌تر؛ مگر با پارتیشن‌بندی مجدد یا LVMبالاتر: فایل را جایگزین و mkswap را دوباره اجرا کنید
الزام فایل‌سیستمیپارتیشن اختصاصی خود را دارد؛ بدون فایل‌سیستم میزبانروی روت یا هر فایل‌سیستم ماونت‌شده دیگر قرار می‌گیرد
پیش‌فرض اوبونتونصب‌های قدیمی و برخی ایمیج‌هارایج در نصب‌های مدرن دسکتاپ و سرور اوبونتو
پشتیبانی Hibernationمعمولاً برای Resume-to-Disk لازم استدر راه‌اندازی‌های معمول سرور برای Hibernate استفاده نمی‌شود
مناسب برایدیسک‌های قدیمی، گردش کارهای Hibernateسرورهای مجازی پارمین کلود، هاست‌های VPS، سایزینگ الاستیک

چه مقدار فضای Swap تخصیص دهیم

اندازه Swap را بر اساس سطح رم و میزان تحمل‌پذیری خود نسبت به Paging مبتنی بر دیسک تعیین کنید. بازه‌های زیر با راهنماهای معمول سرور لینوکس هم‌خوانی دارند:

رم سیستمSwap پیشنهادینکات
تا ۲ گیگابایت۲ برابر رمفضای اضافی برای اینستنس‌های کوچک
۲ تا ۸ گیگابایت۲ تا ۴ گیگابایتهاست‌های معمول VPS و اپلیکیشن‌های وب
۸ تا ۱۶ گیگابایت۴ گیگابایتذخیره Paging متعادل
۱۶ گیگابایت یا بیشتر۲ تا ۴ گیگابایتفقط در صورت نیاز به Hibernate یا جهش‌های غیرمعمول افزایش دهید

مثال‌های زیر از یک فایل Swap با حجم ۲ گیگابایت استفاده می‌کنند. آرگومان‌های اندازه را متناسب با برنامه خود تغییر دهید.

مرحله ۱ — بررسی فضای Swap موجود

تأیید Swap فعال با swapon

sudo swapon --show

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

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

خواندن حافظه و Swap با free

free -h

خروجی:

              total        used        free      shared  buff/cache   available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
Swap:            0B          0B          0B

وقتی Swap فعال باشد، سطر Swap مقادیر کل غیرصفر نشان می‌دهد.

تأیید فضای دیسک موجود با df

df -h

خروجی:

Filesystem      Size  Used Avail Use% Mounted on
udev            474M     0  474M   0% /dev
tmpfs            99M  932K   98M   1% /run
/dev/vda1        25G  1.4G   23G   7% /
tmpfs           491M     0  491M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           491M     0  491M   0% /sys/fs/cgroup
/dev/vda15      105M  3.9M  101M   4% /boot/efi
/dev/loop0       55M   55M     0 100% /snap/core18/1705
/dev/loop1       69M   69M     0 100% /snap/lxd/14804
/dev/loop2       28M   28M     0 100% /snap/snapd/7264
tmpfs            99M     0   99M   0% /run/user/1000

تأیید کنید که نقطه Mountی که قرار است /swapfile را در خود جای دهد — معمولاً / — فضای کافی برای فایل Swap به‌علاوه رشد عادی دارد.

مرحله ۲ — ساخت فایل Swap

روش ۱: استفاده از fallocate (پیشنهادی برای ext4)

fallocate روی فایل‌سیستم‌هایی که Extentهای کاملاً تخصیص‌یافته و مناسب Swap می‌نویسند، به‌سرعت فضا رزرو می‌کند.

sudo fallocate -l 2G /swapfile
ls -lh /swapfile

خروجی:

-rw-r--r-- 1 root root 2.0G Apr 25 11:14 /swapfile

به‌جای کورکورانه کپی‌کردن مثال، از جدول بخش قبل یک اندازه انتخاب کنید.

روی Btrfs، دستور fallocate فایل‌هایی با Extentهای نوشته‌نشده می‌سازد که باعث شکست swapon می‌شود. روی فایل‌سیستم‌های Btrfs از روش dd استفاده کنید.

روش ۲: استفاده از dd (الزامی برای Btrfs، XFS و فایل‌سیستم‌های قدیمی‌تر)

dd بلوک‌های پرشده با صفر می‌نویسد و فایلی کاملاً پیوسته می‌سازد که بررسی‌های هدر Swap کرنل را پاس می‌کند.

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

خروجی:

2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 3.12345 s, 687 MB/s

این دستور بیشتر از fallocate طول می‌کشد، اما فایلی کاملاً تخصیص‌یافته و بدون حفره (Hole) تولید می‌کند.

چه زمانی از fallocate و چه زمانی از dd استفاده کنیم

عاملfallocatedd
سرعترزرو سریعنوشتن کامل و کندتر
سازگاری فایل‌سیستمروی ext4 و فایل‌سیستم‌های دیگرِ تخصیص‌دهنده کامل کار می‌کندبه‌طور گسترده در جایی که نوشتن‌ها روی /dev/zero موفق باشند کار می‌کند
ریسک فایل Sparseروی چیدمان‌های CoW یا تخصیص تأخیری ممکن استپایین: نوشتن‌های پیوسته فایل را پر می‌کنند
پشتیبانی Btrfsبرای فایل‌های Swap مناسب نیستاز dd استفاده کنید
پشتیبانی XFSاغلب برای Swap مشکل‌ساز است؛ dd ترجیح داده می‌شودروش پیشنهادی
مناسب برایروت‌های ext4 روی سرورهای مجازی پارمین کلودBtrfs، XFS یا وقتی swapon فایل fallocateشده را رد می‌کند

مرحله ۳ — ایمن‌سازی فایل Swap

فایل‌های Swap می‌توانند شامل بقایای حافظه پروسه‌ها — از جمله اطلاعات احراز هویت یا داده‌های نشست — باشند. سوآپِ قابل‌خواندن توسط همه، یک ریسک افشای اطلاعات است.

sudo chmod 600 /swapfile
ls -lh /swapfile

خروجی:

-rw------- 1 root root 2.0G Apr 25 11:14 /swapfile

فقط کاربر root باید بیت‌های خواندن و نوشتن را داشته باشد.

مرحله ۴ — علامت‌گذاری فایل به‌عنوان فضای Swap

دستور mkswap هدر Swap را می‌نویسد و یک UUID و به‌صورت اختیاری یک Label اختصاص می‌دهد.

sudo mkswap /swapfile

خروجی:

Setting up swapspace version 1, size = 2 GiB (2147483648 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

مرحله ۵ — فعال‌سازی فایل Swap

sudo swapon /swapfile
sudo swapon --show

خروجی:

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

ستون PRIO اولویت Swap را نشان می‌دهد. کرنل به دستگاه‌های Swapi که بدون اولویت صریح اضافه می‌شوند، به‌صورت خودکار اولویت‌های منفی (‏-2 و -3 و به همین ترتیب) اختصاص می‌دهد. مقادیر بالاتر زودتر استفاده می‌شوند؛ پس یک فایل Swap منفرد با اولویت -2 مشکلی ندارد. اگر یک دستگاه Swap دوم روی فضای ذخیره‌سازی سریع‌تر اضافه می‌کنید و می‌خواهید کرنل آن را ترجیح دهد، اولویت بالاتری را با swapon -p 10 /path/to/faster-swap یا با افزودن pri=10 به فیلد گزینه‌های fstab تنظیم کنید.

free -h

خروجی:

              total        used        free      shared  buff/cache   available
Mem:          981Mi       123Mi       644Mi       0.0Ki       213Mi       714Mi
Swap:         2.0Gi          0B       2.0Gi

کرنل هنگامی که فشار حافظه ایجاب کند، صفحه‌بندی (Paging) به /swapfile را آغاز می‌کند.

مرحله ۶ — دائمی‌کردن فایل Swap

تغییرات تا اینجا فقط تا ریبوت اعتبار دارند. یک ورودی /etc/fstab اضافه کنید تا systemd سوآپ را به‌طور خودکار فعال کند.

قبل از ویرایش، از fstab بکاپ بگیرید:

sudo cp /etc/fstab /etc/fstab.bak

خط مربوط به Swap را اضافه کنید:

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

پنج فیلد این ورودی به systemd می‌گویند چطور فایل Swap را هنگام بوت مدیریت کند. /swapfile مسیر دستگاه یا فایل است. مقدار none نقطه Mount است که برای Swap استفاده نمی‌شود؛ چون Swap در درخت فایل‌سیستم Mount نمی‌شود. مقدار swap نوع فایل‌سیستم است. مقدار sw مجموعه گزینه‌های Mount است که برای Swap یعنی رفتار پیش‌فرض. صفرِ اول، بکاپ dump را برای این ورودی غیرفعال می‌کند. صفرِ دوم، ترتیب اجرای fsck را طوری تنظیم می‌کند که بررسی‌های فایل‌سیستم رد شوند؛ که این رفتار برای Swap درست است.

سینتکس و اهداف Mount را اعتبارسنجی کنید:

sudo findmnt --verify --verbose

خروجی:

/
   [ ] target exists
   [ ] UUID=b3e62c74-e07b-4b57-bfb8-b39bbdbda993
   [ ] LABEL: (none)
   [ ] FS options: rw,relatime
/swapfile
   [ ] target exists
0 parse errors, 0 errors, 0 warnings

یک ورودی معیوب /etc/fstab می‌تواند مانع بوت شدن سیستم شود. همیشه ابتدا از فایل بکاپ بگیرید و قبل از ریبوت با sudo findmnt --verify اعتبارسنجی کنید.

برای اطلاعات بیشتر درباره /etc/fstab، عملیات Mount و مدیریت ذخیره‌سازی، مقاله «انجام وظایف مدیریتی پایه برای دستگاه‌های ذخیره‌سازی در لینوکس» را بخوانید.

مرحله ۷ — تنظیم عملکرد Swap با پارامترهای کرنل

تنظیم پارامترهای کرنل تغییر می‌دهد که اوبونتو با چه اشتیاقی صفحات را به Swap منتقل می‌کند و کش‌های Inode و Dentry چه مدت گرم بمانند. پس از تنظیم این مقادیر، مصرف RSS و Swap را با ابزارهایی که در مقاله «استفاده از Top، Netstat، Du و ابزارهای دیگر برای مانیتورینگ منابع سرور» توضیح داده شده‌اند، زیر نظر بگیرید.

تنظیم vm.swappiness برای بارهای کاری سرور

cat /proc/sys/vm/swappiness

خروجی:

60
sudo sysctl vm.swappiness=10

خروجی:

vm.swappiness = 10
مقداررفتارمورد استفاده
0فقط زیر فشار سنگین Swap می‌کندبارهای کاری بسیار حساس به تأخیر
1تمایل نزدیک به صفر به SwapMySQL، PostgreSQL
10ترجیح پایین Swapسرورهای عمومی اوبونتو، هاست‌های VPS، سرورهای مجازی پارمین کلود
60پیش‌فرض کرنلترکیب‌های متمایل به دسکتاپ
100Swap تهاجمیبه‌ندرت برای سرورها مناسب است

تنظیم vm.vfs_cache_pressure

cat /proc/sys/vm/vfs_cache_pressure

خروجی:

100
sudo sysctl vm.vfs_cache_pressure=50

خروجی:

vm.vfs_cache_pressure = 50

این پارامتر مقیاسِ چگونگی جمع‌کردن (Shrink) کش‌های Inode و Dentry در برابر Page Cache توسط کرنل را تعیین می‌کند؛ کاهش آن باعث می‌شود متادیتای فایل‌سیستم زیر فشار حافظه، مدت طولانی‌تری کش بماند.

ماندگارکردن پارامترهای کرنل

اوبونتو 22.04 و 24.04 استفاده از فایل‌های Drop-in زیر /etc/sysctl.d/ را به‌جای ویرایش پیکربندی‌های یکپارچه (Monolithic) توصیه می‌کند. یکی از رویکردهای زیر را انتخاب کنید. هر دو را اجرا نکنید؛ چون تعاریف تکراری بین فایل‌ها باعث انحراف پیکربندی (Drift) می‌شوند.

رویکرد مدرن (پیشنهادی):

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.conf

رویکرد سازگار با نسخه‌های قدیمی:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf

تنظیمات را بدون ریبوت بارگذاری مجدد کنید:

sudo sysctl --system

خروجی:

* Applying /etc/sysctl.d/99-swap.conf ...
vm.swappiness = 10
vm.vfs_cache_pressure = 50

حذف یا غیرفعال‌کردن فضای Swap

استفاده از فایل Swap را به‌صورت موقت و بدون حذف آن متوقف کنید:

sudo swapoff /swapfile
sudo swapon --show

وقتی هیچ دستگاه Swapای فعال نباشد، دستور sudo swapon --show چیزی چاپ نکرده و به خط فرمان برمی‌گردد. نتیجه خالی، غیرفعال بودن Swap را تأیید می‌کند.

غیرفعال‌کردن Swap در حالی که اپلیکیشن‌ها زیر فشار حافظه هستند می‌تواند به Kill شدن OOM منجر شود. قبل از اجرای swapoff، حافظه آزاد را با free -h بررسی کنید.

برای حذف دائمی Swap، خط /swapfile را از /etc/fstab حذف کنید، در صورت فعال بودن sudo swapoff /swapfile را اجرا کنید و سپس فایل را حذف کنید:

sudo rm /swapfile
free -h

پس از حذف، تأیید کنید که مقادیر کل Swap به صفر برگشته‌اند.

عیب‌یابی خطاهای رایج Swap

خطاعلتراه‌حل
swapon: /swapfile: Invalid argumentاجرا‌نشده بودن mkswap یا فایل Sparse حاصل از fallocate (رایج روی Btrfs)دستور sudo mkswap /swapfile را اجرا کنید؛ یا روی Btrfs فایل را با dd دوباره بسازید
chmod: cannot access ‘/swapfile’: No such fileشکست بی‌صدای ساخت فایلفضای دیسک را با df -h بررسی کنید و fallocate یا dd را دوباره اجرا کنید
swapon: /swapfile: swapon failed: Operation not permittedباز بودن بیش از حد دسترسی‌هاقبل از mkswap، دستور sudo chmod 600 /swapfile را اجرا کنید
غیرفعال بودن Swap بعد از ریبوتنبودن یا معیوب بودن خط /etc/fstabدستور sudo findmnt --verify --verbose را اجرا کنید و از وجود خط /swapfile none swap sw 0 0 مطمئن شوید
شکست fallocate روی BtrfsBtrfs نمی‌تواند از طریق fallocate به‌صورت امن Swap تأمین کندفایل ناقص را با sudo rm /swapfile حذف و سپس با dd دوباره بسازید

خطای Swapon Failed: Invalid Argument

اگر مرحله مقداردهی اولیه را رد کرده‌اید، sudo mkswap /swapfile را اجرا کنید. اگر خطا ادامه داشت، بررسی کنید که آیا فایل‌سیستم روت، Btrfs یا یک فایل‌سیستم CoW دیگر است:

findmnt -no FSTYPE /

اگر نتیجه btrfs بود، فایل معیوب را حذف و با dd دوباره بسازید؛ سپس chmod، mkswap و swapon را تکرار کنید:

sudo swapoff /swapfile
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

فعال‌نشدن Swap بعد از ریبوت

تأیید کنید که خط fstab دقیقاً مطابقت دارد:

grep swapfile /etc/fstab

خروجی:

/swapfile none swap sw 0 0

دستور sudo findmnt --verify --verbose را اجرا کرده و قبل از ریبوت مجدد، مشکلات گزارش‌شده را رفع کنید.

اگر ورودی fstab درست است اما فایل دیگر روی دیسک وجود ندارد، آن را با دنبال‌کردن مرحله ۲ دوباره بسازید؛ سپس chmod 600، mkswap و swapon را دوباره اجرا کنید. این موضوع اغلب بعد از تغییر اندازه‌ای رخ می‌دهد که در آن /swapfile حذف شده اما fstab به مسیر جدید به‌روزرسانی نشده است. قبل از ریبوت، وجود فایل را با ls -lh /swapfile تأیید کنید.

خطای Permission Denied هنگام ساخت فایل Swap

مطمئن شوید از sudo همراه با fallocate یا dd استفاده کرده‌اید. اگر ساخت فایل موفق بود اما swapon خطای دسترسی گزارش کرد، مالکیت و Mode را ریست کنید:

sudo chown root:root /swapfile
sudo chmod 600 /swapfile

سوآپ روی Btrfs: شکست fallocate

برای تخصیص فایل Swap از dd استفاده کنید. اگر فایل Swap روی یک Subvolume با قابلیت Copy-on-Write فعال قرار دارد، قبل از نوشتن داده داخل فایلِ خالی، CoW را روی آن غیرفعال کنید. اگر فایل Swap شما روی ext4 یا XFS است، مراحل truncate و chattr +C را رد کنید.

sudo truncate -s 0 /swapfile
sudo chattr +C /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

سپس مثل قبل با chmod، mkswap، swapon و fstab ادامه دهید.

سوالات متداول

۱. اندازه پیشنهادی Swap برای سرورهای اوبونتو چقدر است؟

وقتی رم ۲ گیگابایت یا کمتر است، تقریباً دو برابر رم در نظر بگیرید. برای رم ۲ تا ۸ گیگابایتی، ۲ تا ۴ گیگابایت Swap تخصیص دهید. بین ۸ و ۱۶ گیگابایت رم، حدود ۴ گیگابایت Swap برای بسیاری از بارهای کاری مناسب است. بالاتر از ۱۶ گیگابایت رم، ۲ تا ۴ گیگابایت Swap معمول است؛ مگر اینکه Hibernation بخواهید.

۲. تفاوت پارتیشن Swap و فایل Swap در اوبونتو چیست؟

پارتیشن Swap یک برش اختصاصی از دیسک است که به‌عنوان Swap فرمت شده. فایل Swap یک فایل معمولی روی فایل‌سیستم شماست که کرنل با آن مثل Swap رفتار می‌کند. فایل‌های Swap منعطف‌اند و با پیش‌فرض‌های مدرن اوبونتو هم‌راستا هستند؛ چون از پارتیشن‌بندی مجدد هنگام تغییر اندازه اجتناب می‌کنند.

۳. چرا fallocate هنگام ساخت فایل Swap روی Btrfs شکست می‌خورد؟

Btrfs هنگام fallocate کردن یک فایل Swap تضمین نمی‌کند که Extentها کاملاً تخصیص یافته باشند؛ پس ممکن است swapon فایل را رد کند. نوشتن با dd از /dev/zero هر بلوک را پر کرده و بررسی‌های کرنل را ارضا می‌کند.

۴. چطور مصرف فعلی Swap را در اوبونتو بررسی کنم؟

برای جزئیات سطح دستگاه، sudo swapon --show و برای مجموع کل، free -h را اجرا کنید. هر دو دستور فقط پس از موفقیت swapon، سوآپ فعال را نشان می‌دهند.

۵. چه مقداری را برای vm.swappiness روی یک سرور اوبونتو تنظیم کنم؟

عدد ۱۰ نقطه شروع عملی برای بارهای کاری سرورهای مجازی پارمین کلود است که رم را به Paging ترجیح می‌دهند. پایگاه‌های داده‌ای که روی خواندن از Swap متوقف می‌شوند، اغلب از ۱ استفاده می‌کنند. مقدار ۶۰ را فقط وقتی نگه دارید که ترکیب شبیه دسکتاپ، Paging بیشتری را توجیه کند.

۶. چطور Swap را بعد از ریبوت در اوبونتو ماندگار کنم؟

خط /swapfile none swap sw 0 0 را به /etc/fstab اضافه کنید، با sudo findmnt --verify اعتبارسنجی کنید و سپس در فرصت مناسب ریبوت کنید. بدون آن خط، اوبونتو فایل Swap را به‌طور خودکار فعال نمی‌کند.

۷. آیا می‌توانم بعد از نصب اولیه، روی اوبونتو فضای Swap اضافه کنم؟

بله. فایل Swap را بسازید، دسترسی‌ها را قفل کنید، mkswap را اجرا کنید، با swapon فعالش کنید و از طریق /etc/fstab ماندگارش کنید. هیچ نصب مجددی لازم نیست.

۸. چطور فضای Swap موجود را در اوبونتو افزایش دهم؟

برای تغییر اندازه یک فایل Swap موجود از ۲ به ۴ گیگابایت روی ext4، سوآپ فعال را غیرفعال کنید، فایل را جایگزین کنید و دوباره فعال کنید. تا زمانی که مسیر تغییر نکرده باشد، ورودی fstab همان‌طور باقی می‌ماند.

sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

اندازه جدید را با sudo swapon --show تأیید کنید:

sudo swapon --show

خروجی:

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

اگر سیستم زیر فشار حافظه است، قبل از swapoff دستور free -h را اجرا کنید تا مطمئن شوید رم کافی در دسترس است. غیرفعال‌کردن یک سوآپ ۲ گیگابایتی که در حال حاضر ۱.۵ گیگابایت از آن استفاده شده، آن صفحات را مجبور به بازگشت به رم می‌کند و ممکن است روی یک سرور کم‌منابع، باعث Kill شدن OOM شود.

جمع‌بندی

این مقاله توضیح داد که چطور روی اوبونتو 22.04 و 24.04 با استفاده از یک فایل Swap، سوآپ اضافه کنید: بررسی حافظه موجود و فضای آزاد دیسک، انتخاب بین fallocate و dd، قفل‌کردن دسترسی‌ها، مقداردهی اولیه Swap با mkswap، فعال‌سازی آن با swapon و ماندگارکردن پیکربندی از طریق /etc/fstab با اعتبارسنجی findmnt. همچنین تنظیم vm.swappiness و vm.vfs_cache_pressure از طریق /etc/sysctl.d/99-swap.conf، غیرفعال‌کردن امن Swap و عیب‌یابی خطاهای معمول swapon و fstab پوشش داده شد.

اکنون می‌توانید هنگام تعیین اندازه یک سرور مجازی جدید پارمین کلود، سوآپ فراهم کنید؛ ظرفیت Paging سرور موجودی که مصرف رم آن جهش دارد را گسترش دهید و وقتی مشکلات دسترسی یا رفتارهای خاص فایل‌سیستم مانع فعال‌سازی می‌شوند، سریع بازیابی کنید. با Swap مثل یک بافر رفتار کنید؛ درحالی‌که اپلیکیشن‌های خود را بهینه‌سازی اندازه می‌کنید یا ارتقای سخت‌افزار را برنامه‌ریزی می‌کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا