免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6738 | 回复: 17
打印 上一主题 下一主题

mknod成功,sfdisk 这个设备却失败,说找不到设备或者地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-30 21:14 |只看该作者 |倒序浏览
5可用积分
root权限,
(1)mknod -m 660 /dev/scsi/host0/bus0/target2/lun0/disc b 8 16 ------>建立块专用文件成功,指向一个硬件设备/dev/sdb
(2)installer partitions | sfdisk /dev/scsi/host0/bus0/target2/lun0/disc ---------->分区失败,
原因是“/dev/scsi/host0/bus0/target2/lun0/disc: No such device or address,
sfdisk: cannot open /dev/scsi/host0/bus0/target2/lun0/disc read-write”

明明设备/dev/sdb刚刚插入的啊,怎么回事呢?

论坛徽章:
0
2 [报告]
发表于 2008-08-30 21:29 |只看该作者
你去装一个kernel-doc,去里面看看devices.txt文件列表怎么定义的就是了。

论坛徽章:
0
3 [报告]
发表于 2008-08-30 22:10 |只看该作者
原帖由 jerrywjl 于 2008-8-30 21:29 发表
你去装一个kernel-doc,去里面看看devices.txt文件列表怎么定义的就是了。

因为是RAID1的磁盘阵列,需要支持热插拔
[root@10.0.4.1 lun0]# fdisk -l

Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         499     4008186   83  Linux
/dev/sda2             500       17849   139363875   83  Linux

Disk /dev/sdb: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         499     4008186   83  Linux
/dev/sdb2             500       17849   139363875   83  Linux

我直接拔掉/dev/sdb,然后再插到同一个SCSI插槽上,发现变为/dev/sdc了?为什么会这样?

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
4 [报告]
发表于 2008-08-31 10:40 |只看该作者
上面显示是sdb啊

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
5 [报告]
发表于 2008-08-31 17:37 |只看该作者

回复 #1 kyle218 的帖子

没看懂你到底要做什么 .

如果只是为了mount的时候不错位, 可以用LABEL, man e2label 可以查看相关的信息.

论坛徽章:
0
6 [报告]
发表于 2008-08-31 21:33 |只看该作者
原帖由 kyle218 于 2008-8-30 22:10 发表

因为是RAID1的磁盘阵列,需要支持热插拔
[root@10.0.4.1 lun0]# fdisk -l

Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * ...


即便是raid我想里面也应该有吧?!不过你那个热插拔的raid,难道是软raid?你还是由头到尾描述一下你的情况和需求。

论坛徽章:
0
7 [报告]
发表于 2008-09-01 14:16 |只看该作者
对不起,各位,我来迟了

事情的背景是这样的:
我有两块硬盘做成RAID1,正常的时候看到是这样的状态
[root@10.0.4.1 mtc]# fdisk -l

Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         499     4008186   83  Linux
/dev/sda2             500       17849   139363875   83  Linux

Disk /dev/sdb: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         499     4008186   83  Linux
/dev/sdb2             500       17849   139363875   83  Linux

为了健壮性方面的测试,现在我直接拔掉其中的一块硬盘如/dev/sdb, 然后再插入这块拔掉的硬盘,
却发现硬盘的device name变成了/dev/sdc,而不是想要的/dev/sdb,/dev/sdb也不见了,这样我按原来的程序那样
root权限,
(1)mknod -m 660 /dev/scsi/host0/bus0/target2/lun0/disc b 8 16 ------>建立块专用文件成功,指向一个硬件设备/dev/sdb
(2)installer partitions | sfdisk /dev/scsi/host0/bus0/target2/lun0/disc ---------->分区失败,
就失败了,因为设备名变化了,所以主次设备号也变化了,/dev/sdc的对应的【MAJOR MINOR】分别是【8 32】,而内核是根据主次设备号来识别设备的,【MAJOR MINOR】=【8 16】对应的却是/dev/sdb, 所以就出现了上面“/dev/scsi/host0/bus0/target2/lun0/disc: No such device or address,sfdisk: cannot open /dev/scsi/host0/bus0/target2/lun0/disc read-write”



