initrd(4)

الاسم
initrd - قرص ذاكرة وصول عشوائي (RAM disk) تهيئه محمل الإقلاع

الضبط
إن ‎/dev/initrd هو جهاز كتلي للقراءة فقط، عُيّن له الرقم الرئيسي 1 والرقم الفرعي 250. عادة ما يمتلك root:disk الملف ‎/dev/initrd مع الوضع 0400 (وصول للقراءة من قِبل root فقط). إذا لم يكن نظام لينكس يحتوي على ‎/dev/initrd مسبقًا، فيمكن إنشاؤه عبر الأوامر التالية:

    mknod -m 400 /dev/initrd b 1 250
    chown root:disk /dev/initrd

أيضًا، يجب تصريف دعم كل من "RAM disk" و "Initial RAM disk" (مثلاً، CONFIG_BLK_DEV_RAM=y و CONFIG_BLK_DEV_INITRD=y) مباشرة داخل نواة لينكس لاستخدام ‎/dev/initrd. عند استخدام ‎/dev/initrd، لا يمكن تحميل تعريف RAM disk كملحق.

الوصف
الملف الخاص ‎/dev/initrd هو جهاز كتلي للقراءة فقط. هذا الجهاز هو RAM disk تُهيأ (أي تُحمّل) بواسطة محمل الإقلاع قبل بدء تشغيل النواة. يمكن للنواة بعد ذلك استخدام محتويات ‎/dev/initrd لإقلاع النظام على مرحلتين.

في مرحلة الإقلاع الأولى، تبدأ النواة وتوصل نظام ملفات جذر مبدئي من محتويات ‎/dev/initrd (مثلاً، RAM disk التي هيأها محمل الإقلاع). وفي المرحلة الثانية، تُحمّل تعريفات إضافية أو وحدات أخرى من محتويات جهاز الجذر المبدئي. بعد تحميل الوحدات الإضافية، وُصل نظام ملفات جذر جديد (أي نظام ملفات الجذر العادي) من جهاز مختلف.

  عملية الإقلاع
عند الإقلاع باستخدام initrd، يقلع النظام كالتالي:

(1) يحمل محمل الإقلاع برنامج النواة ومحتويات ‎/dev/initrd إلى الذاكرة.

(2) عند بدء تشغيل النواة، تفك النواة ضغط محتويات الجهاز ‎/dev/initrd وتنسخها إلى الجهاز ‎/dev/ram0 ثم تُحرر الذاكرة التي استخدمها ‎/dev/initrd.

(3) توصل النواة بعد ذلك الجهاز ‎/dev/ram0 للقراءة والكتابة كنظام ملفات جذر مبدئي.

(4) إذا كان نظام ملفات الجذر العادي المحدد هو نفسه نظام ملفات الجذر المبدئي (مثلاً ‎/dev/ram0)، فإن النواة تنتقل إلى الخطوة الأخيرة لتسلسل الإقلاع المعتاد.

(5) إذا كان الملف التنفيذي ‎/linuxrc موجودًا في نظام ملفات الجذر المبدئي، فإنه يُنفذ بهوية المستخدم (UID) رقم 0. (يجب أن يمتلك الملف ‎/linuxrc صلاحية التنفيذ. يمكن أن يكون ‎/linuxrc أي ملف تنفيذي صالح، بما في ذلك سكربت صدفة).

(6) إذا لم يُنفذ ‎/linuxrc أو عند انتهائه، يوصل نظام ملفات الجذر العادي. (إذا خرج ‎/linuxrc مع وجود أنظمة ملفات موصولة على نظام ملفات الجذر المبدئي، فإن سلوك النواة يكون غير محدد. انظر قسم ملاحظات لمعرفة سلوك النواة الحالي).

(7) إذا كان نظام ملفات الجذر العادي يحتوي على الدليل ‎/initrd، يُنقل الجهاز ‎/dev/ram0 من / إلى ‎/initrd. بخلاف ذلك، إذا لم يوجد الدليل ‎/initrd، يُفصل الجهاز ‎/dev/ram0. (عند النقل من / إلى ‎/initrd، لا يُفصل ‎/dev/ram0 وبالتالي يمكن للعمليات أن تظل قيد التشغيل من ‎/dev/ram0. إذا لم يوجد الدليل ‎/initrd في نظام ملفات الجذر العادي وبقيت أي عمليات تعمل من ‎/dev/ram0 عند خروج ‎/linuxrc، فإن سلوك النواة يكون غير محدد. انظر قسم ملاحظات لمعرفة سلوك النواة الحالي).

