我有一个 Debian 11 和一个 U.2 SSD,应该是可热插拔的;这是我的内核:
root@eris:~# uname -a
Linux eris 5.18.0-0.bpo.1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 5.18.2-1~bpo11+1 (2022-06-14) x86_64 GNU/Linux
该驱动器安装在“ICY DOCK U.2 NVMe SSD移动机架”中,并且在启动时检测到正常,我可以格式化并安装它;但是,当我将其从机架中拉出时,内核没有检测到更改(中没有任何内容dmesg
),当我将其放回机架时,mount
其他命令也找不到它。
我找到了这篇文章AIX 中也差不多,也许在拔出驱动器之前我应该执行一些步骤 - 例如,在 AIX 中,您首先会告诉系统“取消配置”驱动器。
那么,我是否做错了什么?如果是,我需要做什么来解决这个问题?
答案1
我找到了一种方法来完成我需要的操作,即“取消配置”和“配置”驱动器作为热插拔的一部分。到目前为止,这就是我所做的,实际上相对简单:
这些是我的块设备:
root@eris:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3.6T 0 disk
├─nvme0n1p1 259:1 0 476M 0 part /boot/efi
├─nvme0n1p2 259:2 0 38.1G 0 part /
└─nvme0n1p3 259:3 0 3.6T 0 part /data
nvme1n1 259:4 0 3.5T 0 disk /test
我想要取消配置(即从块设备列表中删除)的是nvme1n1
.现在你需要在 PCI 总线上找到正确的设备地址,它被映射为目录树/sys/bus/pci
- 最简单的方法是这样的:
root@eris:~# for i in /sys/block/nvme*
> do
> echo "$i is $(cat $i/device/address)"
> done
/sys/block/nvme0n1 is 0000:01:00.0
/sys/block/nvme1n1 is 0000:04:00.0
这表明nvme1n1
对应于/sys/bus/pci/drivers/nvme/0000:04:00.0
:
root@eris:~# ll /sys/bus/pci/drivers/nvme/0000:04:00.0/
total 0
-r--r--r-- 1 root root 4096 Jul 7 09:24 aer_dev_correctable
-r--r--r-- 1 root root 4096 Jul 7 09:24 aer_dev_fatal
-r--r--r-- 1 root root 4096 Jul 7 09:24 aer_dev_nonfatal
-r--r--r-- 1 root root 4096 Jul 7 09:24 ari_enabled
-rw-r--r-- 1 root root 4096 Jul 7 09:24 broken_parity_status
-r--r--r-- 1 root root 4096 Jul 7 08:04 class
-rw-r--r-- 1 root root 4096 Jul 7 09:24 config
-r--r--r-- 1 root root 4096 Jul 7 09:24 consistent_dma_mask_bits
-r--r--r-- 1 root root 4096 Jul 7 09:24 current_link_speed
-r--r--r-- 1 root root 4096 Jul 7 09:24 current_link_width
-rw-r--r-- 1 root root 4096 Jul 7 09:24 d3cold_allowed
-r--r--r-- 1 root root 4096 Jul 7 08:04 device
-r--r--r-- 1 root root 4096 Jul 7 09:24 dma_mask_bits
lrwxrwxrwx 1 root root 0 Jul 7 08:04 driver -> ../../../../../../bus/pci/drivers/nvme
-rw-r--r-- 1 root root 4096 Jul 7 09:24 driver_override
-rw-r--r-- 1 root root 4096 Jul 7 09:24 enable
lrwxrwxrwx 1 root root 0 Jul 7 09:24 firmware_node -> ../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:3b/device:3c/device:41/device:42
lrwxrwxrwx 1 root root 0 Jul 7 09:24 iommu -> ../../../../0000:00:00.2/iommu/ivhd0
lrwxrwxrwx 1 root root 0 Jul 7 09:24 iommu_group -> ../../../../../../kernel/iommu_groups/21
-r--r--r-- 1 root root 4096 Jul 7 09:24 irq
drwxr-xr-x 2 root root 0 Jul 7 09:24 link/
-r--r--r-- 1 root root 4096 Jul 7 09:24 local_cpulist
-r--r--r-- 1 root root 4096 Jul 7 09:24 local_cpus
-r--r--r-- 1 root root 4096 Jul 7 09:24 max_link_speed
-r--r--r-- 1 root root 4096 Jul 7 09:24 max_link_width
-r--r--r-- 1 root root 4096 Jul 7 09:24 modalias
-rw-r--r-- 1 root root 4096 Jul 7 09:24 msi_bus
drwxr-xr-x 2 root root 0 Jul 7 09:24 msi_irqs/
-rw-r--r-- 1 root root 4096 Jul 7 09:24 numa_node
drwxr-xr-x 3 root root 0 Jul 7 08:04 nvme/
-r--r--r-- 1 root root 4096 Jul 7 09:24 pools
drwxr-xr-x 2 root root 0 Jul 7 09:24 power/
-r--r--r-- 1 root root 4096 Jul 7 09:24 power_state
--w--w---- 1 root root 4096 Jul 7 09:24 remove
--w------- 1 root root 4096 Jul 7 09:24 rescan
--w------- 1 root root 4096 Jul 7 09:24 reset
-rw-r--r-- 1 root root 4096 Jul 7 09:24 reset_method
-r--r--r-- 1 root root 4096 Jul 7 09:24 resource
-rw------- 1 root root 16384 Jul 7 09:24 resource0
-r--r--r-- 1 root root 4096 Jul 7 08:04 revision
-rw------- 1 root root 65536 Jul 7 09:24 rom
lrwxrwxrwx 1 root root 0 Jul 7 08:10 subsystem -> ../../../../../../bus/pci
-r--r--r-- 1 root root 4096 Jul 7 08:04 subsystem_device
-r--r--r-- 1 root root 4096 Jul 7 08:04 subsystem_vendor
-rw-r--r-- 1 root root 4096 Jul 7 09:24 uevent
-r--r--r-- 1 root root 4096 Jul 7 08:04 vendor
我这里需要的是一个remove
只写文件。要将 SSD 设备从块设备列表中删除:
root@eris:~# echo 1 > /sys/bus/pci/drivers/nvme/0000:04:00.0/remove
root@eris:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3.6T 0 disk
├─nvme0n1p1 259:1 0 476M 0 part /boot/efi
├─nvme0n1p2 259:2 0 38.1G 0 part /
└─nvme0n1p3 259:3 0 3.6T 0 part /data
这需要几秒钟的时间,所以不要惊慌!要取回它:
root@eris:~# echo 1 > /sys/bus/pci/rescan
root@eris:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3.6T 0 disk
├─nvme0n1p1 259:1 0 476M 0 part /boot/efi
├─nvme0n1p2 259:2 0 38.1G 0 part /
└─nvme0n1p3 259:3 0 3.6T 0 part /data
nvme1n2 259:5 0 3.5T 0 disk
但请注意,这nvme1n1
已经成为nvme1n2
- 这是我仍然需要弄清楚的事情,但我现在可以热插拔我的 U.2 驱动器。