想要讓作業系統運行與檔案讀寫更快更安全,做好磁碟管理是關鍵。磁碟I/O的快與慢雖然主要取決於硬體規格本身,但在同樣規格基礎上的磁碟規劃,架構設計不同也會直接影響到運行的效能與安全,本文將以openSUSE為例,示範如何優化磁碟運作。
早期Linux作業系統之所以不被大多數的電腦玩家與IT工作者愛用的原因之一,就是不友善的操作介面設計,簡單來說,就是那幾乎全命令列模式的管理方式,實在是讓多數人難以上手,因此讓Linux似乎變成一個專為IT高手所設計的操作平台。不過,近年來Linux發展迅速,在視窗介面設計上更是顯而易見,讓友善的桌面操作與應用不再是Microsoft Windows與Mac OS X的專利,而且版本的更新速度不亞於這兩個主流的作業系統,光是這項改進就已經讓許多各領域的IT人才甚至於一般電腦玩家,逐漸踏入了Linux開源應用的世界,因為無論是哪個發行版本的Linux作業系統,都有一個共同的良好基礎,那就是Linux Kernel。
各大主流Linux發行版本在視窗設計上的突破,不禁讓人回想起過去使用命令主控台(Terminal)管理系統的苦日子。當時不僅是一般性的檔案管理、權限配置、軟體套件管理等作業需要使用命令再搭配一連串複雜的參數來完成,就連那磁碟與檔案系統分割區的管理,也全都只能使用執行命令的方式來查詢、設定以及修改。
相較之下,Windows作業系統只要拿起滑鼠點擊,就能夠迅速簡單完成這一些常用的管理工作,不必為瑣碎任務而牢記一堆繁雜的指令。
此外,Windows幾乎每推出一個全新的版本,在磁碟與資料儲存管理技術上就會有一項新的里程碑,像是Windows 8.1與Windows Server 2012 R2中的Storage Spaces功能,能夠將多個磁碟空間配置成一個大型的儲存集區(Storage Pool),並且具備故障容錯的能力,更厲害的是,支援的磁碟類型還包括USB、SATA以及SAS。然而,Linux也非省油的燈,因為它除了可以透過友善的圖形操作介面,來建立與管理本地的磁碟區群組以擴展容量外,還可以建立所謂的跨主機之磁碟區群組,讓資料存放區的容量隨著主機的加入無限延伸,而且相當容易部署與管理。
接下來,就以openSUSE作業系統示範講解關於Linux在磁碟與資料存放管理上的強大功能。
使用磁碟區群組
企業中如果有一些較老舊的主機有安裝多顆的硬碟機,雖然每一顆容量都不大且速度也不快,若是本身有硬體式磁碟陣列(RAID)的容錯保護,建議不妨在其主機上安裝開源的虛擬化平台(例如KVM、VirtualBox),然後規劃多個不同用途的虛擬機器,來繼續提供如郵件封存或是檔案封存的查詢服務,肯定可以為它們發揮最佳的資源使用效益。
只是既然是打算用來作為存放歷史性的檔案資料,那其可用存放空間就不能夠太小,這時候就可以善用Linux磁碟管理中的「磁碟區群組」功能,把所有小容量的虛擬硬碟結合成一個大容量儲存空間,此做法就好像是JBOD(Just Bunch of Disks)一樣,除了容量加大許多外,資料讀寫的速度與安全性仍然與單顆硬碟一樣。其優點就是百分之百容量的使用,而且不必一次把容量給到足,等待需要時再隨時往上遞增即可。
在openSUSE中,只要透過桌面視窗介面即可輕鬆建立「磁碟區群組」。如圖1所示,在「YaST控制中心」中,點選開啟「軟體」分類中的「磁碟分割程式」繼續。
如圖2所示,在「磁碟分割程式」的「Unused Devices」頁面中,可以看到目前已準備好的三顆VMware虛擬硬碟。當然,也可以直接使用實體硬碟來配置。
接著,切換到「Volume Management」頁面中,如圖3所示在預設狀態下不會有任何已存在的磁碟區群組,所以按下〔Add〕按鈕。
如圖4所示,在「新增磁碟區群組」頁面中,先為此設定一個新的命名,然後將想要加入此磁碟區群組的成員硬碟,透過按下〔新增〕按鈕的方式一一加入。如果可用的硬碟數量很多時,建議分開建立多個磁碟區群組,當作不同資訊服務用途的使用,將更有益於往後的維護與管理。例如,將一個磁碟區群組作為內部的檔案共享區,另一個則當作外部雲端硬碟空間的對應存放區等等。至於實體範圍大小的選擇,採用預設值即可。
回到「Volume Management」頁面中,針對剛建立的磁碟區群組,按下滑鼠右鍵並點選快速選單中的【Add Logical Volume】,如圖5所示。
至於未來如果需要調整總容量大小,可以點選右鍵選單中的【Resize】來加入更多的磁碟裝置。如果想打散它們的群組關係,則點選【刪除】,但可別忘了如此一來所有儲存的資料將會遺失。
隨後在如圖6所示的新增邏輯磁區頁面中,輸入唯一的新識別名稱,並選擇磁碟類型。由於一個磁碟區群組中可以建立多個邏輯磁區,因此可以設定讓某些邏輯磁區使用固定大小(Normal Volume),或者採用隨檔案資料的增加而增大的磁區類型(Thin Volume)。
確認好新邏輯磁區的名稱與類型之後,就可以在如圖7所示的頁面中決定所要配給該磁區的大小上限以及Stripes數量與大小。在預設狀態下,將自動給予所有可用的剩餘空間。按下〔下一步〕按鈕繼續。
來到如圖8所示的頁面中,接著設定此邏輯磁區的角色類型,分別有作業系統、資料與應用程式、Swap、Raw Volume。一般來說,都是選擇資料與應用程式(Data and ISV Applications)設定,因為可能會使用此磁區來做為檔案伺服器的共用存放區,或是拿它來作為各類應用程式的資料存放區,例如Mail Server、Web Server以及MySQL Server等等。
如圖9所示,接著在新頁面中選擇準備進行格式化的檔案系統類型以及掛載點的設定。值得注意的是,如果打算使用此磁區來存放KVM或Virtualbox的虛擬硬碟檔案,目前XFS檔案系統會是一個絕佳的選擇,因為它對於處理大檔案讀寫的效能最好。如果是一般的小檔案且數量相當多時,選擇Btrfs檔案系統肯定是最佳選擇。至於若是應用程式與檔案伺服器的混合使用,建議採用Ext4檔案系統。
除了選擇檔案系統類型之外,還可以按下〔Options〕按鈕進一步開啟如圖10所示的頁面,來自訂想要的區塊大小、Inode大小、Inode百分比空間以及排列方式。
在掛載設定的「Fstab Options」頁面中,還能夠配置位於「/etc」路徑下的fstab組態設定檔,如圖11所示。例如,希望讓一般使用者也可以掛載它,或是啟用限額支援功能等等。
回到「Volume Management」頁面之後,會發現剛剛建立好的磁碟區群組以及一個邏輯磁區,如圖12所示。這裡如果還有剩餘的磁碟區群組空間,便可以繼續建立其他用途的邏輯磁區,或是針對任何一個邏輯磁碟按下〔Resize〕按鈕,來修改磁區大小。
完成磁碟區群組以及旗下每一個邏輯磁區的建立之後,便可以如圖13所示開啟檔案管理員(File Manager),來存取磁碟區群組中的每一個邏輯磁區,然後完成各資料夾的建立、權限遮罩設定以及資料夾共用等設定,以便讓相關的使用者、群組或應用程式能夠開始存取。
如果磁碟區群組的邏輯磁碟區大小,沒有一次指派所有可用的空間,但想隨時增加可用的空間大小,除了圖形介面的操作外,也可以執行「lvextend -L +size /dev/vgname/lvname」命令格式來增強邏輯磁碟區的可用大小,例如執行「lvextend -L +10GB /dev/VolGroup01/LogicalVol01」命令,為此邏輯磁碟區群組增加10GB的可用空間。
建立磁碟陣列(RAID)
想要解決檔案資料因硬碟機故障所造成的重要資料遺失問題,最好的做法就是採用硬體式的磁碟陣列架構,並且藉由相關的備份軟體,定期做好資料備份作業。採用硬體式的磁碟陣列架構(Redundant Array of Independent Disks,RAID),其優點在於運行效能較佳,且可以進一步設置自動備援的硬碟(Hot Spare),至於缺點嗎?當然就是建置的成本會相當可觀。
如果想要使用建置成本極低的檔案伺服器,並且還要具備RAID的容錯能力或是讀寫效能的提升,不妨試試Linux作業系統下的軟體式RAID配置,它不需要像早期的Windows(Windows 7、Windows Server 2008/R2、Windows XP或更舊版本)得先將磁碟轉換成動態磁碟類型才能夠開始配置。
如圖14所示,在「Hard Disks」頁面中,可以看到已經事先準備好三顆未使用的VMware虛擬硬碟,打算拿它們來建立存放重要的資料的磁碟陣列。在此必須先為這些磁碟都建立好RAID磁碟架構所需要的分割區類型,所以按下〔Add Partition Type〕按鈕。
接著,跳出「New Partition Type」頁面,如圖15所示點選其中的「主要分割區」,並按下〔下一步〕按鈕。
如圖16所示,來到「New Partition Size」頁面後,必須注意後續每一顆的磁碟分割區的大小最好通通設定成一樣,最簡單的做法就是直接選取「Maximum Size」,以利於之後磁碟陣列的設置,設定完成後按下〔下一步〕按鈕。
接著是「Role」頁面,如圖17所示,務必選取「Raw Volume」,因為其他三種類型的磁碟分割區角色都無法作為磁碟陣列的用途使用。按下〔下一步〕按鈕,繼續後面的設定。
如圖18所示,然後進入格式化與掛載設定選項頁面,必須在「Do not format partition」的「檔案系統ID」下拉選單中挑選【0xFD Linux RAID】選項,並且選取「Do not mount partition」選項,最後按下〔完成〕按鈕。
隨即回到「磁碟分割程式」主介面中,按下〔下一步〕按鈕後,將會檢視到如圖19所示的提示訊息,表示即將完成變更磁碟分割區的設定。這裡先建立三個15GB的Raw Volume分割區,並且設定成Linux RAID檔案系統來做為範例。按下〔完成〕按鈕繼續。
可以隨時增加以Linux RAID檔案系統為主的磁碟分割區,無論最終增加的數量為何,都可以在「Unused Devices」節點頁面中,看到每一個已顯示為Linux RAID的磁碟,如圖20所示。
接著,點選至「RAID」節點頁面,除非在作業系統安裝過程中已經先完成了磁碟陣列的建立,否則在預設狀態下並不會有任何現行的磁碟陣列,如圖21所示,所以直接按下〔Add RAID〕按鈕。
在「Add RAID /dev/md0」頁面中,如圖22所示,可以看到目前可用的五種主要磁碟陣列類型,每一種類型皆有它的優點與缺點,全看著重的是節省硬體成本、執行效能,還是資料存放的安全性而定。透過下列的簡單分析,就可以選出真正屬於自己建置需要的磁碟陣列。常見RAID類型比較,可參考表1的說明:
‧RAID 0(串接):此種陣列架構是所有RAID類型中讀寫效能最好的方案,因為它會將資料分割成幾個小區塊,然後分別儲存到陣列中的每顆硬碟裡,等到需要讀取時再分別從所有硬碟中取出所需資料,因此無論是資料的讀取還是寫入,其效能皆是最佳。若是採用的硬碟是固態式硬碟(SSD),那速度之快可想而知。不過,缺點就是只要其中一顆硬碟損毀,就會造成所有資料付之一炬,因此此種架構較不適用在伺服器的硬碟規劃。
‧RAID 1(鏡像複製):顧名思義,這樣的架構就像照鏡子一樣,鏡內與鏡外的內容皆會是一樣的,這樣的優點無非是以資料安全性為優先考量,相對缺點就是得犧牲掉一半的磁碟空間來存放同步備份的檔案資料。
‧RAID 5(重複串接):此種陣列架構是目前IT工作者對於伺服器磁碟規劃最喜歡採用的選項,原因是它只是需要犧牲掉一顆硬碟的容量,而不像RAID 1的鏡像方式需要兩顆為一組,然後每一組只能夠有50%的可用空間。它採用分散式存取搭配同位元檢查的技術,來防範可能因單顆硬碟損毀而造成的資料遺失問題,可算是兼顧效能、安全以及成本的最佳選項。缺點是只要同時壞掉兩顆陣列中的硬碟,其儲存的所有資料將可能毀之一旦。
‧RAID 6(Dual Redundant Striping):如果覺得採用RAID 5的架構仍有些不放心,那麼便可以考慮採用RAID 6的陣列架構,因為它允許在同時損毀兩顆硬碟的情況下,依舊保有檔案資料的完整性,不過在這個陣列架構中得犧牲掉兩顆硬碟的容量大小,來存放同位元檢查的相關資料。這樣的陣列模式雖提高了資料存放的安全性,但卻換來增加硬碟購置成本(至少四顆)與降低部分的寫入效能。
‧RAID 10(Mirroring and Striping):有沒有能夠兼顧效能與安全性的最佳平衡選項呢?答案是有的,那就是RAID 10。此種陣列架構與經常聽到的RAID 0+1大同小異,差別只在於先進行鏡像還是先處理資料的等量寫入作業而已。由於這種陣列架構需要同時運行RAID 1與RAID 0的技術規範,因此需要至少四顆以上的雙數硬碟數量才能構成,藉由每兩顆為一組的RAID 1相互備援,以及兩組之間的RAID 0等量存取技術,以確保資料的安全性與讀寫效能,目前看來雖是建置成本最高,但卻也是磁碟陣列規劃的最佳選項。
看完上述對於各種磁碟陣列建立的需求後,便可以將準備要建立的磁碟陣列之可用裝置,全部加入至「Selected Devices」窗格內,然後按下〔下一步〕按鈕。然而,如果給予的硬碟裝置數量不足以建立所指定的磁碟陣列時,將會出現類似如圖23所示的錯誤訊息。
接著,在這個磁碟陣列的配置中,如圖24所示選擇「RAID 10」並加入最少四顆未使用硬碟的要求,而在按下〔下一步〕按鈕之前,可以先為這個磁碟陣列輸入一個命名。
如圖25所示,來到「RAID Options」頁面後,自訂Chunk大小與同位元檢查演算法的方式。如果不知道挑選哪一個,就採用預設值。按下〔下一步〕按鈕,繼續設定。
在磁碟區角色頁面中,一樣可以挑選此陣列磁碟建立後所要儲存的資料類型,不過別忘了只能夠挑選前三者之一,如圖26所示,一般來說還是挑選「Data and ISV Applications」最為實用,尤其RAID 10的架構最適用在各種資料庫檔案的存放,因為不僅讀寫速度快又能夠兼顧安全。
如圖27所示,在磁區格式化以及掛載選項設定中,可以根據實際存放資料的類型,進一步設定檔案系統類型以及對應的掛載名稱。
完成建立磁碟陣列之後,再一次回到RAID節點頁面中,如圖28所示,切換到其下裝置節點來查看裝置的詳細資訊,包括裝置路徑、大小、加密資訊、裝置ID、RAID類型,以及所採用的檔案系統等等資訊。
建立好磁碟陣列後,未來如果想要隨時查看此openSuSE主機上的磁碟裝置架構,只要點選至「Device Graph」節點頁面,如圖29所示,便可以從圖形化的呈現方式中清楚知道所有磁碟的配置情形。如圖30所示,最後開始在所建立的磁碟陣列掛載點目錄內,建立將會使用到的資料夾,並且完成不同資料夾的權限配置以及網路共用設定。
網路磁碟容量最大化 建立跨主機的磁碟區群組
GlusterFS是一個完全免費開源軟體套件,也是一款具備了延展能力的網路檔案系統,可以讓IT部門直接善用現有的多部Linux主機,而且這些主機可能是稍微較老舊且容量較小的規格,在打算將它扔到一旁涼快去之前,不妨將它們重新組合成一個大容量的分散式儲存架構(Distributed Storage),做為像是多媒體、資料分析、檔案封存儲存等應用。
GlusterFS支援多款主流的Linux發行版本,包括CentOS、Debian、Fedora、Red Hat、openSuSE、Ubuntu等等。在接下來的示範講解中,同樣將以openSuSE來做為GlusterFS的基礎作業平台。
‧GlusterFS官方網站:http://www.gluster.org/ ‧最新版本下載網址:http://download.gluster.org/pub/gluster/glusterfs/LATEST/
針對GlusterFS套件的安裝方式,可以先到官網下載最新對應的Linux版本,再透過相關的命令來完成安裝即可。
另外,還有更簡便的安裝方式,則是直接透過各個版本Linux桌面中所提供的相關套件管理工具進行安裝。以openSuSE來說就是「軟體管理員」。如圖31所示,只要在此介面中輸入關鍵字「gluster」進行搜尋,即可找到GlusterFS的相關套件,在勾選安裝主要套件時,其他相依的套件便會自動被選取。按下〔接受〕按鈕後,就會開始安裝。
當然,也可以選擇以執行「sudo yum install glusterfs-server」命令的方式來安裝GlusterFS套件。
完成GlusterFS套件的安裝作業後,在「檔案清單」頁籤內便會看到所有檔案的安裝路徑。務必記得!緊接著必須在所有要整合在一起的openSuSE主機上,皆完成安裝GlusterFS套件。
已安裝的GlusterFS套件版本,除了可以從「軟體管理員」介面中查看外,也能如圖32所示執行「sudo glusterfs --version」命令來檢視完整的版本資訊內容。
確認已經完成安裝GlusterFS套件後,就可以執行「sudo service glusterd start」命令啟動GlusterFS服務。至於目前該服務的運行狀態,則執行「sudo service glusterd status」命令參數來查看。
現在,可以立即在GlusterFS01主機上連線GlusterFS02主機,只要如圖33所示執行「sudo gluster peer probe GlusterFS02」命令即可。
連線成功之後,還可以執行「sudo gluster peer status」命令來查看GlusterFS主機之間的連線狀態。但是請注意!這個命令的執行只需要在其中任何一部主機中執行即可。
確認主機之間彼此可以成功連線後,就可以建立準備進行掛載的目錄。例如,使用以下的命令範例來完成掛載目錄的建立以及fstab檔案的修改,在文件最底端加入「/dev/sdb1 /gfsdata/brick1 xfs defaults 1 2」並儲存,然後立即執行掛載動作:
sudo mkdir -p /gfsdata/brick1 sudo vi /etc/fstab sudo mount -a && mount
接下來,就可以執行以下命令範例來完成GlusterFS01與GlusterFS02兩部主機的儲存區,在此命名為「dist-vol01」:
sudo gluster volume create dist- vol01 GlusterFS01:/gfsdata/ brick1/gv0 GlusterFS02:/ gfsdata/brick1/gv0
必須注意的是,這兩部主機的掛載點路徑必須是已經存在的。當然,最後的「gv0」這個目錄名稱如果不存在,系統將會自動幫忙建立。
另外必須注意的地方是,如果在建立GlusterFS磁區時出現了類似圖34所示的錯誤訊息,就表示可能是直接指定將新的GlusterFS磁區建立在掛載點的根路徑之中,只要改成指定建立在掛載點下的某一個已存在的目錄,即可解決此問題。
一旦成功建立GlusterFS磁區之後,就可以執行「sudo gluster volume start dist-vol01」命令,正式啟動GlusterFS磁區的使用,但必須注意的是GlusterFS磁區名稱必須輸入管理者所自訂的。若想查看GlusterFS磁區的最新狀態與屬性,可執行「sudo gluster volume info」命令。
如圖35所示,接著執行「sudo mount -t glusterfs GlusterFS01:/dist-vol01 /mnt」命令,嘗試進行GlusterFS磁區的掛載,一旦掛載成功,就能夠像存取一般磁區掛載目錄般來使用它。此外,可以進一步執行「df」命令查看到已經成功掛載的GlusterFS磁區,並且總容量確實是跨主機多顆硬碟的結合。
回到桌面的檔案管理員介面中,開啟掛載點目錄的屬性內容頁面,將同樣能夠檢視到它的總容量資訊。最後,不妨實際模擬一下當大量檔案建立後,現有檔案的分布情形會是如何。首先,在GlusterFS磁區目錄下,執行「sudo touch Files{1..50}」命令以產生50個測試檔案。
完成大量測試檔案的建立後,到每一部GlusterFS主機的實際存放目錄內,查看各自存放測試檔案的數量。以這裡建立的範例來看,第一部的GlusterFS01主機總共被分配到30個檔案,而第二部GlusterFS02主機則是20個檔案。
再一次提醒,雖然GlusterFS服務套件可以提供多主機的大空間整合,但只要任一部成員主機中的硬碟損毀,都會造成部分檔案資料的遺失,因此各自主機的硬碟架構,最好還是要建立在具備容錯能力的RAID內。
結語
Linux作業系統下的磁碟管理能力僅限於此嗎?當然不是,因為實際上還有許多開源的磁碟管理工具可運行在Linux、FreeBSD以及Windows作業系統上。它們不僅提供了一般常見的磁碟管理功能,在許多免費工具的管理功能中,甚至於可以幫磁碟進行分割區大小調整、複製、合併、檢測以及救援等工作。若是目標系統已經損毀而無法啟動,則還有相關的Live CD可以協助修復可能的磁碟問題,讓許多原先看似沒希望救回的系統或資料,再度燃起一線生機。
<本文作者:顧武雄, Microsoft MVP 2004-2016、MCITP與MCTS認證專家、台灣微軟Technet、TechDays、Webcast、MVA特約資深顧問講師、VMware vExpert 2016-217、IBM Unified Communications/Notes/Domino/Connections Certified。>