我正在运行一个读取/写入我的 nvme 上的文件的进程/nvmedisk/file
。
我的 nvme 磁盘由于某种原因出现故障,并且从中消失了,lsblk
但被列在了其中lspci
。
我手动将其重新绑定echo 0000:0b:00.0 > /sys/bus/pci/drivers/nvme/bind
。
/nvmedisk
由于它很忙,我无法卸载lsof
:
process 80452 gospo 234u REG 259,1 411951104 84928 /nvmedisk/file
我卸载umount -l /nvmedisk
并再次安装了 nvme 磁盘mount /dev/nvme1n2p1 /nvmedisk
磁盘工作正常,但正在运行的进程仍挂起。如果我打开文件,则会/nvmedisk
lsof
产生磁盘标识符259,9
而不是259,1
。我该如何修复已打开的文件描述符,以便可以恢复正在运行的进程。
假设该过程使用文件描述符反复重试写入/读取。
答案1
一个可能的解决方案是使用 gdb 创建一个新的文件描述符并用新的替换旧的。
(gdb) p (int)dup2(open("/nvmedisk/file", 1090), 234) // 1090 for O_RDWR | O_CREAT | O_APPEND