P1[向NAS借一点空间]_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘
iSCSI 部署-将NAS空间变为本地磁盘,并拥有与实体硬盘所有常用功能
本指南包括所需软件的安装步骤。这个指南涵盖了从安装必要的软件包到配置 iSCSI Target 并在客户端挂载使用的基本流程
前言:
[!NOTE]
为解决电脑空间不足且程序、游戏无法安装到smb共享的网络硬盘的问题,可通过iSCSI协议挂载NAS存储空间,使电脑将其识别为本地硬盘,实际使用上与物理硬盘一致
1. 安装必要的软件
服务端配置(Linux 系统)
安装
targetcli
和相关工具:对于基于 Red Hat 的系统(如 CentOS、RHEL、Fedora):
1
sudo yum install targetcli
对于基于 Debian 的系统(如 Ubuntu):
1
2sudo apt-get update
sudo apt-get install targetcli-fb
安装
ntfs-3g
工具(用于挂载 NTFS 文件系统):对于基于 Red Hat 的系统:
1
sudo yum install ntfs-3g
对于基于 Debian 的系统:
1
sudo apt-get install ntfs-3g
安装
lsof
和psmisc
包(用于查找和终止占用文件系统的进程):对于基于 Red Hat 的系统:
1
sudo yum install lsof psmisc
对于基于 Debian 的系统:
1
sudo apt-get install lsof psmisc
2. 创建后端存储
进入
targetcli
shell:1
sudo targetcli
创建文件IO存储对象
(以/home/iscsi_disk.img 路径下的img镜像为例,大小为2GB):
1
2/> cd /backstores/fileio
/backstores/fileio> create file_or_dev=/home/iscsi_disk.img name=my_iscsi_disk size=2G
3. 配置 iSCSI Target
创建一个新的 iSCSI Target
(使用合适的 IQN,例如iqn.2025-02.com.example:server.target0)#名字而已,随意
1
2/> cd /iscsi
/iscsi> create iqn.2025-02.com.example:server.target0进入新创建的 Target 的 TPG:
1
/iscsi> cd iqn.2025-02.com.example:server.target0/tpg1
添加 LUN
(将之前创建的文件IO存储对象添加为 LUN):
1
/iscsi/iqn.20...rget0/tpg1> luns/ create /backstores/fileio/my_iscsi_disk
配置访问控制(ACL)
(根据需要设置客户端IQN):Windows的ISCSI客户端中”配置”页面查看
1
/iscsi/iqn.20...rget0/tpg1> acls/ create iqn.1991-05.com.microsoft:desktop-tcn6g45(换成自己的)
禁用认证(如果适用):
1
/iscsi/iqn.20...rget0/tpg1> set attribute authentication=0
启用 TPG
(通常默认已启用):
1
/iscsi/iqn.20...rget0/tpg1> enable
保存配置:
1
2
3/> cd /
/> saveconfig
/> exit
[!IMPORTANT]
请确保防火墙开放 3260 端口
配置防火墙规则以允许3260开放
1
2sudo firewall-cmd --zone=public --add-port=3260/tcp --permanent
sudo firewall-cmd --reload
[!NOTE]
(万不得已的情况下请使用此方法) 彻底关闭防火墙(请勿在生产环境中使用此命令 ,适用于CentOS 7 或 RHEL 7 及其衍生版本)
停止
firewalld
服务:
1sudo systemctl stop firewalld
禁用
firewalld
服务,使其不会在系统启动时自动启动:
1
sudo systemctl disable firewalld
- 重新加载 LIO 服务配置
重启 LIO 服务: 如果需要应用新的配置或者重启 LIO 服务,可以使用以下命令:
1
sudo systemctl restart target
开机自启动 LIO 服务: 使用下面的命令确保
target
服务会在系统启动时自动运行:1
sudo systemctl enable target
检查 LIO 服务状态: 若要查看
target
服务的状态,可以使用:1
sudo systemctl status target
4. 在客户端(如 Windows 11)挂载 iSCSI Target
在 Windows 中使用 iSCSI Initiator 连接到服务器上的 iSCSI Target。#具体参考csdn文章
初始化并格式化磁盘(如果新添加)。
验证连接:确保可以读写数据到新挂载的卷。
5.服务端查看通过iSCSI挂载到Windows 的磁盘上放入的文件
使用 parted
查看分区信息
1 |
|
命令输出如下:
1 |
|
根据提供的 parted
输出,/home/iscsi_disk.img
文件包含两个分区:
- Microsoft reserved partition(微软保留分区),从第34个扇区开始,到第32767个扇区结束。
- Basic data partition(基本数据分区),从第32768个扇区开始,到第4190207个扇区结束,文件系统类型为 NTFS。
为了在服务端查看第二个分区(即 NTFS 分区)中的文件内容,我们需要计算正确的偏移量,并使用该偏移量挂载这个分区。
确认分区偏移量
确保使用的偏移量是正确的。根据 parted
的输出,第二个分区(NTFS 分区)从第 32768 扇区开始,每个扇区大小为 512 字节。因此,偏移量应为:
1 |
|
我们可以再次确认分区表和偏移量是否正确:
1 |
|
首先,使用 losetup
将 .img
文件关联到一个循环设备,并列出所有循环设备以确认是否正确关联:
1 |
|
这个命令会自动找到并分配一个空闲的循环设备,并且 -P
参数会自动扫描分区表并创建相应的设备节点(如 /dev/loop0p1
, /dev/loop0p2
等)。
然后,列出所有循环设备:
1 |
|
应该能看到类似 /dev/loop0p1
和 /dev/loop0p2
这样的设备节点。其中 /dev/loop0p2
应该对应于的 NTFS 分区。
[!IMPORTANT]
NTFS 分区有时候会处于不安全的状态。具体来说,Windows 可能没有完全关闭该分区(例如通过快速启动或休眠功能),这导致了文件系统元数据仍然保存在 Windows 缓存中。因此,Linux 系统会拒绝以读写模式挂载该分区。所以要使用只读模式挂载
尝试只读挂载 (方法二选一)
如果你只是想查看文件而不需要修改它们,可以尝试以只读模式挂载:
1 |
|
- 或者直接挂载已识别的分区:
1 |
|
完成后的清理工作:
1
2sudo umount /mnt
sudo losetup -d /dev/loop0
6. 解决挂载点忙的问题
如果遇到挂载点忙的问题,可以使用以下命令查找并终止占用该挂载点的进程:
查找占用
/mnt
的进程:1
2sudo fuser -m /mnt
sudo lsof /mnt终止相关进程:
1
sudo kill -9 PID
将PID替换为你找到的实际进程ID。
7.总结
[!NOTE]
以上步骤详细描述了如何在 Linux 服务器上安装必要的软件、配置 iSCSI Target、以及如何在客户端挂载和使用该 Target。同时也包含了如何在服务端查看通过 iSCSI 挂载的卷中的文件。每个环境可能有其特定的需求或限制,请根据实际情况调整上述步骤; 如果有任何问题或需要进一步的帮助,请询问我们