Linux盤符漂移問題


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM