linux-文件系统管理09-盘符漂移问题

文档主要总结于网络+加上自己的测试:
http://blog.chinaunix.net/uid-20196318-id-4009633.html

本次遇到的问题,热拔插备份硬盘后,系统启动进入emergency_mode,不能正常工作,因为fstab里面挂载的盘符变动了。

1.简介
Linux管理多块磁盘时(以sata盘为例),会按磁盘加载的顺序依次给磁盘命名为/dev/sda, /dev/sdb… 这种命名规则就会导致,一块磁盘在发生热插拔或系统重启后,盘符可能发生变化,会影响到一些依赖磁盘盘符工作的应用程序,比如fstab里按盘符名来挂载。要解决磁盘盘符漂移问题,一劳永逸的方法就是将磁盘槽位与盘符名做绑定;淘宝内核组的三百同学针对ali内核,添加了磁盘绑定的补丁。如果只针对磁盘挂载问题,可通过按标签或UUID挂载的方式解决,下文将简单介绍下方案。

2.方案一

如下所示的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查询到。

3.方案二

设置标签后,如果磁盘上的文件系统被重新格式化,则其原来设置的标签也就不复存在了,这也正是标签机制不足的地方;如果要解决这个问题,可通过在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

注:使用noatime属性优化Linux文件系统读取性能
当文件被创建,修改和访问时,Linux系统会记录这些时间信息。当系统的读文件操作频繁时,记录文件最近一次被读取的时间信息,将是一笔不少的开销。所以,为了提高系统的性能,我们可以在读取文件时不修改文件的atime属性。可以通过在加载文件系统时使用notime选项来做到这一点。当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。由于写操作相对读来说要更消耗系统资源,所以这样设置可以明显提高服务器的性能。注意wtime信息仍然有效,任何时候文件被写,该信息仍被更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值