当前位置:首页 > 技术 > 正文内容

Linux环境下基于mhvtl与iSCSI构建虚拟磁带库存储方案

访客 技术 2026年10月6日 1

一、 服务端: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 操作,用于修改节点记录的特定属性及值。
返回列表

上一篇:Go语言数据类型与运算符详解

没有最新的文章了...

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。