يوفر
المشغل 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
إلى صفحة
واحدة أو
أكثر من
صفحات مخزن
المستخدم
المؤقت،
وما إلى
ذلك.
يُكتب وسم
ملف آليًا
على الشريط
إذا كانت
آخر عملية
شريط قبل
الإغلاق هي
كتابة.
عند
مواجهة وسم
ملف أثناء
القراءة،
يحدث ما يلي.
إذا كانت
هناك
بيانات
متبقية في
الخبيئة
عند العثور
على وسم
الملف،
تُعاد
البيانات
المخزنة
مؤقتًا.
تُعيد
القراءة
التالية
صفر بايت.
وتُعيد
القراءة
التي تليها
بيانات من
الملف
التالي.
يُشار إلى
نهاية
البيانات
المسجلة
بإعادة صفر
بايت
لاستدعاءي
قراءة
متتاليين.
تُعيد
القراءة
الثالثة
خطأ.
يدعم
المشغل
ثلاث طلبات
ioctl(2). الطلبات
التي لا
يتعرف
عليها
المشغل st
تُمرر إلى
مشغل SCSI.
التعريفات
أدناه
مأخوذة من
/usr/include/linux/mtio.h:
يأخذ هذا
الطلب
وسيطًا من
النوع (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 نمط
البتات
المراد
البحث عنه.
إذا كان نمط
البتات
صفرًا، فإن
بتًا
واحدًا أو
أكثر تحت
القناع
يشير إلى
طلب
التنظيف.
إذا كان
النمط غير
صفري، فيجب
أن يطابق
النمط بايت
بيانات
الاستشعار
المقنع.
يأخذ هذا
الطلب
وسيطًا من
النوع (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).
يأخذ هذا
الطلب
وسيطًا من
النوع (struct mtpos *)
ويبلغ عن
تصور
المحرك
لرقم كتلة
الشريط
الحالي،
وهو ليس نفس
mt_blkno الذي
يعود به MTIOCGET.
يجب أن يكون
هذا المحرك
محرك SCSI-2 يدعم
أمر READ POSITION
(عنوان خاص
بالجهاز) أو
محرك SCSI-1
متوافق مع Tandberg
(مثل Tandberg و Archive Viper و
Wangtek، ...).
/* بنية لـ MTIOCPOS - أمر الحصول على موضع الشريط المغناطيسي */
struct mtpos {
long mt_blkno; /* رقم الكتلة الحالي */
};