通过 mtx 与 CentOS 7 上的磁带库交互

通过 mtx 与 CentOS 7 上的磁带库交互

我有一个 Quantum SuperLoader 3 通过 SAS 插入 CentOS 7 系统。它显示在dmesg和中lsscsi并且由ch司机

$ lsscsi
[0:2:0:0]    disk    LSI      MR9271-8i        3.24  /dev/sda
[1:0:0:0]    tape    IBM      ULTRIUM-HH6      E4J1  /dev/st0
[1:0:0:1]    mediumx QUANTUM  UHDL             0091  /dev/sch0

这是内核初始化:

$ dmesg
[   13.443589] scsi 1:0:0:0: Attached scsi generic sg2 type 1
[   13.444091] scsi 1:0:0:1: Attached scsi generic sg3 type 8
[   13.463023] SCSI Media Changer driver v0.25
[   13.463121] st: Version 20101219, fixed bufsize 32768, s/g segs 256
[   13.572514] ch0: type #1 (mt): 0x0+1 [medium transport]
[   13.572516] ch0: type #2 (st): 0x100+16 [storage]
[   13.572517] ch0: type #3 (ie): 0x0+0 [import/export]
[   13.572518] ch0: type #4 (dt): 0x20+1 [data transfer]
[   13.697117] ch0: dt 0x20: ch0: ID/LUN unknown
[   13.697119] ch0: INITIALIZE ELEMENT STATUS, may take some time ...
[   67.097903] ch0: ... finished
[   67.097910] ch 1:0:0:1: Attached scsi changer ch0
[   67.098792] st 1:0:0:0: Attached scsi tape st0
[   67.098796] st 1:0:0:0: st0: try direct i/o: yes (alignment 4 B)

使用该包磁带机可以正常运行mt-st。我还安装了mtx与 Bacula 或 Amanda 一起使用的驱动程序,但mtx似乎期望使用与ch.

看来有一定的驱动程序工具ch,例如 scsi-changer,但它们似乎并不常用,所以我想一定有一种方法可以直接mtx与驱动程序一起工作ch

当以明显的方式调用时:

$ sudo mtx -f /dev/sch0 status
/dev/sch0 is not an sg device, or old sg driver

/dev/sch0 是:

$ ls -lastZ /dev/sch0
crw-rw----. root cdrom system_u:object_r:device_t:s0    /dev/sch0

我将尝试使用 kraxel.org SCSI 转换器,但鉴于 Amanda 内部缺乏支持,任何解决该mtx问题的建议都将是一个福音。

答案1

弄清楚了!

mtx仅在“通用”SCSI 设备上起作用。内核驱动/dev/sch0程序提供的设备有点ch转移注意力。

事实证明,除了创建任何驱动程序支持的特定设备之外,SCSI 设备还被赋予了“通用”设备文件。您可以使用以下命令找到它们lsscsi

$ lsscsi --generic
[0:0:19:0]   enclosu CISCO    UCS 240          0809  -          /dev/sg0
[0:2:0:0]    disk    LSI      MR9271-8i        3.24  /dev/sda   /dev/sg1
[1:0:0:0]    tape    IBM      ULTRIUM-HH6      E4J1  /dev/st0   /dev/sg2
[1:0:0:1]    mediumx QUANTUM  UHDL             0091  /dev/sch0  /dev/sg3

这些实际上在上面的输出中提到了dmesg。使用通用设备,mtx可以在 CentOS 7 上与 SuperLoader 3 配合使用:

$ sudo mtx -f /dev/sg3 status
  Storage Changer /dev/sg3:1 Drives, 16 Slots ( 0 Import/Export )
Data Transfer Element 0:Empty
      Storage Element 1:Empty
      Storage Element 2:Empty
      Storage Element 3:Empty
      Storage Element 4:Empty
      Storage Element 5:Empty
      Storage Element 6:Empty
      Storage Element 7:Empty
      Storage Element 8:Empty
      Storage Element 9:Empty
      Storage Element 10:Empty
      Storage Element 11:Empty
      Storage Element 12:Empty
      Storage Element 13:Empty
      Storage Element 14:Empty
      Storage Element 15:Empty
      Storage Element 16:Empty

为了方便起见,剩下要做的就是符号/dev/changer链接/dev/sg3

答案2

我想为可能添加或删除磁盘和其他 SCSI 设备的操作员添加一些附加信息和替代方法,却发现他们之前在 bacula 中配置的 /dev/sgX 设备在重新启动后已更改。 Bacula 有运行 shell 命令的语法来导入其他配置文件,这将帮助我们获得我们需要的东西。该语法列于 Bacula 9.4 的“主”手册的第 18.2.3 节中。

首先创建一个脚本:

cat > /usr/local/libexec/bacula-get-generic-changer-device << XYZZY
#!/bin/sh
echo -n Changer Device = \$(/usr/bin/lsscsi -g |/usr/bin/grep 'mediumx.*IBM.*3573-TL.*/dev/sch' |/usr/bin/sed 's|^.*/dev/\(sg[0-9]\)|/dev/\1|')
XYZZY
chmod 700 /usr/local/libexec/bacula-get-generic-changer-device

您必须修改上面的正则表达式以匹配您的磁带库。我有一台 Dell TL2000,它实际上是重新命名的 IBM 3573-TL。通过lsscsi查询时显示如下:

[6:0:0:1]    mediumx IBM      3573-TL          F.11  /dev/sch0  /dev/sg6

运行该脚本时,其输出应类似于以下内容;检查它是否适合您的系统:

# /usr/local/libexec/bacula-get-changer-generic-device
Changer Device = /dev/sg6# 

您会注意到没有尾随换行符,并且提示符紧跟在通用设备名称之后。这就是我们想要的。现在剩下的就是更改 bacula-sd.conf 中的“Changer Device”行。将它们替换为以下内容:

@|"sh -c /usr/local/libexec/bacula-get-changer-generic-device"

现在,bacula 将在每次启动时拥有磁带库/自动转换器的正确通用 SCSI 设备,即使已在系统中添加或删除了其他 SCSI 设备。

编辑:当然,在我弄清楚这个方法之后,似乎还有更简单的方法。您可以检查/dev/tape/by-id/并使用适当的设备。就我而言,它看起来像这样:

/dev/tape/by-id/scsi-1IBM_3573-TL_00X2U49P1785_LL0 -> ../../sg6

它还具有能够区分逻辑库的额外好处 ( _LL0)。

答案3

你需要在centos 7上加载内核模块sg(它被报告为bug):

# modprobe sg
# lsscsi --generic
# mtx -f /dev/sgX status

(SCSI 通用驱动程序在启动时未加载)https://www.centos.org/forums/viewtopic.php?f=48&t=52357

相关内容