detect hot-plugged CPU and RAM in VM

اضافه‌کردن CPU یا RAM یا هارد به سیستم بدون نیاز به ریبوت در لینوکس

اردیبهشت 17, 1404لینوکس

فعال‌سازی (یا اضافه‌کردن) CPU یا RAM یا هارد به سیستم بدون نیاز به ریبوت در لینوکس

خلاصه این مطلب این است که معمولا سرورهای محیط عملیاتی بر روی بستر vmware هستند و گاها پیش می آید که نیاز به افزایش منابع بطور مثال رم یا cpu یا هارد سرور داریم و بخش مجازی سازی اینکار را انجام میدهد و ما باید بدون ریبوت کردن سیستم عامل سرور که لینوکسی هست کاری کنیم که سیستم عامل این تغییرات را بشناسد. در این مقاله ما افزایش منابع در هر یک از سه شرایط ذکر شده را توضیح میدهیم که با استفاده از این راهکارها دیگر نیاز به ریبوت سرور جهت تشخیص افزایش منابع نیست.

نکته مهم : فقط نکته مهم این است که گزینه  hot-plugged بر روی ماشین مجازی توسط زیرساخت مجازی سازی شرکت فعال باشد و این گزینه تیک خورده باشد.

افزودن حافظه به‌صورت داغ (Hot Adding Memory) در لینوکس

مجازی‌سازی زندگی ما را آسان‌تر کرده است. اکنون می‌توانیم منابع جدیدی را برای برنامه‌ها راه‌اندازی کنیم، فضای دیسک بیشتری را به‌صورت پویا اضافه کنیم، ماشین‌ها را مهاجرت دهیم و غیره. در vSphere، می‌توانیم بدون نیاز به خاموش کردن ماشین مجازی (در صورتی که این قابلیت قبل از روشن شدن فعال شده باشد)، حافظه و vCPU بیشتری به‌صورت داینامیک اضافه کنیم.

در اوبونتو 12.04، من دو ماشین مجازی تولید (production) داشتم که نیاز به افزایش منابع داشتند، اما امکان هیچ‌گونه قطعی زمانی وجود نداشت (البته که نه!). به‌عنوان یک مدیر سیستم خوب، ابتدا یک ماشین مجازی آزمایشی راه‌اندازی کردم تا مطمئن شوم هیچ قطعی و مشکلی در لحظه آخر وجود ندارد. به‌طور شگفت‌انگیزی، توانستم منابع بیشتری را به‌صورت داینامیک اضافه کنم و vSphere نیز آن را شناسایی کرد، اما سیستم‌عامل این تغییر را تشخیص نداد.

با جستجو به این صفحه انجمن اوبونتو رسیدم و پاسخ مورد نیازم را پیدا کردم:

خلاصه: باید منابع جدید را «روشن» کنید. با تغییر برخی صفرها به عدد یک، آن‌ها را آنلاین می‌کنید. پس از افزودن منابع بیشتر، این اسکریپت را به ماشین مهمان کپی کرده و اجرا کنید.

من ابتدا ماشین آزمایشی خود را با ۴ گیگابایت رم ایجاد کردم و سپس ۸ گیگابایت دیگر به‌صورت داینامیک اضافه کردم (در مجموع ۱۲ گیگابایت). مثل ساعت کار کرد!


قابلیت افزودن داغ حافظه و اتصال داغ CPU در VMware vSphere

قابلیت‌های Hot-add Memory و Hot-plug CPU در VMware vSphere به شما این امکان را می‌دهند که در حالی که ماشین مجازی روشن است، حافظه و CPU جدیدی اضافه کنید. این قابلیت به شما اجازه می‌دهد هر زمان که لازم بود منابع بیشتری اضافه کنید بدون اینکه نیاز به خاموش کردن ماشین باشد. البته توجه داشته باشید که پس از افزودن منابع در زمان اجرای ماشین، امکان حذف آن‌ها وجود ندارد.

این قابلیت‌ها روی نسخه‌های خاصی از سیستم‌عامل‌های ویندوز سرور (مثل Windows Server 2008) کار می‌کنند. من شخصاً این قابلیت‌ها را روی Red Hat Enterprise Linux 6.3 آزمایش کرده‌ام و کاملاً بدون مشکل کار کردند. این قابلیت‌ها به‌شدت به هسته سیستم‌عامل مهمان وابسته هستند و بیشتر سیستم‌عامل‌های شبه‌یونیکس می‌توانند به سرعت تغییرات سخت‌افزاری را تشخیص داده و شروع به استفاده از آن‌ها کنند.

📌 نکته: سیستم‌عامل‌های سازمانی مانند Oracle Solaris، IBM AIX و HP-UX بیش از یک دهه است که با کمک سخت‌افزارهای مبتنی بر معماری RISC اختصاصی خود از این قابلیت‌ها پشتیبانی می‌کنند.