我不太清楚内核对设备是如何命名的,现在我想看能不能冷拔插时保持设备的不变这样我程序就没问题了,所以我打算研究一下udev看能不能实现,各位认为如何,any comments are appreciated, thanks

[ 本帖最后由 kyle218 于 2008-9-1 14:20 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-09-01 15:54 |只看该作者
原来我mknod -m 660 /dev/scsi/host0/bus0/target2/lun0/disc b 8 16 对应的硬盘时/dev/sdb,在我直接拔掉硬盘之后再插入这个硬盘就变成了/dev/sdc(对应主次设备号8、32),我想让这个这个硬盘的主次设备好还是8、16请问udev可以实现吗?

keneral是根据设备名来确定主次设备号,还是根据主次设备号确定设备名?先产生哪个?
例如是keneral先检测到新设备分配disk /dev/sdb设备名,从而分配给这个disk的主次设备号8 16;还是keneral先检测到新设备先分配主次设备号8 16然后设置disk的设备名为/dev/sdb?
我的理解倾向于前者,如果是这样的话,我就可以在keneral识别设备时将设备名从/dev/sdc改回/dev/sdb,这个这个设备的主次设备号还是保持8 16不变了?接下来的mknod 和sfdisk就不会说找不到device了?构想是这样的,不知行不行

[ 本帖最后由 kyle218 于 2008-9-1 16:10 编辑 ]

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
9 [报告]
发表于 2008-09-02 08:46 |只看该作者
如果是udev管理的话,应该不会变成sdc吧

论坛徽章:
0
10 [报告]
发表于 2008-09-02 14:58 |只看该作者
原帖由 cuci 于 2008-9-2 08:46 发表
如果是udev管理的话,应该不会变成sdc吧


很可能,

正常情况下,我用udevinfo -a -p $(udevinfo -q path -n /dev/sdb)看了:
device '/sys/block/sdb' has major:minor 8:16
  looking at class device '/sys/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    SYSFS{dev}=="8:16"
    SYSFS{range}=="16"
    SYSFS{removable}=="0"
    SYSFS{size}=="286749488"
    SYSFS{stat}=="    2496     1353   168208    14116    41524    33063   597208   327572        1    93972   341
688"

follow the "device"-link to the physical device:
  looking at the device chain at '/sys/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/000
0:04:08.0/host0/target0:0:2/0:0:2:0':
    BUS=="scsi"
    ID=="0:0:2:0"
    DRIVER=="sd"
    SYSFS{device_blocked}=="0"
    SYSFS{iocounterbits}=="32"
    SYSFS{iodone_cnt}=="0xad9b"
    SYSFS{ioerr_cnt}=="0x0"
    SYSFS{iorequest_cnt}=="0xad9b"
    SYSFS{model}=="ST9146802SS     "   
    SYSFS{queue_depth}=="64"     
    SYSFS{queue_type}=="simple"
    SYSFS{rev}=="0003"
    SYSFS{scsi_level}=="6"
    SYSFS{state}=="running"
    SYSFS{timeout}=="30"
    SYSFS{type}=="0"
    SYSFS{vendor}=="SEAGATE "


发现独立于内核的设备号ID来固定设备名/dev/sda和/dev/sdb

所以我在/etc/udev/rules.d下面添加了一个名叫“99-checkscsi.rules”的规则文件来固定设备名,内容是:
BUS=="scsi", ID=="0:0:1:0", DRIVER=="sd", NAME="sda"
BUS=="scsi", ID=="0:0:2:0", DRIVER=="sd", NAME="sdb"

但是我发现拔出原来设备名为/dev/sdb的disk,然后再插入发现没有反应,根本就不会检查这个规则,但是我也发现udev的后台进程在啊,
[mtc@10.0.4.1 mtc]$ ps -ef|grep udev
root      1039     1  0 14:54 ?        00:00:00 /sbin/udevd --daemon
mtc       4010  4004  0 14:57 pts/3    00:00:00 grep udev

不是怎么判断是不是udev管理?还有可能是其他什么方式管理?

请问还有什么其他方法吗?

[ 本帖最后由 kyle218 于 2008-9-2 15:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP