BOOTUP(7)

الاسم
الإقلاع - عملية إقلاع النظام

الوصف

يشارك عدد من المكونات المختلفة في إقلاع نظام لينكس. فورًا بعد التشغيل، يقوم البرنامج الثابت للنظام بتهيئة أولية دنيا للعتاد، ويسلم التحكم إلى محمل إقلاع (مثل systemd-boot(7) أو GRUB[1]) المخزن على جهاز تخزين دائم. يستدعي محمل الإقلاع هذا بعد ذلك نواة نظام التشغيل من القرص (أو الشبكة). على الأنظمة التي تستخدم EFI أو أنواع أخرى من البرامج الثابتة، قد يُحمّل البرنامج الثابت النواة مباشرة أيضًا.

تصل النواة (اختياريًا) نظام ملفات في الذاكرة، يبحث عن نظام الملفات الجذر. حاليًا يُنفذ هذا كـ "initramfs" — وهو أرشيف CPIO مضغوط تستخرجه النواة إلى tmpfs. في الماضي، استُخدمت أنظمة ملفات عادية تستخدم جهاز كتلي في الذاكرة (ramdisk)، ولا يزال الاسم "initrd" يُستخدم لوصف كلا المفهومين. محمل الإقلاع أو البرنامج الثابت هو من يُحمّل صور النواة و initrd/initramfs إلى الذاكرة، لكن النواة هي من تفسرها كنظام ملفات. يمكن استخدام systemd(1) لإدارة الخدمات في initrd، بشكل مشابه للنظام الحقيقي.

بعد العثور على نظام الملفات الجذر ووصله، يسلم initrd التحكم إلى مدير نظام المضيف (مثل systemd(1)) المخزن في نظام الملفات الجذر، والذي يصبح مسؤولاً بعد ذلك عن استكشاف جميع العتاد المتبقي، ووصل جميع أنظمة الملفات الضرورية، وإطلاق جميع الخدمات المهيأة.

عند الإيقاف، يوقف مدير النظام جميع الخدمات، ويفصل جميع أنظمة الملفات غير المشغولة (فصل تقنيات التخزين الداعمة لها)، ثم (اختياريًا) يقفز إلى exitrd. يُدعم exitrd بواسطة tmpfs ويقوم بفصل أنظمة الملفات المتبقية، بما في ذلك الجذر الحقيقي. كخطوة أخيرة، يُغلق تشغيل النظام.

يمكن العثور على معلومات إضافية حول عملية إقلاع النظام في boot(7).

إقلاع مدير النظام

عند الإقلاع، يكون مدير النظام على صورة نظام التشغيل مسؤولاً عن تهيئة أنظمة الملفات والخدمات وبرامج التشغيل الضرورية لتشغيل النظام. على أنظمة systemd(1)، تنقسم هذه العملية إلى خطوات منفصلة متعددة تُعرض كوحدات هدف. (انظر systemd.target(5) للحصول على معلومات مفصلة حول وحدات الهدف.) عملية الإقلاع متوازية بشكل كبير بحيث أن الترتيب الذي يتم به الوصول إلى وحدات الهدف المحددة ليس حتميًا، لكنه لا يزال يلتزم بقدر محدود من هيكلية الترتيب.

عندما يبدأ systemd النظام، سينشط جميع الوحدات التي هي تبعيات لـ default.target (بالإضافة إلى جميع تبعيات هذه التبعيات بشكل متكرر). عادةً، يكون default.target مجرد اسم مستعار لـ graphical.target أو multi-user.target، اعتمادًا على ما إذا كان النظام قد ضُبط لواجهة مستخدم رسومية أم لوحدة تحكم نصية فقط. لفرض ترتيب أدنى بين الوحدات المسحوبة، تتوفر عدد من وحدات الهدف المعروفة، كما هو مدرج في systemd.special(7).

