![为什么我打不开这些设备节点?](https://linux22.com/image/148785/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E6%89%93%E4%B8%8D%E5%BC%80%E8%BF%99%E4%BA%9B%E8%AE%BE%E5%A4%87%E8%8A%82%E7%82%B9%EF%BC%9F.png)
[root@archlinux xtricman]# ls -l /dev/pts
total 0
crw--w---- 1 xtricman tty 136, 0 Feb 24 19:24 0
c--------- 1 root root 5, 2 Feb 24 19:10 ptmx
[root@archlinux xtricman]# ls -l /mnt
total 12
brw-r--r-- 1 root root 136, 0 Feb 24 19:17 dev_node
crw-r--r-- 1 root root 136, 0 Feb 24 19:17 dev_node_c
drwx------ 2 root root 12288 Feb 24 19:12 lost+found
[root@archlinux xtricman]# exec 6<>/dev/pts/0
[root@archlinux xtricman]# exec 7<>/mnt/dev_node
bash: /mnt/dev_node: No such device or address
[root@archlinux xtricman]# exec 7<>/mnt/dev_node_c
bash: /mnt/dev_node_c: Input/output error
/dev/pts
是 devpts 的挂载点,/mnt
是 ext4 的挂载点。
我想知道,由于三个设备节点(/dev/pts/0
、/mnt/dev_node
、/mnt/dev_node_c
)的主设备号和次设备号都相同,为什么我只能打开一个/dev/pts/0
而不能打开另外两个?
即使我能理解(major=136,minor=0)的块设备不存在,那么字符设备(major=136,minor=0)的“输入/输出错误”是什么意思?为什么我会收到此错误?
答案1
嗯,dev_node
是一个块设备(b
输出中行开头的ls
说明了这一点),所以它与其他设备完全不同。它只是碰巧具有相同的主设备号,但块设备和字符设备之间的编号没有关联。
Documentation/admin-guide/devices.txt
Linux 内核源代码中讲述了它是什么:
136 block Mylex DAC960 PCI RAID controller; ninth controller
0 = /dev/rd/c8d0 First disk, whole disk
您可能没有 Mylex RAID 控制器,更不用说九对于他们来说,这No such device or address
似乎是一个适当的回应。
dev_node_c
虽然看起来和你的一样/dev/pts/0
。但其中的设备节点/dev/pts
是自动生成的,有一个特殊的虚拟文件系统(devpts
)。像往常一样,它显示在 的输出中mount
:
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
我测试了这一点,确实将设备节点从那里复制/dev/pts/15
到另一个文件系统不起作用。另外,安装 的另一个副本devpts
似乎会创建一个干净的实例,其中的伪 tty/dev/pts
在另一个副本中不可见。因此,伪 tty 节点确实可能与devpts
文件系统的特定实例相关联,因此节点在其之外根本无法工作。