[P1]-iSCSI 部署-将NAS空间变为本地磁盘,并拥有与实体硬盘所有常用功能

本指南包括所需软件的安装步骤。这个指南涵盖了从安装必要的软件包到配置 iSCSI Target 并在客户端挂载使用的基本流程

前言:

[!NOTE]

为解决电脑空间不足且程序、游戏无法安装到smb共享的网络硬盘的问题,可通过iSCSI协议挂载NAS存储空间,使电脑将其识别为本地硬盘,实际使用上与物理硬盘一致

1. 安装必要的软件

服务端配置(Linux 系统)

  • 安装 targetcli 和相关工具

    • 对于基于 Red Hat 的系统(如 CentOS、RHEL、Fedora):

      sudo yum install targetcli
      
    • 对于基于 Debian 的系统(如 Ubuntu):

      sudo apt-get update
      sudo apt-get install targetcli-fb
      
  • 安装 ntfs-3g 工具(用于挂载 NTFS 文件系统):

    • 对于基于 Red Hat 的系统:

      sudo yum install ntfs-3g
      
    • 对于基于 Debian 的系统:

      sudo apt-get install ntfs-3g
      
  • 安装 lsofpsmisc(用于查找和终止占用文件系统的进程):

    • 对于基于 Red Hat 的系统:

      sudo yum install lsof psmisc
      
    • 对于基于 Debian 的系统:

      sudo apt-get install lsof psmisc
      

2. 创建后端存储

  • 进入 targetcli shell:

    sudo targetcli
    
  • 创建文件IO存储对象

    (以/home/iscsi_disk.img 路径下的img镜像为例,大小为2GB):

    /> 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)#名字而已,随意

    /> cd /iscsi
    /iscsi> create iqn.2025-02.com.example:server.target0
    
  • 进入新创建的 Target 的 TPG:

    /iscsi> cd iqn.2025-02.com.example:server.target0/tpg1
    
  • 添加 LUN

    (将之前创建的文件IO存储对象添加为 LUN):

    /iscsi/iqn.20...rget0/tpg1> luns/ create /backstores/fileio/my_iscsi_disk
    
  • 配置访问控制(ACL)

    (根据需要设置客户端IQN):Windows的ISCSI客户端中"配置"页面查看

请添加图片描述

/iscsi/iqn.20...rget0/tpg1> acls/ create iqn.1991-05.com.microsoft:desktop-tcn6g45(换成自己的)
  • 禁用认证(如果适用):

    /iscsi/iqn.20...rget0/tpg1> set attribute authentication=0
    
  • 启用 TPG

    (通常默认已启用):

    /iscsi/iqn.20...rget0/tpg1> enable
    
  • 保存配置:

    /> cd /
    /> saveconfig
    /> exit
    

[!IMPORTANT]

请确保防火墙开放 3260 端口

  • 配置防火墙规则以允许3260开放

    sudo firewall-cmd --zone=public --add-port=3260/tcp --permanent
    sudo firewall-cmd --reload
    

[!NOTE]

(万不得已的情况下请使用此方法) 彻底关闭防火墙(请勿在生产环境中使用此命令 ,适用于CentOS 7 或 RHEL 7 及其衍生版本)
  1. 停止 firewalld 服务

    sudo systemctl stop firewalld
    
  2. 禁用 firewalld 服务,使其不会在系统启动时自动启动

    sudo systemctl disable firewalld
    
  • 重新加载 LIO 服务配置
  1. 重启 LIO 服务: 如果需要应用新的配置或者重启 LIO 服务,可以使用以下命令:

    sudo systemctl restart target
    
  2. 开机自启动 LIO 服务: 使用下面的命令确保 target 服务会在系统启动时自动运行:

    sudo systemctl enable target
    
  3. 检查 LIO 服务状态: 若要查看 target 服务的状态,可以使用:

    sudo systemctl status target
    

4. 在客户端(如 Windows 11)挂载 iSCSI Target

5.服务端查看通过iSCSI挂载到Windows 的磁盘上放入的文件

使用 parted 查看分区信息
sudo parted /home/iscsi_disk.img unit s print

命令输出如下:

[root@learn home]# sudo parted /home/iscsi_disk.img unit s print

Model:  (file)
Disk /home/iscsi_disk.img: 4194304s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End       Size      File system  Name                          标志
 1      34s     32767s    32734s                 Microsoft reserved partition  msftres
 2      32768s  4190207s  4157440s  ntfs         Basic data partition

[root@learn home]#

根据提供的 parted 输出,/home/iscsi_disk.img 文件包含两个分区:

  1. Microsoft reserved partition(微软保留分区),从第34个扇区开始,到第32767个扇区结束。
  2. Basic data partition(基本数据分区),从第32768个扇区开始,到第4190207个扇区结束,文件系统类型为 NTFS。

为了在服务端查看第二个分区(即 NTFS 分区)中的文件内容,我们需要计算正确的偏移量,并使用该偏移量挂载这个分区。

确认分区偏移量

确保使用的偏移量是正确的。根据 parted 的输出,第二个分区(NTFS 分区)从第 32768 扇区开始,每个扇区大小为 512 字节。因此,偏移量应为:

偏移量 = 32768 * 512 = 16777216 字节

我们可以再次确认分区表和偏移量是否正确:

sudo parted /home/iscsi_disk.img unit s print
  • 使用 losetup 并检查设备

首先,使用 losetup.img 文件关联到一个循环设备,并列出所有循环设备以确认是否正确关联:

sudo losetup -P -f --show /home/iscsi_disk.img

这个命令会自动找到并分配一个空闲的循环设备,并且 -P 参数会自动扫描分区表并创建相应的设备节点(如 /dev/loop0p1, /dev/loop0p2 等)。

然后,列出所有循环设备:

lsblk

应该能看到类似 /dev/loop0p1/dev/loop0p2 这样的设备节点。其中 /dev/loop0p2 应该对应于的 NTFS 分区。

[!IMPORTANT]

NTFS 分区有时候会处于不安全的状态。具体来说,Windows 可能没有完全关闭该分区(例如通过快速启动或休眠功能),这导致了文件系统元数据仍然保存在 Windows 缓存中。因此,Linux 系统会拒绝以读写模式挂载该分区。所以要使用只读模式挂载

尝试只读挂载 (方法二选一)

如果你只是想查看文件而不需要修改它们,可以尝试以只读模式挂载:

sudo mount -o ro,loop,offset=16777216 /home/iscsi_disk.img /mnt
  • 或者直接挂载已识别的分区:
sudo mount -t ntfs-3g -o ro /dev/loop0p2 /mnt
  • 完成后的清理工作:

    sudo umount /mnt
    sudo losetup -d /dev/loop0
    

6. 解决挂载点忙的问题

如果遇到挂载点忙的问题,可以使用以下命令查找并终止占用该挂载点的进程:

  • 查找占用 /mnt 的进程:

    sudo fuser -m /mnt
    sudo lsof /mnt
    
  • 终止相关进程:

    sudo kill -9 PID
    

    将PID替换为你找到的实际进程ID。

7.总结

[!NOTE]

以上步骤详细描述了如何在 Linux 服务器上安装必要的软件、配置 iSCSI Target、以及如何在客户端挂载和使用该 Target。同时也包含了如何在服务端查看通过 iSCSI 挂载的卷中的文件。每个环境可能有其特定的需求或限制,请根据实际情况调整上述步骤; 如果有任何问题或需要进一步的帮助,请询问我们

邮箱:dutyc.studio@outlook.com 作者Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值