Linux下的SCSI设备都是按照设备的发现顺序命名的,对于磁盘盘符名称就是sda,sdb,sdc等等。存储设备一般都配有很多块磁盘,盘符名称和槽位号没有对应关系,当磁盘插入,拔出时对应的盘符可能会变化。这给使用和运维带来很多不便。

对于SATA磁盘可通过修改sd_mod模块中的sd_probe(drivers/scsi/sd.c)来完成“磁盘槽位和盘符”的绑定。

/**

*sd_probe - called during driver initialization and whenever a

*new scsi device is attached to the system. It is called once

*for each scsi device (not just disks) present.

*@dev: pointer to device object

*

*Returns 0 if successful (or not interested in this scsi device

*(e.g. scanner)); 1 when there is an error.

*

*Note: this function is invoked from the scsi mid-level.

*This function sets up the mapping between a given

* (found in sdp) and new device name

*(e.g. /dev/sda). More precisely it is the block device major

*and minor number that is chosen here.

*

*Assume sd_attach is not re-entrant (for time being)

*Also think about sd_attach() and sd_remove() running coincidentally.

**/

static int sd_probe(struct device *dev)

{

struct scsi_device *sdp = to_scsi_device(dev);

struct scsi_disk *sdkp;

struct gendisk *gd;

u32 index;

int error;

error = -ENODEV;

if (sdp->type != TYPE_DISK && sdp->type != TYPE_MOD && sdp->type != TYPE_RBC)

goto out;

SCSI_LOG_HLQUEUE(3, sdev_printk(KERN_INFO, sdp,

"sd_attach\n"));

error = -ENOMEM;

sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);

if (!sdkp)

goto out;

gd = alloc_disk(SD_MINORS);

if (!gd)

goto out_free;

do {

if (!ida_pre_get(&sd_index_ida, GFP_KERNEL))

goto out_put;

spin_lock(&sd_index_lock);

error = ida_get_new(&sd_index_ida, &index);

spin_unlock(&sd_index_lock);

} while (error == -EAGAIN);

if (error)

goto out_put;

if (index >= SD_MAX_DISKS) {

error = -ENODEV;

sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name space exhausted.\n");

goto out_free_index;

}

error = sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN);

if (error)

goto out_free_index;

......

}

具体负责给gendisk分配磁盘名称的就是 sd_format_disk_name,只需修改这个函数即可。为了完成槽位和盘符绑定我们需要一个对应表,这张表可以根据系统中的一些不变量,如磁盘的SCSI host号来确定对应关系。

如下是笔者根据scsi host(针对某款特定主板)确定盘符对应关系的Patch:

error = sd_format_disk_name("sd", sdp->host->host_no, gd->disk_name, DISK_NAME_LEN);

static int sd_format_disk_name(char *prefix, int host_no, char *buf, int buflen)

{

char *begin = buf + strlen(prefix);

*begin = 'a' + host_no;

*(begin + 1) = '\0';

memcpy(buf, prefix, strlen(prefix));

return 0;

}

作者:sage meng

出处:http://blog.csdn.net/lkkey80/article/details/50263083

