Linux下磁盤設備文件(sda,sdb,sdc….)變化的問題

  在Linux下往往會碰到這樣的問題,磁盤的設備文件,比如/dev/sda, sdb, sdc等等在某些情況下會混亂掉,比如sda變成了sdb或者sdc變成了sdb等等,這樣無形中會導致磁盤設備管理的混亂,最常見的比如Linux文件系統的啓動問題。很多人在遇到這種問題的時候都去找磁盤、陣列廠家,懷疑是他們的問題,其實這種底層的磁盤(單個磁盤或者RAID陣列)和Linux下磁盤設備文件的映射並不是磁盤、陣列廠家來決定的,而是Linux內核自身的原因。

       目前Linux內核對於這種磁盤設備的映射基本上取決於三個順序,一是磁盤驅動程序的加載;二是主機PCI插槽的監測;三是磁盤本身的監測,先來的當然是a,以此類推。所以,在出現熱插拔了某些設備、重啓等特殊情況下,實際磁盤在Linux下映射的設備文件可能由於這種“排隊”的原因而發生改變,而這種底層“偷偷的”變化有時候會讓管理員犯一些低級錯誤。

       這是Linux Kernel的限制,所以目前還沒辦法來正面的克服應對,但有兩個“迂迴戰術”的辦法來減少可能出現的問題,一個是採用UUID設備唯一識別的方法,另一個是採用對設備卷做Label標識的辦法。

一、 UUID (globally unique identifier),唯一的身份識別,是採用SCSI Inquiry命令的Page 83信息來映射磁盤設備的。例如我們可以在Linux下查詢一些磁盤設備的UUID標識代碼。

bash# ls -la /dev/disk/by-id
total 0
drwxr-xr-x 2 root root 280 Mar 11 12:29 .
drwxr-xr-x 5 root root 100 Mar 11 12:28 ..
lrwxrwxrwx 1 root root   9 Mar 11 12:29 edd-int13_dev80 -> ../../sda
lrwxrwxrwx 1 root root  10 Mar 11 12:29 edd-int13_dev80-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Mar 11 12:29 edd-int13_dev80-part3 -> ../../sda3
lrwxrwxrwx 1 root root  10 Mar 11 12:29 edd-int13_dev80-part4 -> ../../sda4
lrwxrwxrwx 1 root root  10 Mar 11 12:29 edd-int13_dev80-part5 -> ../../sda5
lrwxrwxrwx 1 root root  10 Mar 11 12:29 edd-int13_dev80-part6 -> ../../sda6
lrwxrwxrwx 1 root root   9 Mar 11 12:28 scsi-3600050e03d7c67007bf400009f890000 -
> ../../sda
lrwxrwxrwx 1 root root  10 Mar 11 12:28 scsi-3600050e03d7c67007bf400009f890000-p
art1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Mar 11 12:28 scsi-3600050e03d7c67007bf400009f890000-p
art3 -> ../../sda3
lrwxrwxrwx 1 root root  10 Mar 11 12:28 scsi-3600050e03d7c67007bf400009f890000-p
art4 -> ../../sda4
lrwxrwxrwx 1 root root  10 Mar 11 12:28 scsi-3600050e03d7c67007bf400009f890000-p
art5 -> ../../sda5
lrwxrwxrwx 1 root root  10 Mar 11 12:28 scsi-3600050e03d7c67007bf400009f890000-p
art6 -> ../../sda6

 

    找到了磁盤設備唯一的UUID代碼後,就可以加到/etc/grub.conf/etc/fstab中,這樣即使初始的系統盤sda變成了sdb,但Linux和文件系統的啓動加載都是按照UUID來的,所以上層也不會受到影響,例如,

    /etc/grub.conf系統啓動入口中做以下更改:

            kernel /boot/vmlinuz-2.6.27.7 root=/dev/disk/by-id/scsi-3600050e03d7c67007bf400009f890000-part1

 

    /etc/fstab文件系統啓動入口中做以下更改:

            /dev/disk/by-id/scsi-3600050e03d7c67007bf400009f890000-part1 /          ext3   1  1

            /dev/disk/by-id/scsi-234892819987c8f828473829becf38289-part2 /home      ext3   1  1

 

二、 第二種算是比較老式的解決方法,即對磁盤卷設置Label標籤,同樣的道理,系統啓動的時候只看標籤,不看底層的sda/sdb等設備號,所以也不會影響到系統、文件系統的啓動。例如,

   使用e2label命令對sda1sdb1設置標籤:

       /sbin/e2label /dev/sda1 myroot

       /sbin/e2label /dev/sdb1 myhome

 

    之後在 /etc/grub.conf 系統啓動入口中做以下更改:

            kernel /boot/vmlinuz-2.6.29 ro root=LABEL=myroot

 

    /etc/fstab文件系統啓動入口中做以下更改:

            LABEL=myroot      /      ext3  defaults  1 1

            LABEL=myhome  /home  ext3  defaults  1 1

 

      當然,以上兩種都是爲了不影響系統和文件系統的啓動採用的變通方法,在實際的系統管理時還是要密切注意底層設備的變化,否則如果出現了磁盤分區誤刪除的事情罪過可就大了L

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章