最近更新时间:2026-06-18 14:21:04
nvme resv-report /dev/nvme0n1 -c 1 字段 | 值 | 含义解释 |
|---|---|---|
-c/--cdw11 | 1 | -c 1 为必填项,否则会导致输出错误 指定是否获取详细锁信息,值为1时输出当前所有注册锁和预留锁的完整状态 |
gen | 2 | 预留的世代编号。这是一个计数器,每次预留状态发生变化(如注册、抢占)时都会增加,用于帮助客户端判断状态是否有更新。 |
rtype | 0 | 预留类型。这是最关键的字段, |
regctl | 0 | 当前注册的控制器数量。 |
ptpls | 1 | 持久预留(Persistent Reservation)通过电源状态丢失(Power State Lost)的持久化能力标志。 |
nvme resv-register /dev/nvme0n1 -k 0xA -r 0字段 | 当前值 | 含义解释 |
|---|---|---|
-k/--nrkey | 0xA | 新锁名,自定义 |
-r/--rrega | 0 | 注册锁 |
| 1 | 有 1 个主机(控制器)注册了密钥,说明已经有主机执行过 |
| 0 | 没有活跃的预留。这表示虽然注册了密钥,但没有任何主机通过 |
|
| 这是注册时使用的预留密钥(Registration Key)。后续抢占(Preempt)或注册(Register)时可能需要提供此密钥。 |
|
| 这是注册主机的唯一标识符(Host Identifier),用于在系统中唯一识别该主机。 |
nvme resv-register /dev/nvme0n1 -c 0xA -k 0xB -r 2字段 | 当前值 | 含义解释 |
|---|---|---|
-c/--crkey | 0xA | 当前锁名 |
-k/--nrkey | 0xB | 新锁名,自定义 |
-r/--rrega | 2 | 替换锁 |
nvme resv-register /dev/nvme0n1 -c 0xB -r 1字段 | 当前值 | 含义解释 |
|---|---|---|
-c/--crkey | 0xA | 当前锁名 |
-k/--nrkey | 0xB | 新锁名,自定义 |
-r/--rrega | 2 | 注销锁 |
前提:已为/dev/nvme0n1注册了锁0xA,无其它设备获取了该锁
nvme resv-acquire /dev/nvme0n1 -c 0xA -t 1 -a 0字段 | 当前值 | 含义解释 |
|---|---|---|
-t/--rtype | 1 | 锁类型(目前只支持这一种): 1:Write Exclusive 独占写锁 |
-a/--racqa | 0 | 普通获取 |
6.1 先在vm2上注册锁0xC
6.2 在vm2上执行抢占命令,抢占vm1中的锁
nvme resv-acquire /dev/nvme0n1 -c 0xC -p 0xA -t 1 -a 1字段 | 当前值 | 含义解释 |
|---|---|---|
-p/--prkey | 0xA | 被抢占的已有锁的锁名 |
-t/--rtype | 1 | 锁类型(目前只支持这一种): 1:Write Exclusive 独占写锁通获取 |
-a/--racqa | 1 | 抢占已有锁,1或2都可以,都表示抢占 |
2 |
注意看rcsts的变化
6.3 vm1上的io会因为锁被抢占后被中止,并且由于没有写权限,后续发起写操作都会直接报错。
fio -direct=1 -iodepth=1 -rw=randrw -ioengine=libaio -bs=4k -numjobs=1 -group_reporting -filename=/dev/nvme0n1 -name=Test_4K_rwl此时,vm2抢到锁后可以正常读写io:
前提:已在vm2上为/dev/nvme0n1获取了锁0xC
nvme resv-release /dev/nvme0n1 -c 0xC -t 1 -a 0释放前
释放后
字段 | 当前值 | 含义解释 |
|---|---|---|
-a/--rrela | 0 | 普通释放当前锁 |
释放前:仅vm1可以正常读写io;释放后:vm1、vm2都可以正常读写io
nvme resv-release /dev/nvme0n1 -c 0xA -t 1 -a 1字段 | 当前值 | 含义解释 |
|---|---|---|
-a/--rrela | 1 | 清空设备所有注册锁和预留信息 |
纯净模式
