如何解决Linux系统盘符飘移问题

Q:

什么是盘符漂移?盘符漂移导致的影响有哪些?有哪些方式可以解决盘符漂移引起的问题?

A:

  1. 什么是盘符漂移?在Linux系统中,若存在多块硬盘,通常内核分配盘符的顺序是/dev/sda、/dev/sdb、/dev/sdc……。在系统启动过程中,内核会安装扫描到硬盘的顺序分配盘符。在系统启动后,热插拔硬盘,系统会顺序分配盘符。在同一个硬盘槽位,每次插入硬盘后,在系统中的盘符都可能不一致。例如,第一次插入时,盘符可能为/dev/sdb,将硬盘拔出,再次插入硬盘,盘符可能变为/dev/sde,出现盘符漂移。若系统连接阵列,由于LUN上报的顺序,导致每次扫LUN的结果,也可能不一致,出现盘符漂移。若系统连接阵列,当系统启动时,也可能由于驱动加载顺序的原因,导致本地盘与阵列盘出现换位(例如,阵列没有LUN映射时,本地盘盘符是/dev/sda;当阵列有LUN映射时,本地盘符生成在了阵列LUN之后),出现盘符漂移。
  2. 盘符漂移导致的影响有哪些?
    1. 如果是系统盘,出现漂移,会导致系统无法启动;
    2. 业务盘如果是对盘符进行操作,盘符漂移,会引起业务问题。
  3. 有哪些方式可以解决盘符漂移引起的问题?
    1. 如果系统盘漂移,导致了系统无法启动;或者业务盘漂移,导致业务失败,可使用UUID绑定方式,规避盘符漂移带来的影响。例如:在/boot/grub/menu.lst或/etc/fstab文件中添加配置条目,使用UUID实现分区文件系统的挂载。例如root=UUID=19e9dda3-5a38-484d-a9b0-fa6b067d0331或UUID=894d76a6-b175-4eb1-89e5-3fd8d146eab7 /archive ext3 defaults 0 0(ls –l /dev/disk/by-* ,可以查询系统设备绑定信息)
    2. 如果系统使用Device Mapper Multipath对物理盘进行管理,可使用Multipath的盘符绑定设置,避免盘符的漂移和多台主机间盘符一致性的问题。例如:在/etc/multipath.conf 文件中,添加multipaths {multipath {wwid 360060e80058e980000008e9800000007alias mpath0}}使用阵列LUN的WWN号,与特定盘符进行绑定。
    3. 如果阵列相关驱动(FC或iSCSI)先于本地盘驱动加载,会导致本地盘漂移到阵列盘后边(若不可接受),可以调整系统驱动的加载顺序(系统启动镜像),解决阵列LUN与本地盘的漂移问题。例如:SuSE系统,在/etc/sysconfig/kernel文件中可观察模块加载顺序。Redhat 6之前版本,在/etc/modprobe.conf 文件中可观察模块启动顺序。Redhat 6系统,使用dracut加载驱动,在/usr/share/dracut/modules.d目录下可查看。可修改menu.lst文件,通过在启动项中添加类似“rdloaddriver=megaraid_sas , rdloaddriver=megaraid_sas”的参数可指定驱动优先被加载。
    4. 可以使用udev为设备别名,建立符号链接的方式,避免盘符漂移对应用产生影响。

下面介绍几种方法来获得UUID.

  1.最简单的方法就是使用blkid命令,它主要用来对系统的块设备(包括交换分区)所使用的文件系统类型,LABEL,UUID等信息查询. 使用这个命令需要安装e2fsprogs包.

  复制代码

  代码如下:

  root@10.1.1.200:~# dpkg -l | grep e2fsprogs

  ii e2fsprogs 1.41.3-1 ext2/ext3/ext4 file system utilities

  ii libuuid-perl 0.02-4 Perl extension for using UUID interfaces as defined in e2fsprogs

  root@10.1.1.200:~# blkid

  /dev/sda1: UUID=”b20e80f1-c88d-4918-9d9b-75cd7906629e” TYPE=”ext3″

  /dev/sda5: TYPE=”swap” UUID=”1fb3d17b-b2fe-470d-b39c-f00c4a30efbf”

  /dev/sda6: UUID=”c7050200-7efb-468c-81d1-a3add309bee1″ TYPE=”ext3″ SEC_TYPE=”ext2″

  /dev/sda7: UUID=”934e4e22-3431-4707-8d47-dca47e76f448″ TYPE=”xfs”

  /dev/hioa: UUID=”de0af117-ad92-4867-aa21-3e7d423e8864″ TYPE=”xfs”

  root@10.1.1.200:~# blkid /dev/sda1

  /dev/sda1: UUID=”b20e80f1-c88d-4918-9d9b-75cd7906629e” TYPE=”ext3″

  root@10.1.1.200:~# cat /etc/blkid.tab

  /dev/sda1

  /dev/sda5

  /dev/sda6

  /dev/sda7

  /dev/hioa

  2.通过浏览/dev/disk/by-uuid/下的设备文件信息.

  复制代码

  代码如下:

  root@10.1.1.200:~# ls -l /dev/disk/by-uuid/

  total 0

  lrwxrwxrwx 1 root root 10 2013-03-19 11:01 1fb3d17b-b2fe-470d-b39c-f00c4a30efbf -> ../../sda5

  lrwxrwxrwx 1 root root 10 2013-03-19 11:01 934e4e22-3431-4707-8d47-dca47e76f448 -> ../../sda7

  lrwxrwxrwx 1 root root 10 2013-03-19 11:01 b20e80f1-c88d-4918-9d9b-75cd7906629e -> ../../sda1

  lrwxrwxrwx 1 root root 10 2013-03-19 11:01 c7050200-7efb-468c-81d1-a3add309bee1 -> ../../sda6

  lrwxrwxrwx 1 root root 10 2013-03-19 11:02 de0af117-ad92-4867-aa21-3e7d423e8864 -> ../../hioa

  root@10.1.1.200:~# ls -l /dev/disk/by-uuid/ | grep sda1 | awk ‘{print $8}’

  b20e80f1-c88d-4918-9d9b-75cd7906629e