所以我有一个程序,它获取一个设备,对其进行分区,然后为该分区创建设备节点。问题是,在强制进行某种重新扫描之前,内核不会拾取设备。例如:
- 隔断装置
- 制作节点
- cat 节点 > cat: /dev/xxx: 没有这样的设备或地址
但这有效:
- 隔断装置
- 制作节点
- 运行 cfdisk /dev/xxx 并立即退出
- 猫节点 > 工作正常
为什么是这样?是否有某种ioctl 可以重新扫描SCSI 总线之类的?
并且,这是行不通的:
echo "- - -" > /sys/class/scsi_host/hostX/scan
答案1
使用partprobe /dev/xxx
partprobe
是套餐的一部分parted
。从手册页:
partprobe
是一个通知操作系统内核分区表更改的程序`
如果您有一个分区块设备(例如磁盘映像文件)并且您想为其自动创建设备节点(例如/dev/loop*)并通知内核,则另一种选择是,您可以使用kpartx
.它会在热插拔事件(例如插入 USB 或热插拔 SATA 驱动器)时自动调用。