من به این خاطر که خودم را با اخبار توزیع ها و برنامه های لینوکس به روز نگه دارم، در mailing list های متعددی که مربوط به آنها هستند شرکت کردم. باگ های جدید چه مواردی هستند؟ چه Patch هایی منتشر شده است؟ چه مواردی از نسخه های بعدی انتظار می رود؟ و در کل موارد بسیار دیگر. این روزها، ایمیل های متعددی با عنوان "کدام لینوکس بهتر است؟ لینوکس با systemd یا لینوکس با init" پرجمعیت شده است، به خصوص Mailing list در Debian به همراه چندی دیگر.
کدام لینوکس بهتر است؟ لینوکس با systemd یا لینوکس با init
سرویس systemd قرار است جایگزین سرویس init در برخی توزیع های لینوکس شود، حال آنکه بسیاری از توزیع ها در حال حاضر آن را اجرا می کنند. این یک شکاف عظیم بین Unix/Linux Guard و Linux Guard جدید – برای برنامه نویس ها و ادمین های سیستم است.
در این مقاله، ما در مورد تمام پرسش ها، یک به یک بحث کرده و راه حل ارائه خواهیم داد.
init چیست؟
در لینوکس، init یک مخفف برای مقداردهی اولیه است. init یک پروسه سرویس است که به محض استارت کامپیوتر شروع می شود و اجرای آن تا خاموش شدن کامپیوتر ادامه دارد. در حقیقت init اولین پروسه ای است که موقع بوت شدن کامپیوتر آغاز می شود، آن را سرچشمه تمامی دیگر پروسه های در حال اجرای مستقیم و غیر مستقیم می کند و از این رو به طور معمول “pid=1“ به آن اختصاص داده شده است.
اگر به نحوی سرویس init نتوانست شروع شود، هیچ پروسه ای آغاز نمی شود و سیستم به مرحله ای به نام “Kernel Panic“ می رسد. init رایج ترین مرجع برای System V init است. System V اولین سیستم عامل یونیکس تجاری است که طراحی شد و کاربردهای init در بسیاری از توزیع های لینوکس امروزی مشابه سیستم عامل System V است با مورد استثنایی همچون Slackware با استفاده از BSD-style و Gentoo با استفاده از custom init.
لزوم جایگزینی init با چیزی کامل تر، از مدت ها احساس می شد و جایگزین های مختلفی مرحله به مرحله توسعه داده شد، که برخی جایگزین native init توزیع شدند، بعضی از آنها عبارتند از :
Systemd چیست؟
Systemd یک سرویس مدیریت سیستم است که توسط مجمع یونیکس برای افزودن ‘d‘ در پایان سرویس نام گذاری شده است. بنابراین می توانند به راحتی تشخیص داده شوند. در ابتدا تحت لایسنس عمومی همگانی گنو GNU منتشر شد، اما اکنون نسخه ها تحت لایسنس GNU Lesser General Public License ساخته می شوند. شبیه به init، systemd نیز سرچشمه همه پروسه های مستقیم و غیر مستقیم دیگری است که هنگام بوت آغاز می شوند از این رو معمولا “pid=1“ به آن اختصاص داده شده است.
systemd، ممکن است با تمام پکیج ها، سرویس ها و کتابخانه های پیرامون سرویس ارتباط داشته باشد. Systemd برای غلبه بر کاستی های init طراحی شده است. این به خودی خود یک پیش زمینه برای پروسه هایی است که برای شروع فرآیندها به طور موازی، طراحی شده است، در نتیجه زمان بوت و overhead محاسباتی کاهش می یابد. Systemd دارای ویژگی های بسیار دیگری می باشد که قابل مقایسه با init است.
چرا init باید تعویض شود؟
پروسه init به راحتی آغاز می شود، یک task درست بلافاصله بعد از آخرین task ای که با موفقیت در startup است، شروع می شود و در حافظه لود می گردد. این اغلب به تاخیر و طولانی شدن مدت زمان بوت، منجر می شود. با این حال، systemd برای سرعت بخشیدن به انجام کارها به طور منظم طراحی نشده است که از تمام تاخیرهای غیرضروری اجتناب کند.
ویژگی های systemd
تنگناهای systemd
ادغام Systemd و Distro
مناظره
Linus Torvalds، معمار ارشد کرنل لینوکس، به شیوه توسعه دهنده اصلی نسبت به کاربران معتقد است و گزارش های باگ، خوب به نظر نمی رسد. همچنین گزارش شده است که فلسفه systemd، روش عجیب و ناآشنایی برای پروسه سیستم کنترل است. همانطور که از روی Patric Volkerding ثبت شده است و قابل توجه کاربران و توسعه دهندگان لینوکس و همچنین گاهی اوقات فروم های آنلاین، می باشد.
Systemd در مقایسه با init
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
آنچه که شما باید درباره process ها در لینوکس بدانید
راهنمای دستورات Kill, PKill و Killall برای بستن یک پروسس در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
نتیجه گیری
هیچ چیز در حال اجرایی که pid=1 است نباید شکست بخورد، نباید آشفته باشد و می بایست کاربران به طور موثر و کارآمد آن را کنترل کنند. بسیاری از کاربران بر این باورند که استفاده از systemd بجای init چیزی بیش از دوباره کاری چرخه زمان به عنوان تاثیر جانبی لینوکس نیست. اما این ماهیت متنوع لینوکس است. به همین دلیل است که لینوکس بسیار قدرتمند است. تغییر خوب است و اگر به دلیل خوبی انجام می شود باید آن را درک کنیم.
کدام لینوکس بهتر است؟ لینوکس با systemd یا لینوکس با init
سرویس systemd قرار است جایگزین سرویس init در برخی توزیع های لینوکس شود، حال آنکه بسیاری از توزیع ها در حال حاضر آن را اجرا می کنند. این یک شکاف عظیم بین Unix/Linux Guard و Linux Guard جدید – برای برنامه نویس ها و ادمین های سیستم است.
در این مقاله، ما در مورد تمام پرسش ها، یک به یک بحث کرده و راه حل ارائه خواهیم داد.
- init چیست؟
- System چیست؟
- چرا باید init جایگزین شود؟
- کدام ویژگی های systemd مال خود می باشد؟
init چیست؟
در لینوکس، init یک مخفف برای مقداردهی اولیه است. init یک پروسه سرویس است که به محض استارت کامپیوتر شروع می شود و اجرای آن تا خاموش شدن کامپیوتر ادامه دارد. در حقیقت init اولین پروسه ای است که موقع بوت شدن کامپیوتر آغاز می شود، آن را سرچشمه تمامی دیگر پروسه های در حال اجرای مستقیم و غیر مستقیم می کند و از این رو به طور معمول “pid=1“ به آن اختصاص داده شده است.
اگر به نحوی سرویس init نتوانست شروع شود، هیچ پروسه ای آغاز نمی شود و سیستم به مرحله ای به نام “Kernel Panic“ می رسد. init رایج ترین مرجع برای System V init است. System V اولین سیستم عامل یونیکس تجاری است که طراحی شد و کاربردهای init در بسیاری از توزیع های لینوکس امروزی مشابه سیستم عامل System V است با مورد استثنایی همچون Slackware با استفاده از BSD-style و Gentoo با استفاده از custom init.
لزوم جایگزینی init با چیزی کامل تر، از مدت ها احساس می شد و جایگزین های مختلفی مرحله به مرحله توسعه داده شد، که برخی جایگزین native init توزیع شدند، بعضی از آنها عبارتند از :
- Upstart : یک سرویس جایگزین init که در اوبونتو گنو/لینوکس اجرا شد و برای شروع پروسه غیر همزمان طراحی شده است.
- Epoch : یک سرویس جایگزین init که از همه طرف سادگی و مدیریت سرویس ایجاد کرده، این برای شروع پروسه تک نخی طراحی شده است.
- Mudar : یک سرویس جایگزین init که به زبان پایتون نوشته شده است، در پاردوس گنو/لینوکس اجرا شده و برای شروع پروسه های غیر همزمان طراحی شده است.
- Systemd : یک سرویس جایگزین init که برای شروع پروسه های موازی طراحی شده و در تعدادی از توزیع های استاندارد (Fedora, OpenSuSE, Arch, RHEL, CentOS وغیره) اجرا شده است.
Systemd چیست؟
Systemd یک سرویس مدیریت سیستم است که توسط مجمع یونیکس برای افزودن ‘d‘ در پایان سرویس نام گذاری شده است. بنابراین می توانند به راحتی تشخیص داده شوند. در ابتدا تحت لایسنس عمومی همگانی گنو GNU منتشر شد، اما اکنون نسخه ها تحت لایسنس GNU Lesser General Public License ساخته می شوند. شبیه به init، systemd نیز سرچشمه همه پروسه های مستقیم و غیر مستقیم دیگری است که هنگام بوت آغاز می شوند از این رو معمولا “pid=1“ به آن اختصاص داده شده است.
systemd، ممکن است با تمام پکیج ها، سرویس ها و کتابخانه های پیرامون سرویس ارتباط داشته باشد. Systemd برای غلبه بر کاستی های init طراحی شده است. این به خودی خود یک پیش زمینه برای پروسه هایی است که برای شروع فرآیندها به طور موازی، طراحی شده است، در نتیجه زمان بوت و overhead محاسباتی کاهش می یابد. Systemd دارای ویژگی های بسیار دیگری می باشد که قابل مقایسه با init است.
چرا init باید تعویض شود؟
پروسه init به راحتی آغاز می شود، یک task درست بلافاصله بعد از آخرین task ای که با موفقیت در startup است، شروع می شود و در حافظه لود می گردد. این اغلب به تاخیر و طولانی شدن مدت زمان بوت، منجر می شود. با این حال، systemd برای سرعت بخشیدن به انجام کارها به طور منظم طراحی نشده است که از تمام تاخیرهای غیرضروری اجتناب کند.
ویژگی های systemd
- شفاف، stateforward و طراحی کارآمد
- پروسه بوت ساده تر
- پردازش همزمان و موازی در هنگام بوت
- API بهتر
- نحو واحد ساده
- قابلیت حذف اجزای اختیاری
- رد پاهای حافظه کم
- تکنیک بهبود یافته برای بیان نیازمندی ها
- آموزش اولیه نوشته شده در فایل کانفیگ و نه در in shell script
- ایجاد امکان استفاده از سوکت دامنه یونیکس
- برنامه ریزی شغلی با استفاده از تایمرهای تقویم systemd
- رویداد لاگین با journald
- انتخاب رویدادهای سیستم لاگین با systemd و همچنین syslog
- لاگ ها در فایل باینری ذخیره می شوند
- حالت systemd می تواند حفظ شود تا در آینده به آن رجوع شود
- پروسه Track با استفاده از cgroup کرنل و نه PID
- لاگین کاربرها توسط systemd-logind
- تلفیق بهتر با Gnome برای
تنگناهای systemd
- همه چیز در یک جا
- نبود استاندارد POSIX
ادغام Systemd و Distro
توزیع لینکس | ادغام |
Fedora | بله، اولین توزیع برای |
Arch | بله |
RedHat | بله |
CentOS | بله |
Debian | بله، Debian 8 با اسم رمز Jessie به طور پیش فرض system را خواهد داشت |
Gentoo | بله، اما لازم است دانلود شود، نصب و کانفیگ side با custom init |
OpenSUSE | بله |
Slack | نه (اگرچه هنوز تا کنون درslackware اتخاذ نشده است، اما چه اتخاذ بشود چه نشود Patric Volkerding هیچ علامتی را نشان نمی دهد) |
Ubuntu | بله، لازم است تا با Upstream نصب و کانفیگ شود. |
Linus Torvalds، معمار ارشد کرنل لینوکس، به شیوه توسعه دهنده اصلی نسبت به کاربران معتقد است و گزارش های باگ، خوب به نظر نمی رسد. همچنین گزارش شده است که فلسفه systemd، روش عجیب و ناآشنایی برای پروسه سیستم کنترل است. همانطور که از روی Patric Volkerding ثبت شده است و قابل توجه کاربران و توسعه دهندگان لینوکس و همچنین گاهی اوقات فروم های آنلاین، می باشد.
Systemd در مقایسه با init
systemd | init | Features |
Yes | No | DBus Dependency – Mandatory |
Yes | No | Device based Activation |
Yes | No | Device dependency configuration with udev |
Proprietary | Cron/at | Timer based Activation |
Yes | No | Quota Management |
Yes | No | Automatic Service Dependency Handling |
Yes | No | Kills users Process at logout |
Yes | No | Swap Management |
Yes | No | SELinux integration |
Yes | No | Support for Encrypted HDD |
Yes | No | Static kernle module loading |
Yes | No | GUI |
Yes | No | List all the child processes |
Yes | Yes | Sysv compatible |
Yes | No | Interactive booting |
No | Yes | Portable to non x86 |
Several Distro | Several Distro | Adopted on |
Yes | No | Parallel service startup |
Yes | No | Resource limit per service |
No | Yes | Easy extensible startup script |
No | Yes | Separate Code and Configuration File |
Yes | No | Automatic dependency calculation |
No | Yes | Verbose debug |
V44+ | N/A | Version |
N/A | 560 KB | Size |
900 files + glib + DBus | 75 files | Number of Files |
224000 (Approx) (inc Codes, comments and white space) 125000 (Approx) (acctual code) | 15000 (Approx) | Lines of code – LOC |
آنچه که شما باید درباره process ها در لینوکس بدانید
راهنمای دستورات Kill, PKill و Killall برای بستن یک پروسس در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
نتیجه گیری
هیچ چیز در حال اجرایی که pid=1 است نباید شکست بخورد، نباید آشفته باشد و می بایست کاربران به طور موثر و کارآمد آن را کنترل کنند. بسیاری از کاربران بر این باورند که استفاده از systemd بجای init چیزی بیش از دوباره کاری چرخه زمان به عنوان تاثیر جانبی لینوکس نیست. اما این ماهیت متنوع لینوکس است. به همین دلیل است که لینوکس بسیار قدرتمند است. تغییر خوب است و اگر به دلیل خوبی انجام می شود باید آن را درک کنیم.
کامنت