(8) يُنفذ تسلسل الإقلاع المعتاد (مثلاً استدعاء ‎/sbin/init) على نظام ملفات الجذر العادي.

  الخيارات
خيارات محمل الإقلاع التالية، عند استخدامها مع initrd، تؤثر على عملية إقلاع النواة:

initrd=اسم_الملف
    يحدد الملف المراد تحميله كمحتويات لـ ‎/dev/initrd. بالنسبة لـ LOADLIN هذا خيار سطر الأوامر. أما بالنسبة لـ LILO فيجب استخدام هذا الأمر في ملف ضبط LILO المسار ‎/etc/lilo.config. اسم الملف المحدد بهذا الخيار سيكون عادةً صورة نظام ملفات مضغوطة بـ gzip.

noinitrd
    يعطل خيار الإقلاع هذا عملية الإقلاع على مرحلتين. تُنفذ النواة تسلسل الإقلاع المعتاد كما لو لم يُهيأ ‎/dev/initrd. مع هذا الخيار، تُحفظ أي محتويات لـ ‎/dev/initrd حُملت إلى الذاكرة بواسطة محمل الإقلاع. يسمح هذا الخيار بأن تكون محتويات ‎/dev/initrd أي بيانات ولا يلزم اقتصارها على صورة نظام ملفات. ومع ذلك، فإن الجهاز ‎/dev/initrd للقراءة فقط ولا يمكن قراءته إلا مرة واحدة بعد بدء تشغيل النظام.

root=اسم_الجهاز
    يحدد الجهاز المراد استخدامه كنظام ملفات الجذر العادي. بالنسبة لـ LOADLIN هذا خيار سطر الأوامر. وبالنسبة لـ LILO هذا خيار وقت الإقلاع أو يمكن استخدامه كسطر خيارات في ملف ضبط LILO المسار ‎/etc/lilo.config. الجهاز المحدد بهذا الخيار يجب أن يكون جهازًا قابلاً للوصل ويحتوي على نظام ملفات جذر مناسب.

  تغيير نظام ملفات الجذر العادي
بشكل مبدئي، تُستخدم إعدادات النواة (مثل التي ضُبطت في ملف النواة باستخدام rdev(8) أو المصرفة داخل ملف النواة)، أو خيار محمل الإقلاع لأنظمة الملفات الجذر الطبيعية. بالنسبة لنظام ملفات جذر طبيعي موصول عبر NFS، يجب استخدام خيارات الإقلاع nfs_root_name و nfs_root_addrs لإعطاء إعدادات NFS. لمزيد من المعلومات حول الجذر الموصول عبر NFS، راجع ملف وثائق النواة Documentation/filesystems/nfs/nfsroot.rst. لمزيد من المعلومات حول ضبط نظام ملفات الجذر، راجع أيضًا وثائق LILO و LOADLIN.

من الممكن أيضًا للملف التنفيذي /linuxrc تغيير جهاز الجذر الطبيعي. لكي يتمكن /linuxrc من تغيير جهاز الجذر الطبيعي، يجب أن يكون /proc موصولاً. بعد وصل /proc، يقوم /linuxrc بتغيير جهاز الجذر الطبيعي بالكتابة في ملفات proc التالية: /proc/sys/kernel/real-root-dev و /proc/sys/kernel/nfs-root-name و /proc/sys/kernel/nfs-root-addrs. بالنسبة لجهاز جذر مادي، يتغير جهاز الجذر بجعل /linuxrc يكتب رقم جهاز نظام ملفات الجذر الجديد في /proc/sys/kernel/real-root-dev. بالنسبة لنظام ملفات جذر NFS، يتغير جهاز الجذر بجعل /linuxrc يكتب إعدادات NFS في الملفين /proc/sys/kernel/nfs-root-name و /proc/sys/kernel/nfs-root-addrs ثم كتابة 0xff (مثل رقم جهاز NFS الوهمي) في الملف /proc/sys/kernel/real-root-dev. على سبيل المثال، سيقوم أمر الصدفة التالي بتغيير جهاز الجذر الطبيعي إلى /dev/hdb1:

    echo 0x365 >/proc/sys/kernel/real-root-dev

بالنسبة لمثال NFS، ستقوم أوامر الصدفة التالية بتغيير جهاز الجذر الطبيعي إلى مجلد NFS المسار /var/nfsroot على خادم NFS محلي في الشبكة بعنوان IP هو 193.8.232.7 لنظام بعنوان IP هو 193.8.232.2 واسمه "idefix":

    echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
    echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \
        >/proc/sys/kernel/nfs-root-addrs
    echo 255 >/proc/sys/kernel/real-root-dev