linux硬盘盘符和槽位,磁盘槽位和盘符绑定方案相关推荐

  1. c盘是不是越大越好_Windows系统磁盘分区,C盘划分多大最合适?不是越大越好!...

    在使用电脑的时候普遍需要对磁盘进行分区,那么在多个分区共存的情况下,C盘分成多少合适呢?在回答这个问题之前,我们先来了解一下关于磁盘分区的一些基本知识. 磁盘为什么要分区? 系统装C盘,软件放D盘,E ...

  2. esx linux 硬盘 扩容,ESX虚拟机添加新磁盘并扩容逻辑卷

    查看有哪些iscsi通道 ls /sys/class/scsi_host/ 扫描 echo "- – -" > /sys/class/scsi_host/host0/scan ...

  3. 计算机磁盘管理分盘可以撤销吗,电脑磁盘出现随便分盘不合理,怎么样重新分盘...

    之前在刚刚安装系统时,没有考虑清楚就把磁盘随便分盘了,到了后面就发现不够用了,于是就想要重新分盘一下,可是很多网友不知道笔记本电脑如何分盘?为此可可赶紧整理了Win7笔记本电脑分盘的方法来帮助大家. ...

  4. 使用u盘时要与计算机usb接口相连,u盘是通过什么接口与电脑交换数据的?

    目前U盘主要是通过"USB"接口与电脑交换数据的.U盘,全称USB闪存驱动器,是一种使用USB接口的无须物理驱动器的微型高容量移动存储产品,通过USB接口与电脑连接实现即插即用. ...

  5. 修改服务器磁盘槽位编号,centos7 盘符变动 绑定槽位

    服务器下的硬盘主有机械硬盘.固态硬盘以及raid阵列,通常内核分配盘符的顺序是/dev/sda./dev/sdb- -.在系统启动过程中,内核会按照扫描到硬盘的顺序分配盘符(先分配直通的,再分配阵列) ...

  6. win10将硬盘作为存储池删除读不到盘符_请将磁盘插入驱动器

    在计算机中双击U盘的盘符,U盘无法打开并提示"请将磁盘插入驱动器",U盘中的数据无法访问.遇到这种情况,不要着急,今天小编就和大家一起来看下出现此问题的原因以及解决方法. U盘提示 ...

  7. 计算机硬盘位显示none,电脑磁盘变成了空闲盘怎么办,特急?

    满意答案 akchl 推荐于 2020.03.14 采纳率:53%    等级:8 已帮助:760人 换一个分区程序,在对硬盘分区进行操作的时候,如果遇到意外原因突然死机或断电,这时再使用原先的工具就 ...

  8. pe制作linux硬盘的镜像文件_制作winPE、Linux、maxdos三合一U盘启动盘

    http://kpjack.blog.51cto.com/627289/387137 目的:实现制作windows xp PE.MAXDOS和Linux三系统引导的U盘.原因是这样的.有时分区表坏了, ...

  9. linux 硬盘相关命令,Linux 磁盘相关命令整理

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 介绍 近来,接触底层的内容多了一些,顺手撸一个 「 磁盘 」 相关主线的命令行备份,记录在这里留作备忘 - 涉及命令ls ...

最新文章

  1. 爱德华·斯诺登:区块链只是新型数据库,比特币终会消失
  2. @Autowire 和 @Resource 注解使用的正确姿势,别再用错的了!!
  3. python【蓝桥杯vip练习题库】ALGO-55 矩阵加法
  4. topcoder-SRM565-div2-第二题-500分--搜索/动态规划
  5. SPOJ3931(N个点形成三角形的最大面积)
  6. Java加密与解密的艺术~数字证书~模型分析
  7. hdu2795 Billboard 线段树
  8. java建立类的思想_JAVA类和对象创建
  9. Silverlight --- Behavior技术(三)
  10. java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...
  11. Relocation POJ - 2923(01背包+状压dp)
  12. 某程序员求助:简历造假,如今面试通过,要坦白吗?
  13. 【笔记】Oracle删除项目编号多余的数据
  14. asp.net core webAPI学习笔记(三)资源请求
  15. C语言实现简单小游戏---扫雷
  16. (附源码)计算机毕业设计SSM智慧灭火器管理系统
  17. PHP学习案例二 商品价格计算
  18. Java介绍和基础知识
  19. 2015年第六届蓝桥杯省赛Java B组真题+个人题解
  20. 网易网络游戏服务器的构架

热门文章

  1. “金融科技价值——数据驱动金融商业裂变”主论坛精彩纷呈,看企业大佬们眼中的Fintech2.0新时代
  2. 假如有一天我们上不了学了
  3. pandoc实现LaTeX转word+公式格式批量转换
  4. leetcode系列--17.电话号码的字母组合
  5. 【CODE】Unique Paths Word Search (DFS dp 字典树)
  6. 通过Python分析《大秦赋》,我知道了这些
  7. 优酷对上芒果,资本愿意“追光”还是“披荆斩棘”?
  8. Turbo Demo在软件教学课件制作中的应用
  9. sd卡数据恢复软件免费版从哪里可以获得
  10. AntiARP安装时出现windows installer package错误解决方法