در این مقاله خواهیم دید که چگونه می‌توان CPU به‌صورت hot-plug و RAM به‌صورت hot-add را روی یک ماشین مجازی موجود فعال کرد.

در ادامه، اسکریپتی را مشاهده می‌کنید که برای فعال‌سازی حافظه (RAM) افزوده‌شده به‌صورت داغ (hot-add) در ماشین‌های لینوکسی (مانند اوبونتو یا Red Hat) استفاده می‌شود. این اسکریپت حافظه‌هایی را که به‌صورت داینامیک اضافه شده‌اند، شناسایی کرده و آن‌ها را “online” می‌کند تا سیستم‌عامل شروع به استفاده از آن‌ها کند:

#!/bin/bash
# Script to online added memory blocks (hot-add RAM)

for mem in /sys/devices/system/memory/memory*/online; do
    if [ "$(cat $mem)" == "0" ]; then
        echo "Bringing online: $mem"
        echo 1 > "$mem"
    fi
done

🔧 نحوه استفاده:

این اسکریپت را با یک ویرایشگر متن مانند nano یا vim در ماشین مهمان ذخیره کنید، مثلاً با نام online_memory.sh:

nano online_memory.sh

کد بالا را در آن قرار دهید، ذخیره کرده و خارج شوید.

اجازه اجرا به فایل بدهید:

chmod +x online_memory.sh

اسکریپت را اجرا کنید:

sudo ./online_memory.sh

✅ بعد از اجرای اسکریپت، حافظه‌های جدید باید توسط سیستم‌عامل شناسایی و قابل استفاده باشند. برای بررسی، می‌توانید از دستور زیر استفاده کنید:

free -h

یا:

cat /proc/meminfo

حال می خواهیم نسخه مشابهی برای hot-plug کردن CPU  ارائه کنم.

در لینوکس، hot-plug کردن CPU به معنای فعال‌سازی (یا اضافه‌کردن) یک CPU به سیستم بدون نیاز به ریبوت است. این قابلیت معمولاً در سیستم‌های SMP (Symmetric Multiprocessing) و سخت‌افزارهایی مانند سرورها یا ماشین‌های مجازی وجود دارد که امکان اضافه یا حذف CPU در حین اجرا را دارند.

پیش‌نیازها

  1. کرنل لینوکس با پشتیبانی از CPU hotplug (اکثر کرنل‌های مدرن پشتیبانی دارند).

  2. سخت‌افزاری که واقعاً از hotplug CPU پشتیبانی کند.

  3. کاربر دارای دسترسی root یا sudo.

مشاهده CPUهای سیستم

برای بررسی وضعیت CPUها:

lscpu

یا :

cat /proc/cpuinfo

برای دیدن وضعیت آنلاین یا آفلاین CPUها:

for i in /sys/devices/system/cpu/cpu*/online; do echo "$i: $(cat $i)"; done

فعال‌سازی (hot-plug) یک CPU

در لینوکس، CPUهایی که قابل hotplug هستند معمولاً فایل /sys/devices/system/cpu/cpuX/online دارند. اگر مقدار آن 0 باشد، آن CPU آفلاین است. برای فعال‌سازی:

echo 1 | sudo tee /sys/devices/system/cpu/cpuX/online

مثال:

echo 1 | sudo tee /sys/devices/system/cpu/cpu3/online

غیرفعال‌سازی (hot-unplug) یک CPU

echo 0 | sudo tee /sys/devices/system/cpu/cpuX/online

توجه: CPU0 معمولاً قابل hotplug نیست چون هسته‌ی اصلی است.


نکات مهم

  • CPUهای offline در top یا htop نشان داده نمی‌شوند.

  • برای ماشین‌های واقعی، باید BIOS و مادربرد هم از این ویژگی پشتیبانی کنند.

نمونه تصاویر از اجرای دستورات فوق بر روی سرور عملیاتی

فعال‌سازی (hot-plug) یک hard-disk

برای فعال سازی هارد دیسک از دو  روش زیر استفاده می کنیم:

  1. نصب بسته scsitools
  2. rescan هارد جدید

روش اول : (نصب در دبیان و اوبونتو)

apt install scsitools
rescan-scsi-bus.sh -a

روش دوم :

echo 1>/sys/class/block/sdd/device/rescan
OR
echo 1>/sys/class/scsi_device/X:X:X:X/device/block/device/rescan

اسکریپت را می توانید از گیت به آدرس زیر دریافت و استفاده نمایید:

https://gist.github.com/ergosteur/e297b914c3df443610f01afef6b0d544

پست های مرتبط


یک نظر ارسال کنید

ایمیل شما نزد ما امن می ماند