المخطط التالي هو نظرة عامة هيكلية لهذه الوحدات المعروفة وموقعها في منطق الإقلاع. تصف الأسهم الوحدات التي تُسحب وتُرتب قبل أي وحدات أخرى. تُبدأ الوحدات القريبة من الأعلى قبل الوحدات الأقرب إلى أسفل المخطط.

                                 cryptsetup-pre.target veritysetup-pre.target
                                                      |
    (various low-level                                v
     API VFS mounts:             (various cryptsetup/veritysetup devices...)
     mqueue, configfs,                                |    |
     debugfs, ...)                                    v    |
     |                                  cryptsetup.target  |
     |  (various swap                                 |    |    remote-fs-pre.target
     |   devices...)                                  |    |     |        |
     |    |                                           |    |     |        v
     |    v                       local-fs-pre.target |    |     |  (network file systems)
     |  swap.target                       |           |    v     v                 |
     |    |                               v           |  remote-cryptsetup.target  |
     |    |  (various low-level  (various mounts and  |  remote-veritysetup.target |
     |    |   services: udevd,    fsck services...)   |             |              |
     |    |   tmpfiles, random            |           |             |    remote-fs.target
     |    |   seed, sysctl, ...)          v           |             |              |
     |    |      |                 local-fs.target    |             | _____________/
     |    |      |                        |           |             |/
     \____|______|_______________   ______|___________/             |
                                 \ /                                |
                                  v                                 |
                           sysinit.target                           |
                                  |                                 |
           ______________________/|\_____________________           |
          /              |        |      |               \          |
          |              |        |      |               |          |
          v              v        |      v               |          |
     (various       (various      |  (various            |          |
      timers...)      paths...)   |   sockets...)        |          |
          |              |        |      |               |          |
          v              v        |      v               |          |
    timers.target  paths.target   |  sockets.target      |          |
          |              |        |      |               v          |
          v              \_______ | _____/         rescue.service   |
                                 \|/                     |          |
                                  v                      v          |
                              basic.target         rescue.target    |
                                  |                                 |
                          ________v____________________             |
                         /              |              \            |
                         |              |              |            |
                         v              v              v            |
                     display-    (various system   (various system  |
                 manager.service     services        services)      |
                         |         required for        |            |
                         |        graphical UIs)       v            v
                         |              |            multi-user.target
    emergency.service    |              |              |
            |            \_____________ | _____________/
            v                          \|/
    emergency.target                    v
                                  graphical.target

وحدات الهدف التي تُستخدم بشكل شائع كأهداف إقلاع هي مظللة. هذه الوحدات هي خيارات جيدة كأهداف غاية، على سبيل المثال بتمريرها إلى خيار سطر أوامر النواة systemd.unit= (انظر systemd(1)) أو بإنشاء رابط رمزي لـ default.target إليها.

يُسحب timers.target بواسطة basic.target بشكل غير متزامن. يسمح هذا لوحدات المؤقتات بالاعتماد على خدمات تصبح متاحة فقط لاحقًا في الإقلاع.

بدء تشغيل مدير المستخدم

يبدأ مدير النظام وحدة user@uid.service لكل مستخدم، والتي تطلق نسخة منفصلة غير مميزة من systemd لكل مستخدم — مدير المستخدم. بشكل مشابه لمدير النظام، يبدأ مدير المستخدم الوحدات التي تُسحب بواسطة default.target. المخطط التالي هو نظرة عامة هيكلية لوحدات المستخدم المعروفة. للجلسات غير الرسومية، يُستخدم default.target. عندما يقوم المستخدم بتسجيل الدخول إلى جلسة رسومية، سيبدأ مدير تسجيل الدخول الهدف graphical-session.target المستخدم لسحب الوحدات المطلوبة للجلسة الرسومية. تُبدأ عدد من الأهداف (الموضحة على الجانب الأيمن) عندما يكون عتاد محدد متاحًا للمستخدم.

       (various           (various         (various
        timers...)         paths...)        sockets...)    (sound devices)
            |                  |                 |               |
            v                  v                 v               v
      timers.target      paths.target     sockets.target    sound.target
            |                  |                 |
            \______________   _|_________________/         (bluetooth devices)
                           \ /                                   |
                            V                                    v
                      basic.target                          bluetooth.target
                            |
                 __________/ \_______                      (smartcard devices)
                /                    \                           |
                |                    |                           v
                |                    v                      smartcard.target
                v            graphical-session-pre.target
    (various user services)          |                       (printers)
                |                    v                           |
                |       (services for the graphical session)     v
                |                    |                       printer.target
                v                    v
         default.target      graphical-session.target

الإقلاع في INITRD

