如何解决linux重启或重新插入硬盘,linux盘符漂移移问题

linux-文件系统管理09-盘符漂移问题
linux-文件系统管理09-盘符漂移问题
linux的基本操作
文档主要总结于网络+加上自己的测试:
本次遇到的问题,热拔插备份硬盘后,系统启动进入emergency_mode,不能正常工作,因为fstab里面挂载的盘符变动了。
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
defaults,noatime 0 0
LABEL=disk2 /data/disk2
defaults,noatime 0 0
接下来的问题就是如何给磁盘设置标签,针对ext系列的文件系统,可通过e*label来设置标签;也可在磁盘format时设置标签。
mke4fs /dev/sda -L disk1
或者 mke4fs /dev/ e4label /dev/sda disk1
通过上述设置后,磁盘/dev/sda就拥有了标签disk1,在fstab里挂载拥有disk1标签的磁盘,即挂载/dev/sda,即使这块磁盘的盘符发生了变化,由于其标签没变,fstab也能正确的将其挂载;通过mke4fs或e4label设置的标签,标签实际上是跟文件系统绑定的,是文件系统超级块的一部分,可通过tune4fs查询到。
设置标签后,如果磁盘上的文件系统被重新格式化,则其原来设置的标签也就不复存在了,这也正是标签机制不足的地方;如果要解决这个问题,可通过在fstab里按UUID来挂载磁盘,UUID对于磁盘来说是不变的,不论其盘符、标签是否变化;但使用UUID的缺陷在于灵活性不足,不利于大批量部署。
UUID=356fdf58--9a09-c8a6 /data/disk1
defaults,noatime 0 0
UUID=3b93fbad-bea2-4cbb-9a76-b /data/disk1
defaults,noatime 0 0
注:使用noatime属性优化Linux文件系统读取性能
当文件被创建,修改和访问时,Linux系统会记录这些时间信息。当系统的读文件操作频繁时,记录文件最近一次被读取的时间信息,将是一笔不少的开销。所以,为了提高系统的性能,我们可以在读取文件时不修改文件的atime属性。可以通过在加载文件系统时使用notime选项来做到这一点。当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。由于写操作相对读来说要更消耗系统资源,所以这样设置可以明显提高服务器的性能。注意wtime信息仍然有效,任何时候文件被写,该信息仍被更新。
我的热门文章
即使是一小步也想与你分享博客访问: 3539152
博文数量: 3911
博客积分: 6409
博客等级: 准将
技术积分: 15939
注册时间:
认证徽章:
迷彩 潜伏 隐蔽 伪装
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
在RHEL 6中安装新的SCSI设备后,可能出现盘符漂移情况,如原来系统盘所在的盘符为/dev/sda,加入新设备,重启系统后,盘符变为最后一个,如/dev/ssda。
盘符漂移原因
Linux内核中,SCSI硬盘盘符的分配与驱动扫描到的硬盘先后顺序有关,即第一块扫描到的硬盘盘符为/dev/sda,第二块盘符为/dev/sdb … 依次类推。
一般情况下,驱动扫描到的硬盘顺序与不同类型SAS/RAID控制器驱动加载顺序有关。如先加载megaraid_sas驱动,则该RAID控制器下的硬盘会首先分配盘符,即/dev/sda所对应的硬盘在该RAID控制器下。若先加载FC驱动,则FC下面的硬盘会首先得到盘符,此时/dev/sda就在FC控制器下面的硬盘。
RHEL 6系统中,添加新设备后,发生盘符漂移的原因为SAS/RAID控制器的驱动加载顺序发生了变化。而加载顺序是udev机制配置文件决定。
盘符漂移解决办法
在intramfs内核启动文件中,我们可以看到cmdline/目录下的启动脚本01parse-kernel.sh。在通过udev机制加载驱动前,先执行该脚本。在该脚本中,可以看到解析内核参数rdloaddriver,即内核先加载参数中的rdloaddriver。
&[root@RH2285 cmdline]# ls
01parse-kernel.sh& 10parse-resume.sh&&&& 20parse-blacklist.sh& 30parse-crypt.sh&&&&&&&&& 30parse-lvm.sh
01version.sh&&&&&& 10parse-root-opts.sh& 20parse-i18n.sh&& &&&&30parse-dmsquash-live.sh& 95parse-block.sh
[root@RH2285 cmdline]#
[root@RH2285 cmdline]# cat 01parse-kernel.sh
for p in $(getargs rdloaddriver=); do
&&&&&& modprobe $p
盘符发生漂移的机器上,执行驱动加载顺序即可。如先加载megaraid_sas驱动,再加载qla4xxx驱动。
title Red Hat Enterprise Linux Server (2.6.32-220.el6.x86_64)
&&&&&& root (hd0,2)
& && kernel& /boot/vmlinuz-2.6.32-220.el6.x86_64 ro&rdloaddriver=megaraid_sasrdloaddriver=qla4xxx &root=UUID=d44cb995-39d0-803b3b9d4b
&&&&&& initrd /boot/initramfs-2.6.32-220.el6.x86_64.img
原文引用:
阅读(141) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。Linux系统怎么修改磁盘参数(名称、盘符等等)
作者:佚名
字体:[ ] 来源:互联网 时间:05-27 16:05:25
有时候会涉及到对磁盘参数的修改,这些参数包括磁盘的名称、盘符还有磁盘日志和其他磁盘运行时的参数,下面教大家如何修改磁盘参数,感兴趣的朋友可以看看
  使用Linux系统的过程中,有时候会涉及到对磁盘参数的修改,这些参数包括磁盘的名称、盘符还有磁盘日志和其他磁盘运行时的参数。那么怎么Linux系统磁盘参数应该修改呢?
  在Linux下面我们都知道可以用相应的档案代表一个装置,比如 /dev/sdb1代表sdb硬盘的第一个分隔槽,该装置通过major和minor来标示对应代替的装置
  brw-rw&- 1 root disk 8, 0 5月 12 20:16 /dev/sda
  brw-rw&- 1 root disk 8, 1 5月 12 19:48 /dev/sda1
  brw-rw&- 1 root disk 8, 10 5月 12 19:48 /dev/sda10
  brw-rw&- 1 root disk 8, 11 5月 12 19:48 /dev/sda11
  brw-rw&- 1 root disk 8, 12 5月 12 19:48 /dev/sda12
  brw-rw&- 1 root disk 8, 13 5月 12 19:48 /dev/sda13
  brw-rw&- 1 root disk 8, 2 5月 12 19:48 /dev/sda2
  brw-rw&- 1 root disk 8, 3 5月 12 19:48 /dev/sda3
  brw-rw&- 1 root disk 8, 4 5月 12 19:48 /dev/sda4
  brw-rw&- 1 root disk 8, 5 5月 12 19:48 /dev/sda5
  brw-rw&- 1 root disk 8, 6 5月 12 19:48 /dev/sda6
  brw-rw&- 1 root disk 8, 7 5月 12 19:48 /dev/sda7
  brw-rw&- 1 root disk 8, 8 5月 12 19:48 /dev/sda8
  brw-rw&- 1 root disk 8, 9 5月 12 19:48 /dev/sda9
  root@qeesung-laptop:/media# ll /dev/sdb*
  brw-rw&- 1 root disk 8, 16 5月 12 20:16 /dev/sdb
  brw-rw&- 1 root disk 8, 17 5月 12 20:25 /dev/sdb1
  brw-rw&- 1 root disk 8, 18 5月 12 20:18 /dev/sdb2
  linux内核就是通过对应的major和minor来认识对应的设备的
  device namemajorminor
  /dev/sdb80-15
  /dev/sdba816-31
  mknod命令
  这个命令主要是用来创建一个设备文件的(make block or character special files)
  mknod [OPTION]。。. NAME TYPE [MAJOR MINOR]
  其中类型主要有:
  - b block块设备
  - c char字符设备
  - p pipe管道设备
  使用示例:
  新建一个管道文件
  #mknod pipeFile p
  #echo this is a test line 》》 pipeFile
  #cat pipeFile
  --------------------------------------------------------------------------------
  新建一个块文件
  #mknod blockFile b 8 100
  --------------------------------------------------------------------------------
  新建一个字符文件
  #mknod charFile c 4 100
  最终会有三个文件
  brw-r&r& 1 root root 8, 100 5月 12 21:15 blockFile
  crw-r&r& 1 root root 4, 100 5月 12 21:16 charFile
  prw-r&r& 1 root root 0 5月 12 21:12 pipeFile|
  --------------------------------------------------------------------------------&
  e2label命令
  在linux下面,每一个分隔槽都可以指定一个对应的label用来标示这个分隔槽,这点好比windows下面的C盘D盘一样。如果磁盘的分隔槽指定了label,那么就会咋/media目录下面按照label的名字挂载,如果没有指定label,那么将会按照分割槽的UUID在/media目录下面挂载
  在linux下面可以可以通过e2label命令该指定对应分隔槽的label是什么,指定label有一个好处就是label不会随着磁盘文件名的改变而改变,我们知道在linux下面磁盘的挂载顺序决定了磁盘的文件名,比如你先挂载SATA磁盘1,那么磁盘1的设备名字就是 /dev/sda,要是你在挂在SATA磁盘2滞后再挂载磁盘1,那么磁盘1的磁盘文件就是/dev/sdb。。。但是就算不管磁盘文件名是怎么变换的,对应的分隔槽label是不会改变的
  使用e2label命令:
  e2label /dev/sdb1 &newLabelName&
  --------------------------------------------------------------------------------
  tune2fs命令
  tune2fs命令用途很大,下面是一些基本用法
  - -l 相当于dumpe2fs -h 显示分隔槽的superBlock内容
  - -L 相当于e2label改变一个分隔槽的label
  - -J将ext2文件格式转换为ext3带有日志的文件格式
  具体更多用法还是man一下好了
  --------------------------------------------------------------------------------
  文件系统的自动挂载
  我们可以通过更改在/etc/fstab下面的数据来改变系统每次开机自动挂载的文件系统,下面是/etc/fstab/文件里面的东西:
  这个例子里面的文件系统挂在/home目录下面,没一行信息标示开机自动挂载的文件系统,每一项都以空格来区分,每一项的具体含义为:
  - file system:对应的分隔槽,是UUID或者是label名字
  - mount point:挂载点,一定必须是目录,而且根目录/一定要优先于所有文件系统挂载
  - type:文件系统的类型
  - options:文件系统的挂载参数,有:
  arg1arg2描述
  usernouser普通用户是否可以挂载文件系统
  asyncsync磁盘是否以异步的方式读写
  autonoauto是否可以自动挂载,就是mount -a
  rwro文件系统是只读的还是可以读写的
  suidnosuid是否支持suid/sgid的文件和目录
  - dump:标示是否对文件系统进行dump备份:0标示不做备份,1标示每天做备份,2标示不定期的做备份
  - pass:用fsck来检测文件系统是否有问题,0标示不检测,1标示最先检测(一般是根目录),2表示需要检测,只是在1检测之后检测!
  现在假设我们需要对文件系统/dev/sdb1在开机的时候自动以只读的方式挂载到/media/sdb1目录下面,那么我们就需要在/etc/fstab下面写入;
  /dev/sdb1 /media/sdb1 ext4 ro 1 2
  接下来我们试一下mount -a,发现文件系统自动以只读的形式挂载到了/media/sdb1目录下面了,表明我们没有写错
  注意:要是你在没有检测自己是否新增的fstab里面的条目书写是否正确就匆匆的进行重启,那么就有可能开机无法成功而进入到单人模式之中,这个时候你就需要mount -n =o remount.rw /对根目录重新挂载,然后我们再修改/etc/fstab文件。
  以上就是Linux系统怎么修改磁盘参数的介绍了,修改磁盘参数的命令还有很多,这里就不一一列举了。
