linux硬盘盘符和槽位,磁盘槽位和盘符绑定方案
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硬盘盘符和槽位,磁盘槽位和盘符绑定方案相关推荐
- c盘是不是越大越好_Windows系统磁盘分区,C盘划分多大最合适?不是越大越好!...
在使用电脑的时候普遍需要对磁盘进行分区,那么在多个分区共存的情况下,C盘分成多少合适呢?在回答这个问题之前,我们先来了解一下关于磁盘分区的一些基本知识. 磁盘为什么要分区? 系统装C盘,软件放D盘,E ...
- esx linux 硬盘 扩容,ESX虚拟机添加新磁盘并扩容逻辑卷
查看有哪些iscsi通道 ls /sys/class/scsi_host/ 扫描 echo "- – -" > /sys/class/scsi_host/host0/scan ...
- 计算机磁盘管理分盘可以撤销吗,电脑磁盘出现随便分盘不合理,怎么样重新分盘...
之前在刚刚安装系统时,没有考虑清楚就把磁盘随便分盘了,到了后面就发现不够用了,于是就想要重新分盘一下,可是很多网友不知道笔记本电脑如何分盘?为此可可赶紧整理了Win7笔记本电脑分盘的方法来帮助大家. ...
- 使用u盘时要与计算机usb接口相连,u盘是通过什么接口与电脑交换数据的?
目前U盘主要是通过"USB"接口与电脑交换数据的.U盘,全称USB闪存驱动器,是一种使用USB接口的无须物理驱动器的微型高容量移动存储产品,通过USB接口与电脑连接实现即插即用. ...
- 修改服务器磁盘槽位编号,centos7 盘符变动 绑定槽位
服务器下的硬盘主有机械硬盘.固态硬盘以及raid阵列,通常内核分配盘符的顺序是/dev/sda./dev/sdb- -.在系统启动过程中,内核会按照扫描到硬盘的顺序分配盘符(先分配直通的,再分配阵列) ...
- win10将硬盘作为存储池删除读不到盘符_请将磁盘插入驱动器
在计算机中双击U盘的盘符,U盘无法打开并提示"请将磁盘插入驱动器",U盘中的数据无法访问.遇到这种情况,不要着急,今天小编就和大家一起来看下出现此问题的原因以及解决方法. U盘提示 ...
- 计算机硬盘位显示none,电脑磁盘变成了空闲盘怎么办,特急?
满意答案 akchl 推荐于 2020.03.14 采纳率:53% 等级:8 已帮助:760人 换一个分区程序,在对硬盘分区进行操作的时候,如果遇到意外原因突然死机或断电,这时再使用原先的工具就 ...
- pe制作linux硬盘的镜像文件_制作winPE、Linux、maxdos三合一U盘启动盘
http://kpjack.blog.51cto.com/627289/387137 目的:实现制作windows xp PE.MAXDOS和Linux三系统引导的U盘.原因是这样的.有时分区表坏了, ...
- linux 硬盘相关命令,Linux 磁盘相关命令整理
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 介绍 近来,接触底层的内容多了一些,顺手撸一个 「 磁盘 」 相关主线的命令行备份,记录在这里留作备忘 - 涉及命令ls ...
最新文章
- 爱德华·斯诺登:区块链只是新型数据库,比特币终会消失
- @Autowire 和 @Resource 注解使用的正确姿势,别再用错的了!!
- python【蓝桥杯vip练习题库】ALGO-55 矩阵加法
- topcoder-SRM565-div2-第二题-500分--搜索/动态规划
- SPOJ3931(N个点形成三角形的最大面积)
- Java加密与解密的艺术~数字证书~模型分析
- hdu2795 Billboard 线段树
- java建立类的思想_JAVA类和对象创建
- Silverlight --- Behavior技术(三)
- java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...
- Relocation POJ - 2923(01背包+状压dp)
- 某程序员求助:简历造假,如今面试通过,要坦白吗?
- 【笔记】Oracle删除项目编号多余的数据
- asp.net core webAPI学习笔记(三)资源请求
- C语言实现简单小游戏---扫雷
- (附源码)计算机毕业设计SSM智慧灭火器管理系统
- PHP学习案例二 商品价格计算
- Java介绍和基础知识
- 2015年第六届蓝桥杯省赛Java B组真题+个人题解
- 网易网络游戏服务器的构架
热门文章
- “金融科技价值——数据驱动金融商业裂变”主论坛精彩纷呈,看企业大佬们眼中的Fintech2.0新时代
- 假如有一天我们上不了学了
- pandoc实现LaTeX转word+公式格式批量转换
- leetcode系列--17.电话号码的字母组合
- 【CODE】Unique Paths Word Search (DFS dp 字典树)
- 通过Python分析《大秦赋》,我知道了这些
- 优酷对上芒果,资本愿意“追光”还是“披荆斩棘”?
- Turbo Demo在软件教学课件制作中的应用
- sd卡数据恢复软件免费版从哪里可以获得
- AntiARP安装时出现windows installer package错误解决方法