配置准备两台虚拟机,一台作为target端提供磁盘,至少要有两块磁盘;一台作为intiator端连接磁盘;
target端虚拟机IP为:192.168.1.61
intiator端虚拟机IP为:192.168.1.62
1. 安装nvme-cli 配置nvmet模块
需要在target端和intiator端执行
apt-get update
apt-get install nvme-cli
sudo modprobe nvmet
sudo modprobe nvmet-tcp
2. target端配置
cd /sys/kernel/config/nvmet/subsystems
sudo mkdir nvme-test-target
# nvme-test-target 如果连接多个intiator 需要改变这个目录名
echo 1 | sudo tee -a attr_allow_any_host > /dev/null
sudo mkdir namespaces/1
# 如需提供多个磁盘需要在namespaces下创建多个目录 一个磁盘一个目录 例:sudo mkdir 2
cd namespaces/1
echo -n /dev/nvme0n1 |sudo tee -a device_path > /dev/null
# /dev/nvme0n1为磁盘的名称
echo 1|sudo tee -a enable > /dev/null
sudo mkdir /sys/kernel/config/nvmet/ports/1
cd /sys/kernel/config/nvmet/ports/1
echo 192.168.1.61 |sudo tee -a addr_traddr > /dev/null
# 192.168.1.61 当前虚拟机IP
echo tcp|sudo tee -a addr_trtype > /dev/null
echo 40000|sudo tee -a addr_trsvcid > /dev/null
# 40000为端口号
echo ipv4|sudo tee -a addr_adrfam > /dev/null
sudo ln -s /sys/kernel/config/nvmet/subsystems/nvme-test-target/ /sys/kernel/config/nvmet/ports/1/subsystems/nvme-test-target
# /nvme-test-target为开始创建目录名称
3. intiator端配置
加载模块
sudo modprobe nvme-fabrics
连接target端磁盘
sudo nvme discover -t tcp -a 192.168.1.61 -s 40000
# 192.168.1.61 target端虚拟机ip 40000刚才配置的端口号
sudo nvme connect -t tcp -n nvme-test-target -a 192.168.2.100 -s 40000
# nvme-test-target创建的目录名
sudo nvme list # 可以看到连接到的盘
nvme list-subsys --output-format=json
# 可以看到target端的IP,NQN和一些信息
4. 取消initiator端与target端的连接
# 单个磁盘取消连接
sudo nvme disconnect /dev/nvme1n1 -n nvme-test-target
# nvme-test-target目录里面的磁盘都取消连接
nvme disconnect -n nvme-test-target
5. target端卸载nvme模块
重启虚拟机后会自动卸载
用命令卸载
sudo rm -rf /sys/kernel/config/nvmet/ports/1/subsystems/nvme-test-target
# nvme-test-target 目录名称
echo 0 > /sys/kernel/config/nvmet/subsystems/nvme-test-target/namespaces/1/enable
echo -n 0 > /sys/kernel/config/nvmet/subsystems/nvme-test-target/namespaces/1/device_path
sudo rmdir --ignore-fail-on-non-empty /sys/kernel/config/nvmet/subsystems/nvme-test-target/namespaces/1
sudo rmdir --ignore-fail-on-non-empty /sys/kernel/config/nvmet/subsystems/nvme-test-target
sudo rmdir --ignore-fail-on-non-empty /sys/kernel/config/nvmet/ports/1
sudo rmmod nvmet-tcp
sudo rmmod nvmet