大家感兴趣的内容
12345678910
最近更新的内容& 解决linux硬盘挂载错误的方法
最近做项目的时候,发现公司的tocmat的老是死机,通过日志分析之后发现是服务器硬盘已经用完,最后对硬盘进行了挂载,具体的挂载方法可以参考这篇博文:,结果执行时出现了一点错误,最后换了一个挂载的文件夹,最后挂载成功了,结果之前的也成功了,导致硬盘挂载了两个文件夹上,给一个文件夹传东西时,另外一个文件夹同样会有一模一样的一份,具体如下图所示:
df -h命令查看硬盘的信息:
挂载数据盘的两个文件夹目录
其实挂载硬盘的信息在配置文件/etc/fstab文件中,只需要修改此文件即可修改硬盘的挂载信息,如下图所示:
编辑fstab文件
修改文件中/dev/xvdb1 /mnt ext3 defaults 0 0 即可(在修改之前最好对此文件进行备份),如果挂载两次则硬盘/dev/xvdb1 会对应有两条挂载信息,此时删除一条即可,修改完成之后保存文件,再使用df查看硬盘的信息
查看时,如果硬盘的挂载信息还是没有改变,此时需要重启下服务器,重启后就变了,重启命令 reboot
文章作者:
本文地址:
版权所有 & 转载时必须以链接形式注明作者和原始出处!
或许你会感兴趣的文章
- 36,934 views - 31,532 views - 24,746 views - 18,608 views - 17,908 views - 16,443 views
文章数:219
评论数:336

我要回帖

更多关于 linux盘符漂移 的文章

 

随机推荐