يمكن استخدام Systemd في initrd أيضًا. يكتشف بيئة initrd عن طريق التحقق من ملف /etc/initrd-release. الهدف المبدئي في initrd هو initrd.target. عملية الإقلاع مطابقة لإقلاع مدير النظام حتى الوصول للهدف basic.target. بعد ذلك، ينفذ systemd الهدف الخاص initrd.target. قبل وصل أي أنظمة ملفات، سيحدد المدير ما إذا كان النظام سيستأنف من السبات أو يستمر في الإقلاع العادي. يُنجز هذا بواسطة systemd-hibernate-resume.service الذي يجب أن ينتهي قبل local-fs-pre.target، لذا لا يمكن وصل أي أنظمة ملفات قبل اكتمال التحقق. عندما يصبح جهاز الجذر متاحًا، يتم الوصول إلى initrd-root-device.target. إذا أمكن وصل جهاز الجذر في /sysroot، تنشط وحدة sysroot.mount ويتم الوصول إلى initrd-root-fs.target. تمسح الخدمة initrd-parse-etc.service ملف /sysroot/etc/fstab بحثًا عن نقطة وصل /usr/ محتملة وإدخالات إضافية مأشورة بخيار x-initrd.mount. تُوصل جميع الإدخالات الموجودة تحت /sysroot، ويتم الوصول إلى initrd-fs.target. تعزل الخدمة initrd-cleanup.service إلى initrd-switch-root.target، حيث يمكن لخدمات التنظيف أن تعمل. كخطوة أخيرة تمامًا، تُنشط initrd-switch-root.service، مما سيؤدي إلى تبديل جذر النظام إلى /sysroot.

                                   : (beginning identical to above)
                                   :
                                   v
                             basic.target
                                   |                       emergency.service
            ______________________/|                               |
           /                       |                               v
           |            initrd-root-device.target          emergency.target
           |                       |
           |                       v
           |                  sysroot.mount
           |                       |
           |                       v
           |             initrd-root-fs.target
           |                       |
           |                       v
           v            initrd-parse-etc.service
    (custom initrd                 |
     services...)                  v
           |            (sysroot-usr.mount and
           |             various mounts marked
           |               with fstab option
           |              x-initrd.mount...)
           |                       |
           |                       v
           |                initrd-fs.target
           \______________________ |
                                  \|
                                   v
                              initrd.target
                                   |
                                   v
                         initrd-cleanup.service
                              isolates to
                        initrd-switch-root.target
                                   |
                                   v
            ______________________/|
           /                       v
           |        initrd-udevadm-cleanup-db.service
           v                       |
    (custom initrd                 |
     services...)                  |
           \______________________ |
                                  \|
                                   v
                       initrd-switch-root.target
                                   |
                                   v
                       initrd-switch-root.service
                                   |
                                   v
                         Transition to Host OS

إيقاف تشغيل مدير النظام

يتكون إيقاف تشغيل النظام باستخدام systemd أيضًا من وحدات هدف مختلفة مع تطبيق بعض هيكلية الترتيب الدنيا:

                           (conflicts with  (conflicts with
                              all system     all file system
                               services)     mounts, swaps,
                                   |           cryptsetup/
                                   |           veritysetup
                                   |          devices, ...)
                                   |                |
                                   v                v
                            shutdown.target    umount.target
                                   |                |
                                   \_______   ______/
                                           \ /
                                            v
                                   (various low-level
                                        services)
                                            |
                                            v
                                      final.target
                                            |
                ___________________________/ \_________________________________
               /               |               |               |               \
               |               |               |               |               |
               v               |               |               |               |
    systemd-reboot.service     |               |               |               |
               |               v               |               |               |
               |    systemd-poweroff.service   |               |               |
               v               |               v               |               |
         reboot.target         |      systemd-halt.service     |               |
                               v               |               v               |
                       poweroff.target         |    systemd-kexec.service      |
                                               v               |               |
                                          halt.target          |  systemd-soft-reboot.service
                                                               v               |
                                                         kexec.target          |
                                                                               v
                                                                       soft-reboot.target

أهداف إيقاف تشغيل النظام شائعة الاستخدام هي مظللة.

لاحظ أن systemd-halt.service(8) و systemd-reboot.service و systemd-poweroff.service و systemd-kexec.service ستنقل النظام ومدير الخادم (PID 1) إلى المرحلة الثانية من إيقاف تشغيل النظام (المنفذة في ثنائي systemd-shutdown)، والتي ستفصل أي أنظمة ملفات متبقية، وتقتل أي عمليات متبقية، وتحرر أي موارد أخرى متبقية، بطريقة بسيطة وقوية، دون مراعاة أي مفهوم خدمة أو وحدة بعد الآن. في تلك النقطة، تكون التطبيقات والموارد العادية قد أُنهيت وحُررت بالفعل، لذا تعمل المرحلة الثانية فقط كشبكة أمان لكل ما لم يمكن إيقافه أو تحريره لسبب ما خلال مرحلة الإيقاف الرئيسة القائمة على الوحدات الموصوفة أعلاه.

الـ EXITRD

إن "exitrd" هو مفهوم متماثل مع initrd. عندما يقوم مدير النظام بإيقاف التشغيل وكان /run/initramfs/shutdown موجودًا، فإنه سيبدل الجذر إلى /run/initramfs/ وينفذ /shutdown. يعمل هذا البرنامج من tmpfs الموصول على /run/، لذا يمكنه فصل نظام ملفات الجذر القديم وتنفيذ خطوات إضافية، على سبيل المثال تفكيك تخزين معقد أو تنفيذ تسجيل إضافي حول الإيقاف.

انظر أيضًا

systemd(1), boot(7), systemd.special(7), systemd.target(5), systemd-halt.service(8), systemd-soft-reboot.service(8)

ملاحظات

1.  GRUB
    https://www.gnu.org/software/grub/

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.