ملاحظة: استخدام /proc/sys/kernel/real-root-dev لتغيير نظام ملفات الجذر هو أمر مهجور. انظر ملف مصدر نواة لينكس Documentation/admin-guide/initrd.rst بالإضافة إلى pivot_root(2) و pivot_root(8) لمعلومات حول الطريقة الحديثة لتغيير نظام ملفات الجذر.

  الاستخدام
كان الدافع الرئيس لتنفيذ initrd هو السماح بضبط النواة بشكل وحداتي عند تثبيت النظام.

أحد السيناريوهات الممكنة لتثبيت النظام هو كما يلي:

(1) يقلع برنامج المحمل من قرص مرن أو وسائط أخرى بنواة دنيا (مثل دعم /dev/ram و /dev/initrd ونظام ملفات ext2) ويحمل /dev/initrd بنسخة مضغوطة بصيغة gzip من نظام الملفات المبدئي.

(2) يحدد الملف التنفيذي /linuxrc ما هو مطلوب لـ (1) وصل نظام ملفات الجذر الطبيعي (أي نوع الجهاز، مشغلات الجهاز، نظام الملفات) و (2) وسائط التوزيع (مثل الأقراص المدمجة، الشبكة، الشريط، ...). يمكن القيام بذلك بسؤال المستخدم، أو بالجس الآلي، أو باستخدام نهج هجين.

(3) يحمل الملف التنفيذي /linuxrc الوحدات اللازمة من نظام الملفات الجذر المبدئي.

(4) ينشئ الملف التنفيذي /linuxrc نظام ملفات الجذر ويملؤه. (في هذه المرحلة، ليس من الضروري أن يكون نظام الملفات الجذر الطبيعي نظامًا مكتملاً بعد).

(5) يضبط الملف التنفيذي /linuxrc القيمة /proc/sys/kernel/real-root-dev، ويفصل /proc، ونظام الملفات الجذر الطبيعي وأي أنظمة ملفات أخرى أوصلها، ثم ينتهي.

(6) توصل النواة بعد ذلك نظام الملفات الجذر الطبيعي.

(7) الآن بعد أن أصبح نظام الملفات متاحًا وسليمًا، يمكن تثبيت محمل الإقلاع.

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

(9) أصبح النظام الآن قابلاً للإقلاع ويمكن تنفيذ مهام تثبيت إضافية.

الدور الرئيس لـ /dev/initrd فيما سبق هو إعادة استخدام بيانات الضبط أثناء تشغيل النظام العادي دون الحاجة لاختيار نواة مبدئية، أو نواة عامة كبيرة، أو إعادة تصريف النواة.

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

سيناريو ثالث هو توفير أقراص استرداد أكثر ملاءمة. ولأن معلومات مثل موقع قسم نظام الملفات الجذر ليست مطلوبة وقت الإقلاع، يمكن للنظام المحمل من /dev/initrd استخدام حوار و/أو كشف آلي يتبعه فحص سلامة ممكن.

أخيرًا وليس آخرًا، قد تستخدم توزيعات لينكس على الأقراص المدمجة initrd لتسهيل التثبيت من القرص المدمج. يمكن للتوزيعة استخدام LOADLIN لتحميل /dev/initrd مباشرة من القرص المدمج دون الحاجة لأي أقراص مرنة. يمكن للتوزيعة أيضًا استخدام قرص إقلاع LILO مرن ثم تشغيل قرص ذاكرة أكبر عبر /dev/initrd من القرص المدمج.

الملفات
/dev/initrd
/dev/ram0
/linuxrc
/initrd

ملاحظات

•   مع النواة الحالية، تظل أي أنظمة ملفات موصولة عند نقل /dev/ram0 من / إلى /initrd قابلة للوصول. ومع ذلك، لا تُحدث إدخالات /proc/mounts.

•   مع النواة الحالية، إذا لم يكن المجلد /initrd موجودًا، فلن يُفصل /dev/ram0 بالكامل إذا كان مستخدمًا من قبل أي عملية أو كان يحتوي على أي نظام ملفات موصول عليه. إذا لم يُفصل /dev/ram0 بالكامل، فسيظل /dev/ram0 في الذاكرة.

•   يجب ألا يعتمد مستخدمو /dev/initrd على السلوك المذكور في الملاحظات أعلاه. قد يتغير هذا السلوك في الإصدارات المستقبلية من نواة لينكس.

انظر أيضًا
chown(1)، mknod(1)، ram(4)، freeramdisk(8)، rdev(8)

Documentation/admin-guide/initrd.rst في شجرة مصدر نواة لينكس، وثائق LILO، وثائق LOADLIN، وثائق SYSLINUX

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

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

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