Linux环境下基于mhvtl与iSCSI构建虚拟磁带库存储方案
一、 服务端:mhvtl 虚拟磁带库部署
1. 核心组件安装与编译
首先,需要安装编译 mhvtl 所需的系统依赖包:
sudo yum install -y kernel-devel lzo-devel wget mtx lsscsi sg3_utils gcc make
获取 mhvtl 源码包及工具包并进行安装:
# 下载工具包与源码
wget http://www.mhvtl.com/downloads/mhvtl-utils-1.5-4.x86_64.rpm
wget http://www.mhvtl.com/downloads/mhvtl-utils-1.5-4.src.rpm
# 安装 RPM 包
sudo rpm -Uvh mhvtl-utils-1.5-4.x86_64.rpm mhvtl-utils-1.5-4.src.rpm
# 编译内核模块
cd /root/rpmbuild/SOURCES/
tar -xzf mhvtl-2016-03-10.tgz
cd mhvtl-1.5/kernel/
make
sudo make install
启动 mhvtl 服务并验证虚拟 SCSI 设备:
# 重启服务以确保模块正确加载
sudo systemctl restart mhvtl
# 查看生成的虚拟磁带库设备
lsscsi -g
2. Web 图形化管理界面配置(可选)
若希望通过 Web UI 管理虚拟磁带库,可部署 mhvtl-gui。首先安装 EPEL 源及相关依赖:
sudo yum install -y epel-release
sudo yum install -y php lsscsi mtx mt-st git sysstat sg3_utils scsi-target-utils httpd
启动并启用 iSCSI Target 服务与 HTTP 服务:
sudo systemctl start tgtd
sudo systemctl enable tgtd
sudo systemctl start httpd
sudo systemctl enable httpd
配置 Apache 用户的 sudo 免密权限,编辑 /etc/sudoers 文件:
# 添加以下行
apache ALL=(ALL) NOPASSWD: ALL
# 注释掉 requiretty(如果存在)
# Defaults requiretty
临时关闭 SELinux 并修改配置文件使其永久生效:
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
部署 Web 前端代码:
sudo mkdir -p /var/www/html/vtl_manager
cd /var/www/html/vtl_manager
sudo git clone https://github.com/markh794/mhvtl-gui.git .
# 若 git 克隆失败,可使用 wget 下载 zip 包并解压
# wget https://codeload.github.com/markh794/mhvtl-gui/zip/refs/heads/master -O gui.zip
# unzip gui.zip && mv mhvtl-gui-master/* . && rm -rf mhvtl-gui-master gui.zip
重启相关服务后,通过浏览器访问 http://<服务器IP>/vtl_manager/,默认密码为 mhvtl。
3. iSCSI Target 端配置
将虚拟磁带库设备通过 iSCSI 协议共享给客户端,可以选择 scsi-target-utils (tgt) 或 targetcli 工具。
方案 A:使用 scsi-target-utils (tgt)
编辑 /etc/tgt/targets.conf 文件,定义 iSCSI 目标:
# 在文件末尾追加以下配置
<target iqn.2023-10.com.storage:vtape-cluster01>
# 绑定后端虚拟磁带设备(根据 lsscsi 输出调整)
backing-store /dev/st0
backing-store /dev/sch0
# 限制允许访问的客户端网段
initiator-address 10.0.0.0/24
# 关闭写缓存以保证数据一致性
write-cache off
</target>
重载配置并验证 Target 状态:
sudo systemctl reload tgtd
tgt-admin --show
方案 B:使用 targetcli (LIO)
安装 targetcli 工具:
sudo yum install -y targetcli
创建后端存储对象(以 pscsi 模式映射 sg 设备):
# 批量创建 pscsi 后端存储
for dev_id in $(seq 2 11); do
targetcli /backstores/pscsi create name=vtape_sg${dev_id} dev=/dev/sg${dev_id}
done
# 查看已创建的后端存储
targetcli /backstores/pscsi ls
创建 iSCSI Target 并映射 LUN:
# 创建 Target (使用自定义 IQN)
targetcli /iscsi create iqn.2023-10.com.storage:target01
# 创建 LUN 并关联后端存储 (示例)
targetcli /iscsi/iqn.2023-10.com.storage:target01/tpg1/luns create /backstores/pscsi/vtape_sg2
# 配置 Portal 监听地址
targetcli /iscsi/iqn.2023-10.com.storage:target01/tpg1/portals create 10.0.0.100
二、 客户端:iSCSI Initiator 连接与挂载
在需要访问虚拟磁带库的客户端服务器上,安装 iSCSI 发起端工具:
sudo yum install -y iscsi-initiator-utils
1. 发现与登录 Target
扫描服务端提供的 iSCSI 目标(请将 IP 替换为实际服务端地址):
sudo iscsiadm --mode discovery --type sendtargets --portal 10.0.0.100
根据发现结果,登录到指定的 Target。如果是虚拟带库,机械臂(Medium Changer)和磁带驱动器(Tape Drive)通常作为独立的 LUN 呈现,需要分别登录:
# 登录指定 Target
sudo iscsiadm --mode node --targetname iqn.2023-10.com.storage:vtape-cluster01 --portal 10.0.0.100 --login
# 登出指定 Target
sudo iscsiadm --mode node --targetname iqn.2023-10.com.storage:vtape-cluster01 --portal 10.0.0.100 --logout
2. 配置开机自动连接
为了确保系统重启后自动挂载 iSCSI 设备,需更新节点的启动属性:
sudo iscsiadm --mode node --targetname iqn.2023-10.com.storage:vtape-cluster01 --portal 10.0.0.100 --op update --name node.startup --value automatic
3. iscsiadm 常用参数解析
-m, --mode:指定操作模式,如discovery(发现)、node(节点管理)、session(会话管理)。-p, --portal:指定 Target 的 IP 地址和端口(默认 3260)。-T, --targetname:指定目标的 IQN 名称。-l, --login:执行登录操作,建立 iSCSI 会话。-u, --logout:执行登出操作,断开会话。-o, --op:指定数据库操作类型,如new、delete、update、show。-n, --name与-v, --value:配合update操作,用于修改节点记录的特定属性及值。