Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3505206
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: LINUX

2013-11-25 19:43:24

Linux管理多块磁盘时(以sata盘为例),会按磁盘加载的顺序依次给磁盘命名为/dev/sda, /dev/sdb... 这种命名规则就会导致,一块磁盘在发生热插拔或系统重启后,盘符可能发生变化,会影响到一些依赖磁盘盘符工作的应用程序,比如fstab里按盘符名来挂载。

要解决磁盘盘符漂移问题,一劳永逸的方法就是将磁盘槽位与盘符名做绑定;淘宝内核组的三百同学针对ali内核,添加了磁盘绑定的补丁。

如果只针对磁盘挂载到问题,可通过按标签或UUID挂载的方式解决,下文将简单介绍下方案。

如下所示的fstab,系统启动时,会自动执行每一行挂载动作,将/dev/sda挂载到/data/disk1,其它依此类推。如果磁盘发生热插拔,第一块磁盘的盘符由原来的/dev/sda变成了/dev/sdc,那么fstab就不能正确挂载第一块磁盘。

/dev/sda /data/disk1 ext4 defaults,noatime 0 0 
/dev/sdb /data/disk2 ext4 defaults,noatime 0 0

为了保证在发生盘符漂移时,磁盘仍能正常挂载,首先对fstab做如下改进,按磁盘标签来挂载;比如第一行的含义是,将标签为disk1的磁盘挂载到/data/disk1。

LABEL=disk1 /data/disk1    ext4    defaults,noatime 0 0
LABEL=disk2 /data/disk2    ext4    defaults,noatime 0 0

接下来的问题就是如何给磁盘设置标签,针对ext系列的文件系统,可通过e*label来设置标签;也可在磁盘format时设置标签。

mke4fs /dev/sda -L disk1 
或者 mke4fs /dev/sda; e4label /dev/sda disk1

通过上述设置后,磁盘/dev/sda就拥有了标签disk1,在fstab里挂载拥有disk1标签的磁盘,即挂载/dev/sda,即使这块磁盘的盘符发生了变化,由于其标签没变,fstab也能正确的将其挂载;通过mke4fs或e4label设置的标签,标签实际上是跟文件系统绑定的,是文件系统超级块的一部分,可通过tune4fs查询到。

设置标签后,如果磁盘上的文件系统被重新格式化,则其原来设置的标签也就不复存在了,这也正是标签机制不足的地方;如果要解决这个问题,可通过在fstab里按UUID来挂载磁盘,UUID对于磁盘来说是不变的,不论其盘符、标签是否变化;但使用UUID的缺陷在于灵活性不足,不利于大批量部署。

UUID=356fdf58-6923-43d5-9a09-349159c7c8a6 /data/disk1    ext4    defaults,noatime 0 0 
UUID=3b93fbad-bea2-4cbb-9a76-b4885924d287 /data/disk1    ext4    defaults,noatime 0 0


转载请注明转自: Yun Notes , 本文固定链接: Linux盘符漂移问题

阅读(37419) | 评论(8) | 转发(6) |
给主人留下些什么吧!~~

mindlesslcc2016-09-01 15:39:25

在内核层修改应该比较复杂吧。。

linuxnerd2013-12-02 13:19:08

uuid还是会变的

niao59292013-11-27 11:24:40

zyd_cu:其他的文件系统没了解过,可能也有标签的机制吧。 或者直接按照UUID来挂载

好像木有的。反正这几年我一直没有找到相关的帖子。包括很多英文的也没有见。不过现在自己DIY的RAID10设备也就是在非常特殊的时候才需要重新启动下。需要手动按顺序来打开USB硬盘盒的电源。之后起自己写的起RAID10以及LVM的脚本。呵呵。找着了能方便点,我就可以写成文档交给其他哥们去管理了。哈哈

回复 | 举报

zyd_cu2013-11-27 10:16:15

xdsnet:其实还是要看系统内核/模块支持不,反正比较新的发行版都是用uuid进行挂载点(特别是安装系统后默认的挂载方式)。而且uuid之类的挂载方式还支持到分区,一般分区就是盘点uuid-分区序号组成新的uuid,这些在内核/模块识别到设备的时候就可以标志出来用于挂载了。所以niao5929的问题其实是因为软raid造成的问题,这个可能不完全在这个讨论范围中了,建议你可以升级硬件了,现在含硬raid支持的硬盘盒也不是太贵了,你可以考虑一下了。

的确是这样

回复 | 举报

zyd_cu2013-11-27 10:13:34

niao5929:问题是我用的是非EXT文件系统哦。硬盘是被定义为RAID1文件系统的。咋整哦。这个问题已经困扰我4年多了。我自己用高配的台机和硬盘盒做的RAID10设备,现在就是每次系统启动后需要手动按顺序来开启硬盘盒。这样盘序才能对上。才可以使用自己写的脚本来启动RAID10服务。有解决办法吗??

其他的文件系统没了解过,可能也有标签的机制吧。 或者直接按照UUID来挂载

回复 | 举报