table of contents
| st(4) | Device Drivers Manual | st(4) |
الاسم¶
st - جهاز شريط SCSI
موجز¶
#include <sys/mtio.h>
int ioctl(int fd, int request [, (void *)arg3]); int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd); int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status); int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);
الوصف¶
يوفر المشغل st الواجهة لمجموعة متنوعة من أجهزة أشرطة SCSI. حاليًا، يتولى المشغل التحكم في جميع الأجهزة المكتشفة من نوع “الوصول التسلسلي”. يستخدم المشغل st رقم الجهاز الرئيس 9.
يستخدم كل جهاز ثمانية أرقام أجهزة ثانوية. تُعين البتات الخمسة الأدنى في الأرقام الثانوية بالتسلسل حسب ترتيب الاكتشاف. في النواة 2.6، تُسلسل البتات التي تعلو البتات الثمانية الأدنى مع البتات الخمسة الأدنى لتكوين رقم الشريط. يمكن تجميع الأرقام الثانوية في مجموعتين من أربعة أرقام: أرقام الجهاز الثانوية الرئيسة (للف الآلي) n، وأرقام أجهزة “بدون لف” (n + 128). الأجهزة التي تُفتح باستخدام رقم الجهاز الرئيس سيُرسل إليها أمر REWIND عند إغلاقها. أما الأجهزة التي تُفتح باستخدام رقم جهاز “بدون لف” فلن يُرسل إليها ذلك. (لاحظ أن استخدام جهاز لف آلي لضبط موضع الشريط باستخدام mt مثلًا لا يؤدي إلى النتيجة المرجوة: فيُلف الشريط بعد أمر mt ويبدأ الأمر التالي من بداية الشريط).
تتوفر أربعة أرقام ثانوية داخل كل مجموعة لتعريف أجهزة بخصائص مختلفة (حجم الكتلة، الضغط، الكثافة، إلخ). عند بدء تشغيل النظام، يتوفر الجهاز الأول فقط. وتُنشط الثلاثة الأخرى عند تعريف الخصائص المبدئية (انظر أدناه). (بتغيير ثوابت وقت التصريف، يمكن تغيير التوازن بين الحد الأقصى لعدد محركات الأشرطة وعدد الأرقام الثانوية لكل محرك. يسمح التخصيص المبدئي بالتحكم في 32 محرك شريط. على سبيل المثال، يمكن التحكم في ما يصل إلى 64 محرك شريط برقمين ثانويين لخيارات مختلفة).
تُنشأ الأجهزة عادةً بواسطة:
mknod -m 666 /dev/st0 c 9 0 mknod -m 666 /dev/st0l c 9 32 mknod -m 666 /dev/st0m c 9 64 mknod -m 666 /dev/st0a c 9 96 mknod -m 666 /dev/nst0 c 9 128 mknod -m 666 /dev/nst0l c 9 160 mknod -m 666 /dev/nst0m c 9 192 mknod -m 666 /dev/nst0a c 9 224
لا يوجد جهاز كتلي مقابل.
يستخدم المشغل خبيئة داخلية يجب أن تكون كبيرة بما يكفي لاستيعاب كتلة شريط واحدة على الأقل. قبل لينكس 2.1.121، خُصصت الخبيئة ككتلة واحدة متصلة. هذا يحد من حجم الكتلة إلى أكبر كتلة ذاكرة متصلة يمكن لمخصص النواة توفيرها. الحد الحالي هو 128 كيلوبايت للمعمارية 32-بت و 256 كيلوبايت للمعمارية 64-بت. في النوى الأحدث، يخصص المشغل الخبيئة في أجزاء عدة إذا لزم الأمر. افتراضيًا، الحد الأقصى لعدد الأجزاء هو 16. وهذا يعني أن الحجم الأقصى للكتلة كبير جدًا (2 ميجابايت إذا نجح تخصيص 16 كتلة بحجم 128 كيلوبايت).
يُحدد حجم خبيئة المشغل الداخلية بواسطة ثابت في وقت التصريف يمكن تجاوزه بخيار بدء تشغيل النواة. بالإضافة إلى ذلك، يحاول المشغل تخصيص خبيئة مؤقتة أكبر في وقت التشغيل إذا لزم الأمر. ومع ذلك، قد يفشل تخصيص كتل الذاكرة المتصلة الكبيرة في وقت التشغيل ويُنصح بعدم الاعتماد كثيرًا على التخصيص الديناميكي للخبيئة قبل لينكس 2.1.121 (ينطبق هذا أيضًا على تحميل المشغل عند الطلب باستخدام kerneld أو kmod).
لا يدعم المشغل تحديدًا أي علامة تجارية أو طراز لمحرك أشرطة. بعد بدء تشغيل النظام، تُحدد خيارات جهاز الشريط بواسطة البرمجيات الثابتة للمحرك. على سبيل المثال، إذا اختارت البرمجيات الثابتة للمحرك وضع الكتلة الثابتة، فسيستخدم جهاز الشريط وضع الكتلة الثابتة. يمكن تغيير الخيارات باستدعاءات ioctl(2) صريحة وتظل سارية المفعول عند إغلاق الجهاز وإعادة فتحه. يؤثر ضبط الخيارات على كل من جهاز اللف الآلي وجهاز عدم اللف.
يمكن تحديد خيارات مختلفة للأجهزة المختلفة داخل المجموعة الفرعية المكونة من أربعة. تسري الخيارات عند فتح الجهاز. على سبيل المثال، يمكن لمدير النظام تعريف جهاز يكتب في وضع الكتلة الثابتة بحجم كتلة معين، وآخر يكتب في وضع الكتلة المتغيرة (إذا كان المحرك يدعم كلا الوضعين).
يدعم المشغل أقسام الشريط إذا كان المحرك يدعمها. (لاحظ أن أقسام الشريط ليس لها علاقة بأقسام القرص. يمكن رؤية الشريط المقسم كأشرطة منطقية عدة داخل وسيط واحد). يجب تفعيل دعم الأقسام باستخدام ioctl(2). يُحفظ موقع الشريط داخل كل قسم عبر تغييرات الأقسام. يُحدد القسم المستخدم لعمليات الشريط اللاحقة باستخدام ioctl(2). يُنفذ تبديل القسم مع عملية الشريط التالية لتجنب حركة الشريط غير الضرورية. يُحدد الحد الأقصى لعدد الأقسام على الشريط بواسطة ثابت وقت التصريف (أربعة في الأصل). يحتوي المشغل على ioctl(2) يمكنه تهيئة شريط بقسم واحد أو قسمين.
عادةً ما يُنشأ الجهاز /dev/tape كرابط صلب أو رمزي لجهاز الشريط المبدئي في النظام.
بدءًا من لينكس 2.6.2، يُصدر المشغل في دليل sysfs المسار /sys/class/scsi_tape الأجهزة المتصلة وبعض المعاملات المسندة إليها.
نقل البيانات¶
يدعم المشغل التشغيل في وضع الكتلة الثابتة ووضع الكتلة المتغيرة (إذا كان المحرك يدعمهما). في وضع الكتلة الثابتة، يكتب المحرك كتلًا بالحجم المحدد ولا يعتمد حجم الكتلة على عدد البايتات في استدعاءات نظام الكتابة. في وضع الكتلة المتغيرة، تُكتب كتلة شريط واحدة لكل استدعاء كتابة ويحدد عدد البايتات حجم كتلة الشريط المقابلة. لاحظ أن الكتل الموجودة على الشريط لا تحتوي على أي معلومات حول وضع الكتابة: عند القراءة، الشيء الوحيد المهم هو استخدام الأوامر التي تقبل أحجام الكتل الموجودة على الشريط.
في وضع الكتلة المتغيرة، ليس من الضروري أن يتطابق عدد بايتات القراءة مع حجم كتلة الشريط تمامًا. إذا كان عدد البايتات أكبر من الكتلة التالية على الشريط، يُعيد المشغل البيانات وتُعيد الدالة حجم الكتلة الفعلي. إذا كان حجم الكتلة أكبر من عدد البايتات، يُعاد خطأ.
في وضع الكتلة الثابتة، يمكن أن تكون أعداد بايتات القراءة عشوائية إذا كان التخزين المؤقت مفعلًا، أو مضاعفًا لحجم كتلة الشريط إذا كان التخزين المؤقت معطلًا. قبل لينكس 2.1.121 كانت تُسمح بالكتابة بعدد بايتات عشوائي إذا كان التخزين المؤقت مفعلًا. في جميع الحالات الأخرى (قبل لينكس 2.1.121 مع تعطيل التخزين المؤقت أو في النوى الأحدث) يجب أن يكون عدد بايتات الكتابة مضاعفًا لحجم كتلة الشريط.
في نظام لينكس 2.6، يحاول برنامج التشغيل استخدام عمليات النقل المباشرة بين مخزن المستخدم والجهاز. وإذا تعذر ذلك، يتم استخدام المخزن الداخلي لبرنامج التشغيل. تشمل أسباب عدم استخدام عمليات النقل المباشرة المحاذاة غير الصحيحة لمخزن المستخدم المؤقت (القيمة الافتراضية هي 512 بايت ولكن يمكن تغييرها بواسطة برنامج تشغيل HBA)، وعدم إمكانية وصول محول SCSI إلى صفحة واحدة أو أكثر من صفحات مخزن المستخدم المؤقت، وما إلى ذلك.
يُكتب وسم ملف آليًا على الشريط إذا كانت آخر عملية شريط قبل الإغلاق هي كتابة.
عند مواجهة وسم ملف أثناء القراءة، يحدث ما يلي. إذا كانت هناك بيانات متبقية في الخبيئة عند العثور على وسم الملف، تُعاد البيانات المخزنة مؤقتًا. تُعيد القراءة التالية صفر بايت. وتُعيد القراءة التي تليها بيانات من الملف التالي. يُشار إلى نهاية البيانات المسجلة بإعادة صفر بايت لاستدعاءي قراءة متتاليين. تُعيد القراءة الثالثة خطأ.
Ioctls¶
يدعم المشغل ثلاث طلبات ioctl(2). الطلبات التي لا يتعرف عليها المشغل st تُمرر إلى مشغل SCSI. التعريفات أدناه مأخوذة من /usr/include/linux/mtio.h:
MTIOCTOP — تنفيذ عملية شريط¶
يأخذ هذا الطلب وسيطًا من النوع (struct mtop *). لا تدعم جميع المحركات جميع العمليات. يُعيد المشغل خطأ EIO إذا رفض المحرك عملية ما.
/* بنية لـ MTIOCTOP - أمر عملية الشريط المغناطيسي: */
struct mtop {
short mt_op; /* العمليات المعرفة أدناه */
int mt_count; /* عددها */
};
عمليات الشريط المغناطيسي للاستخدام العادي للشريط:
- MTBSF
- رجوع للخلف عبر mt_count من أوسمة الملفات.
- MTBSFM
- رجوع للخلف عبر mt_count من أوسمة الملفات. إعادة وضع الشريط على جانب EOT لآخر وسم ملف.
- MTBSR
- رجوع للخلف عبر mt_count من السجلات (كتل الشريط).
- MTBSS
- رجوع للخلف عبر mt_count من علامات الضبط.
- MTCOMPRESSION
- تفعيل ضغط بيانات الشريط داخل المحرك إذا كان mt_count غير صفري وتعطيل الضغط إذا كان mt_count صفرًا. يستخدم هذا الأمر صفحة MODE رقم 15 المدعومة من قبل معظم DATs.
- MTEOM
- الذهاب إلى نهاية الوسيط المسجل (لإلحاق ملفات).
- MTERASE
- مسح الشريط. في لينكس 2.6، يُنفذ مسح قصير (وسم الشريط كفارغ) إذا كان الوسيط صفرًا. بخلاف ذلك، يُنفذ مسح طويل (مسح الكل).
- MTFSF
- تقدم للأمام عبر mt_count من أوسمة الملفات.
- MTFSFM
- تقدم للأمام عبر mt_count من أوسمة الملفات. إعادة وضع الشريط على جانب BOT لآخر وسم ملف.
- MTFSR
- تقدم للأمام عبر mt_count من السجلات (كتل الشريط).
- MTFSS
- تقدم للأمام عبر mt_count من علامات الضبط.
- MTLOAD
- تنفيذ أمر تحميل SCSI. تتوفر حالة خاصة لبعض محملات HP الآلية. إذا كان mt_count هو الثابت MT_ST_HPLOADER_OFFSET زائد رقم، يُرسل الرقم إلى المحرك للتحكم في المحمل الآلي.
- MTLOCK
- قفل باب محرك الشريط.
- MTMKPART
- تهيئة الشريط إلى قسم واحد أو قسمين. إذا كان mt_count موجبًا، فإنه يعطي حجم القسم 1 ويحتوي القسم 0 على بقية الشريط. إذا كان mt_count صفرًا، تُهيأ الشريط إلى قسم واحد. بدءًا من لينكس 4.6، يحدد mt_count السالب حجم القسم 0 وتحتوي بقية الشريط على القسم 1. يعتمد الترتيب الفيزيائي للأقسام على المحرك. لا يُسمح بهذا الأمر للمحرك ما لم يكن دعم الأقسام مفعلًا للمحرك (انظر MT_ST_CAN_PARTITIONS أدناه).
- MTNOP
- لا عملية—يفرغ خبيئة المشغل كأثر جانبي. يجب استخدامه قبل قراءة الحالة بـ MTIOCGET.
- MTOFFL
- لف وإخراج المحرك عن المتصل.
- MTRESET
- تصفير المحرك.
- MTRETEN
- إعادة شد الشريط.
- MTREW
- لف.
- MTSEEK
- السعي إلى رقم كتلة الشريط المحدد في mt_count. تتطلب هذه العملية إما محرك SCSI-2 يدعم أمر LOCATE (عنوان خاص بالجهاز) أو محرك SCSI-1 متوافق مع Tandberg (مثل Tandberg و Archive Viper و Wangtek، ...). يجب أن يكون رقم الكتلة هو الذي أُعيد سابقًا بواسطة MTIOCPOS إذا استُخدمت عناوين خاصة بالجهاز.
- MTSETBLK
- ضبط طول كتلة المحرك على القيمة المحددة في mt_count. يضبط طول الكتلة الذي قيمته صفر المحرك على وضع حجم الكتلة المتغير.
- MTSETDENSITY
- ضبط كثافة الشريط على الكود الموجود في mt_count. يمكن العثور على أكواد الكثافة التي يدعمها المحرك من وثائق المحرك.
- MTSETPART
- يُبدل القسم النشط إلى mt_count. تُرقم الأقسام بدءًا من الصفر. لا يُسمح بهذا الأمر للمحرك ما لم يكن دعم الأقسام مفعلًا للمحرك (انظر MT_ST_CAN_PARTITIONS أدناه).
- MTUNLOAD
- تنفيذ أمر إلغاء تحميل SCSI (لا يخرج الشريط).
- MTUNLOCK
- فك قفل باب محرك الشريط.
- MTWEOF
- كتابة mt_count من أوسمة الملفات.
- MTWSM
- كتابة mt_count من علامات الضبط.
عمليات الشريط المغناطيسي لضبط خيارات الجهاز (بواسطة المستخدم الخارق):
- MTSETDRVBUFFER
- ضبط خيارات المحرك والمشغل المختلفة وفقًا للبتات المرمزة في mt_count. تتكون هذه من وضع التخزين المؤقت للمحرك، ومجموعة من خيارات المشغل المنطقية، وعتبة كتابة الخبيئة، والمبدئيات لحجم الكتلة والكثافة، والمهلات (منذ لينكس 2.1 فقط). يمكن لعملية واحدة أن تؤثر على عنصر واحد فقط في القائمة أدناه (تُحسب الخيارات المنطقية كعنصر واحد).
- تُستخدم القيمة التي تحتوي على أصفار في البتات الأربعة ذات الرتبة العالية لضبط وضع التخزين المؤقت للمحرك. أوضاع التخزين المؤقت هي:
- 0
- لن يبلغ المحرك عن حالة GOOD في أوامر الكتابة حتى تُكتب كتل البيانات فعليًا على الوسيط.
- 1
- قد يبلغ المحرك عن حالة GOOD في أوامر الكتابة بمجرد نقل جميع البيانات إلى الخبيئة الداخلية للمحرك.
- 2
- قد يبلغ المحرك عن حالة GOOD في أوامر الكتابة بمجرد (أ) نقل جميع البيانات إلى الخبيئة الداخلية للمحرك، و (ب) كتابة جميع البيانات المخزنة مؤقتًا من مختلف المبدئين بنجاح إلى الوسيط.
- للتحكم في عتبة الكتابة، يجب أن تتضمن القيمة في mt_count الثابت MT_ST_WRITE_THRESHOLD مع إجراء عملية OR بتية مع عدد الكتل في البتات الـ 28 الأدنى. يشير عدد الكتل إلى كتل بحجم 1024 بايت، وليس حجم الكتلة الفيزيائي على الشريط. لا يمكن أن تتجاوز العتبة حجم الخبيئة الداخلية للمشغل (انظر الوصف أعلاه).
- لضبط وخيارات المنطقية ومسحها، يجب أن تتضمن القيمة في mt_count أحد الثوابت MT_ST_BOOLEANS أو MT_ST_SETBOOLEANS أو MT_ST_CLEARBOOLEANS أو MT_ST_DEFBOOLEANS مع إجراء عملية OR بتية مع أي مجموعة من الخيارات التالية المطلوبة. باستخدام MT_ST_BOOLEANS يمكن ضبط الخيارات على القيم المحددة في البتات المقابلة. وباستخدام MT_ST_SETBOOLEANS يمكن ضبط الخيارات بشكل انتقائي وباستخدام MT_ST_DEFBOOLEANS تُمسح بشكل انتقائي.
- تُضبط الخيارات المبدئية لجهاز الشريط باستخدام MT_ST_DEFBOOLEANS. يُنشط جهاز شريط غير نشط (مثل جهاز برقم ثانوي 32 أو 160) عند تعريف الخيارات المبدئية له لأول مرة. يرث الجهاز المنشط من الجهاز المنشط عند بدء التشغيل الخيارات التي لم تُضبط صراحةً.
- الخيارات المنطقية هي:
- MT_ST_BUFFER_WRITES (المبدئي: true)
- تخزين جميع عمليات الكتابة مؤقتًا في وضع الكتلة الثابتة. إذا كان هذا الخيار false وكان المحرك يستخدم حجم كتلة ثابت، فيجب أن تكون جميع عمليات الكتابة لمضاعفات حجم الكتلة. يجب ضبط هذا الخيار على false لكتابة أرشيفات متعددة المجلدات موثوقة.
- MT_ST_ASYNC_WRITES (المبدئي: true)
- عندما يكون هذا الخيار true، تعود عمليات الكتابة فورًا دون انتظار نقل البيانات إلى المحرك إذا كانت البيانات تتسع في خبيئة المشغل. تحدد عتبة الكتابة مدى امتلاء الخبيئة قبل إصدار أمر كتابة SCSI جديد. ستُحتجز أي أخطاء يبلغ عنها المحرك حتى العملية التالية. يجب ضبط هذا الخيار على false لكتابة أرشيفات متعددة المجلدات موثوقة.
- MT_ST_READ_AHEAD (المبدئي: true)
- يتسبب هذا الخيار في قيام المشغل بتوفير تخزين مؤقت للقراءة وقراءة مسبقة في وضع الكتلة الثابتة. إذا كان هذا الخيار false وكان المحرك يستخدم حجم كتلة ثابت، فيجب أن تكون جميع عمليات القراءة لمضاعفات حجم الكتلة.
- MT_ST_TWO_FM (المبدئي: false)
- يعدل هذا الخيار سلوك المشغل عند إغلاق ملف. الإجراء العادي هو كتابة وسم ملف واحد. إذا كان الخيار true، فسيقوم المشغل بكتابة وسمي ملف والرجوع للخلف عبر الثاني.
- ملاحظة: لا ينبغي ضبط هذا الخيار على true لمحركات أشرطة QIC لأنها غير قادرة على الكتابة فوق وسم ملف. تكتشف هذه المحركات نهاية البيانات المسجلة عن طريق اختبار الشريط الفارغ بدلاً من وسمي ملف متتاليين. تكتشف معظم المحركات الحالية الأخرى أيضًا نهاية البيانات المسجلة، وعادةً ما يكون استخدام وسمي ملف ضروريًا فقط عند تبادل الأشرطة مع بعض الأنظمة الأخرى.
- MT_ST_DEBUGGING (المبدئي: false)
- يفعل هذا الخيار رسائل تنقيح مختلفة من المشغل (فعال فقط إذا صُرف المشغل مع تعريف DEBUG بقيمة غير صفرية).
- MT_ST_FAST_EOM (المبدئي: false)
- يتسبب هذا الخيار في إرسال عملية MTEOM مباشرة إلى المحرك، مما قد يسرع العملية ولكنه يتسبب في فقدان المشغل لتتبع رقم الملف الحالي الذي يعود عادة بطلب MTIOCGET. إذا كان MT_ST_FAST_EOM هو false، فسيستجيب المشغل لطلب MTEOM بالتقدم للأمام عبر الملفات.
- MT_ST_AUTO_LOCK (المبدئي: false)
- عندما يكون هذا الخيار true، يُقفل باب المحرك عند فتح ملف الجهاز ويُفك قفله عند إغلاقه.
- MT_ST_DEF_WRITES (المبدئي: false)
- قد تتغير خيارات الشريط (حجم الكتلة، الوضع، الضغط، إلخ) عند التغيير من جهاز مرتبط بمحرك إلى جهاز آخر مرتبط بنفس المحرك اعتمادًا على كيفية تعريف الأجهزة. يحدد هذا الخيار متى يفرض المشغل التغييرات باستخدام أوامر SCSI ومتى يُعتمد على قدرات الاكتشاف الآلي للمحركات. إذا كان هذا الخيار false، يرسل المشغل أوامر SCSI فورًا عند تغيير الجهاز. إذا كان الخيار true، لا تُرسل أوامر SCSI حتى يُطلب إجراء كتابة. في هذه الحالة، يُسمح للبرمجيات الثابتة للمحرك باكتشاف بنية الشريط عند القراءة وتُستخدم أوامر SCSI فقط للتأكد من كتابة الشريط وفقًا للمواصفات الصحيحة.
- MT_ST_CAN_BSR (المبدئي: false)
- عند استخدام القراءة المسبقة، يجب أحيانًا إرجاع الشريط للخلف إلى الموضع الصحيح عند إغلاق الجهاز ويُستخدم أمر SCSI للرجوع للخلف عبر السجلات لهذا الغرض. لا تستطيع بعض المحركات القديمة معالجة هذا الأمر بشكل موثوق ويمكن استخدام هذا الخيار لإرشاد المشغل بعدم استخدام الأمر. النتيجة النهائية هي أنه مع القراءة المسبقة ووضع الكتلة الثابتة، قد لا يكون موضع الشريط صحيحًا داخل الملف عند إغلاق الجهاز. في لينكس 2.6، المبدئي هو true للمحركات التي تدعم SCSI-3.
- MT_ST_NO_BLKLIMS (المبدئي: false)
- لا تقبل بعض المحركات أمر SCSI المسمى READ BLOCK LIMITS. إذا استُخدم هذا، فلن يستخدم المشغل الأمر. العيب هو أن المشغل لا يستطيع التحقق قبل إرسال الأوامر مما إذا كان حجم الكتلة المحدد مقبولاً للمحرك.
- MT_ST_CAN_PARTITIONS (المبدئي: false)
- يفعل هذا الخيار دعم أقسام عدة داخل الشريط. ينطبق الخيار على جميع الأجهزة المرتبطة بالمحرك.
- MT_ST_SCSI2LOGICAL (المبدئي: false)
- يوجه هذا الخيار المشغل لاستخدام عناوين الكتل المنطقية المعرفة في معيار SCSI-2 عند إجراء عمليات البحث والإخبار (مع أمري MTSEEK و MTIOCPOS وعند تغيير قسم الشريط). بخلاف ذلك، تُستخدم العناوين الخاصة بالجهاز. يُنصح بشدة بضبط هذا الخيار إذا كان المحرك يدعم العناوين المنطقية لأنها تحسب أيضًا أوسمة الملفات. هناك بعض المحركات التي تدعم فقط عناوين الكتل المنطقية.
- MT_ST_SYSV (المبدئي: false)
- عند تفعيل هذا الخيار، تستخدم أجهزة الأشرطة دلالات System V. بخلاف ذلك، تُستخدم دلالات BSD. الفرق الأهم بين الدلالات هو ما يحدث عند إغلاق جهاز مستخدم للقراءة: في دلالات System V، يُقدم الشريط للأمام بعد وسم الملف التالي إذا لم يكن ذلك قد حدث أثناء استخدام الجهاز. في دلالات BSD، لا يتغير موضع الشريط.
- MT_NO_WAIT (المبدئي: false)
- يفعل الوضع الفوري (أي عدم انتظار انتهاء الأمر) لبعض الأوامر (مثل اللف).
مثال:
struct mtop mt_cmd; mt_cmd.mt_op = MTSETDRVBUFFER; mt_cmd.mt_count = MT_ST_BOOLEANS |
MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES; ioctl(fd, MTIOCTOP, mt_cmd);
يمكن ضبط حجم الكتلة المبدئي للجهاز باستخدام MT_ST_DEF_BLKSIZE ويمكن ضبط كود الكثافة المبدئي باستخدام MT_ST_DEFDENSITY. تُجرى عملية OR لقيم المعاملات مع كود العملية.
مع لينكس 2.1.x والأحدث، يمكن ضبط قيم المهلة بالأمر الفرعي MT_ST_SET_TIMEOUT مع إجراء عملية OR مع المهلة بالثواني. المهلة الطويلة (المستخدمة للف وأوامر أخرى قد تستغرق وقتًا طويلاً) يمكن ضبطها باستخدام MT_ST_SET_LONG_TIMEOUT. مبدئيات النواة طويلة جدًا للتأكد من عدم انتهاء مهلة أمر ناجح مع أي محرك. بسبب هذا، قد يبدو المشغل عالقًا حتى لو كان ينتظر المهلة فقط. يمكن استخدام هذه الأوامر لضبط قيم أكثر عملية لمحرك معين. تنطبق المهل المحددة لجهاز واحد على جميع الأجهزة المرتبطة بنفس المحرك.
بدءًا من لينكس 2.4.19 ولينكس 2.5.43، يدعم المشغل بت حالة يشير إلى ما إذا كان المحرك يطلب التنظيف. تُضبط الطريقة التي يستخدمها المحرك لإعادة معلومات التنظيف باستخدام الأمر الفرعي MT_ST_SEL_CLN. إذا كانت القيمة صفرًا، يكون بت التنظيف دائمًا صفرًا. إذا كانت القيمة واحدًا، تُستخدم بيانات TapeAlert المعرفة في معيار SCSI-3 (لم تُطبق بعد). القيم من 2 إلى 17 محجوزة. إذا كانت البتات الثمانية الأدنى أكبر من أو تساوي 18، تُستخدم بتات من بيانات الاستشعار الممتدة. تحدد البتات من 9 إلى 16 قناعًا لاختيار البتات المراد النظر إليها وتحدد البتات من 17 إلى 23 نمط البتات المراد البحث عنه. إذا كان نمط البتات صفرًا، فإن بتًا واحدًا أو أكثر تحت القناع يشير إلى طلب التنظيف. إذا كان النمط غير صفري، فيجب أن يطابق النمط بايت بيانات الاستشعار المقنع.
MTIOCGET — الحصول على الحالة¶
يأخذ هذا الطلب وسيطًا من النوع (struct mtget *).
/* بنية لـ MTIOCGET - أمر الحصول على حالة الشريط المغناطيسي */
struct mtget {
long mt_type;
long mt_resid;
/* المسجلات التالية تعتمد على الجهاز */
long mt_dsreg;
long mt_gstat;
long mt_erreg;
/* الحقلان التاليان لا يُستخدمان دائمًا */
daddr_t mt_fileno;
daddr_t mt_blkno;
};
- mt_type
- يحدد ملف الترويسة قيمًا عديدة لـ mt_type، لكن المشغل الحالي يبلغ فقط عن الأنواع العامة MT_ISSCSI1 (شريط SCSI-1 عام) و MT_ISSCSI2 (شريط SCSI-2 عام).
- mt_resid
- يحتوي على رقم قسم الشريط الحالي.
- mt_dsreg
- يبلغ عن إعدادات المحرك الحالية لحجم الكتلة (في البتات الـ 24 الأدنى) والكثافة (في البتات الـ 8 العليا). تُحدد هذه الحقول بواسطة MT_ST_BLKSIZE_SHIFT و MT_ST_BLKSIZE_MASK و MT_ST_DENSITY_SHIFT و MT_ST_DENSITY_MASK.
- mt_gstat
- يبلغ عن معلومات الحالة العامة (المستقلة عن الجهاز). يحدد ملف الترويسة وحدات ماكرو لاختبار بتات الحالة هذه:
- GMT_EOF(x)
- الشريط موضوع بعد وسم ملف مباشرة (دائمًا false بعد عملية MTSEEK).
- GMT_BOT(x)
- الشريط موضوع في بداية الملف الأول (دائمًا false بعد عملية MTSEEK).
- GMT_EOT(x)
- وصلت عملية الشريط إلى نهاية الشريط الفيزيائية.
- GMT_SM(x)
- الشريط موضوع حاليًا عند علامة ضبط (دائمًا false بعد عملية MTSEEK).
- GMT_EOD(x)
- الشريط موضوع عند نهاية البيانات المسجلة.
- GMT_WR_PROT(x)
- المحرك محمي ضد الكتابة. بالنسبة لبعض المحركات، قد يعني هذا أيضًا أن المحرك لا يدعم الكتابة على نوع الوسيط الحالي.
- GMT_ONLINE(x)
- آخر open(2) وجد المحرك مع وجود شريط في مكانه وجاهزًا للعمل.
- GMT_D_6250(x)
- GMT_D_1600(x)
- GMT_D_800(x)
- تفيد معلومات الحالة “العامة” هذه بإعداد الكثافة الحالي لمحركات أشرطة 9 مسارات ½ بوصة فقط.
- GMT_DR_OPEN(x)
- لا يوجد شريط في مكانه بالمحرك.
- GMT_IM_REP_EN(x)
- وضع التقرير الفوري. يُضبط هذا البت إذا لم تكن هناك ضمانات بأن البيانات قد كُتبت فيزيائيًا على الشريط عند عودة استدعاء الكتابة. يُضبط على الصفر فقط عندما لا يقوم المشغل بتخزين البيانات مؤقتًا ويُضبط المحرك على عدم تخزين البيانات مؤقتًا.
- GMT_CLN(x)
- طلب المحرك التنظيف. طُبق منذ لينكس 2.4.19 ولينكس 2.5.43.
- mt_erreg
- الحقل الوحيد المعرف في mt_erreg هو عدد الأخطاء المستعادة في البتات الـ 16 الأدنى (كما هو معرف بواسطة MT_ST_SOFTERR_SHIFT و MT_ST_SOFTERR_MASK). بسبب عدم الاتساق في الطريقة التي تبلغ بها المحركات عن الأخطاء المستعادة، غالبًا ما لا يُحافظ على هذا العدد (معظم المحركات لا تبلغ عن الأخطاء الطفيفة افتراضيًا ولكن يمكن تغيير ذلك بأمر SCSI MODE SELECT).
- mt_fileno
- يبلغ عن رقم الملف الحالي (بدءًا من الصفر). تُضبط هذه القيمة على -1 عندما يكون رقم الملف غير معروف (مثلًا بعد MTBSS أو MTSEEK).
- mt_blkno
- يبلغ عن رقم الكتلة (بدءًا من الصفر) داخل الملف الحالي. تُضبط هذه القيمة على -1 عندما يكون رقم الكتلة غير معروف (مثلًا بعد MTBSF أو MTBSS أو MTSEEK).
MTIOCPOS — الحصول على موضع الشريط¶
يأخذ هذا الطلب وسيطًا من النوع (struct mtpos *) ويبلغ عن تصور المحرك لرقم كتلة الشريط الحالي، وهو ليس نفس mt_blkno الذي يعود به MTIOCGET. يجب أن يكون هذا المحرك محرك SCSI-2 يدعم أمر READ POSITION (عنوان خاص بالجهاز) أو محرك SCSI-1 متوافق مع Tandberg (مثل Tandberg و Archive Viper و Wangtek، ...).
/* بنية لـ MTIOCPOS - أمر الحصول على موضع الشريط المغناطيسي */
struct mtpos {
long mt_blkno; /* رقم الكتلة الحالي */
};
قيمة الإرجاع¶
- EACCES
- جرت محاولة للكتابة على شريط محمي ضد الكتابة أو مسحه. (لا يُكتشف هذا الخطأ أثناء open(2)).
- EBUSY
- الجهاز قيد الاستخدام بالفعل أو تعذر على المشغل تخصيص خبيئة.
- EFAULT
- تشير معاملات الأمر إلى ذاكرة لا تنتمي إلى العملية المستدعية.
- EINVAL
- كان لـ ioctl(2) وسيط غير صالح، أو كان حجم الكتلة المطلوب غير صالح.
- EIO
- تعذر إكمال العملية المطلوبة.
- ENOMEM
- عدد البايتات في read(2) أصغر من الكتلة الفيزيائية التالية على الشريط. (قبل لينكس 2.2.18 ولينكس 2.4.0 كانت تُتجاهل البايتات الإضافية بصمت).
- ENOSPC
- تعذر إكمال عملية كتابة لأن الشريط وصل إلى نهاية الوسيط.
- ENOSYS
- ioctl(2) غير معروف.
- ENXIO
- أثناء الفتح، جهاز الشريط غير موجود.
- EOVERFLOW
- جرت محاولة لقراءة أو كتابة كتلة متغيرة الطول أكبر من خبيئة المشغل الداخلية.
- EROFS
- جرت محاولة فتح باستخدام O_WRONLY أو O_RDWR بينما الشريط الموجود في المحرك محمي ضد الكتابة.
الملفات¶
- /dev/st*
- أجهزة أشرطة SCSI ذات اللف الآلي
- /dev/nst*
- أجهزة أشرطة SCSI بدون لف
ملاحظات¶
- •
- عند تبادل البيانات بين الأنظمة، يجب أن يتفق كلا النظامين على حجم كتلة الشريط الفيزيائي. غالبًا ما لا تكون معاملات المحرك بعد بدء التشغيل هي تلك التي تستخدمها معظم أنظمة التشغيل مع هذه الأجهزة. تستخدم معظم الأنظمة المحركات في وضع الكتلة المتغيرة إذا كان المحرك يدعم هذا الوضع. ينطبق هذا على معظم المحركات الحديثة، بما في ذلك DATs، ومحركات المسح الحلزوني 8 مم، و DLTs، إلخ. قد يكون من المستحسن استخدام هذه المحركات في وضع الكتلة المتغيرة أيضًا في لينكس (أي استخدام MTSETBLK أو MTSETDEFBLK عند بدء تشغيل النظام لضبط الوضع)، على الأقل عند تبادل البيانات مع نظام خارجي. العيب في ذلك هو وجوب استخدام حجم كتلة شريط كبير إلى حد ما للحصول على معدلات نقل بيانات مقبولة على ناقل SCSI.
- •
- تسمح العديد من البرامج (مثل tar(1)) للمستخدم بتحديد عامل التكتل في سطر الأوامر. لاحظ أن هذا يحدد حجم الكتلة الفيزيائي على الشريط فقط في وضع الكتلة المتغيرة.
- •
- من أجل استخدام محركات أشرطة SCSI، يجب إما ضبط مشغل SCSI الأساسي، ومشغل محول SCSI، ومشغل شريط SCSI داخل النواة أو تحميلها كملحقات. إذا لم يكن مشغل شريط SCSI موجودًا، فيُتعرف على المحرك ولكن دعم الشريط الموصوف في هذه الصفحة لن يكون متاحًا.
- •
- يكتب المشغل رسائل الخطأ في الطرفية/السجل. تُترجم أكواد SENSE المكتوبة في بعض الرسائل آليًا إلى نص إذا فُعلت رسائل SCSI المسهبة في إعدادات النواة.
- •
- يسمح التخزين المؤقت الداخلي للمشغل بإنتاجية جيدة في وضع الكتلة الثابتة أيضًا مع أعداد بايتات read(2) و write(2) الصغيرة. مع عمليات النقل المباشر، لا يكون هذا ممكنًا وقد يسبب مفاجأة عند الانتقال إلى نواة 2.6. الحل هو إخبار البرمجيات باستخدام عمليات نقل أكبر (غالبًا بإخبارها باستخدام كتل أكبر). إذا لم يكن ذلك ممكنًا، يمكن تعطيل عمليات النقل المباشر.
انظر أيضًا¶
يحتوي الملف drivers/scsi/README.st أو Documentation/scsi/st.rst (النواة >= 2.6) في شجرة مصدر نواة لينكس على أحدث المعلومات حول المشغل وإمكانيات ضبطه
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس (لم تصدر بعد) |