• 鳥哥的 Linux 私房菜
    <<

    第 14 堂課:進階檔案系統管理

    最近更新日期:2017/04/05

    基礎的檔案系統管理中,通常一個 partition 只能作為一個 filesystem。但實際上,我們可以透過 RAID 的技術以及 LVM 的技術將不同的 partition/disk 整合成為一個大的檔案系統,而這些檔案系統又能具有硬體容錯的功能在,對於關注儲存設備物理安全性的管理員來說,這些技術相當的重要!

    14.1:軟體磁碟陣列 (Software RAID)

    陣列 (RAID) 的目的主要在『加大容量』、『磁碟容錯』、『加快效能』等方面,而根據你著重的面向就得要使用不同的磁碟陣列等級了。

    14.1.1:什麼是 RAID

    磁碟陣列全名是『 Redundant Arrays of Independent Disks, RAID 』,英翻中的意思為:獨立容錯式磁碟陣列,舊稱為容錯式廉價磁碟陣列, 反正就稱為磁碟陣列即可!RAID 可以透過一個技術(軟體或硬體),將多個較小的磁碟整合成為一個較大的磁碟裝置; 而這個較大的磁碟功能可不止是儲存而已,他還具有資料保護的功能。 整個 RAID 由於選擇的等級 (level) 不同,而使得整合後的磁碟具有不同的功能,基本常見的 level 有這幾種:

    • RAID-0 (等量模式, stripe, 效能最佳):兩顆以上的磁碟組成 RAID-0 時,當有 100MB 的資料要寫入,則會將該資料以固定的 chunk 拆解後, 分散寫入到兩顆磁碟,因此每顆磁碟只要負責 50MB 的容量讀寫而已。如果有 8 顆組成時,則每顆僅須寫入 12.5MB ,速度會更快。此種磁碟陣列效能最佳, 容量為所有磁碟的總和,但是不具容錯功能。
    • RAID-1 (映射模式, mirror, 完整備份):大多為 2 的倍數所組成的磁碟陣列等級。若有兩顆磁碟組成 RAID-1 時,當有 100MB 的資料要寫入, 每顆均會寫入 100MB,兩顆寫入的資料一模一樣 (磁碟映射 mirror 功能),因此被稱為最完整備份的磁碟陣列等級。但因為每顆磁碟均須寫入完整的資料, 因此寫入效能不會有明顯的提昇,但讀取的效能會有進步。同時容錯能力最佳,但總體容量會少一半。
    • RAID 1+0:此種模式至少需要 4 顆磁碟組成,先兩兩組成 RAID1,因此會有兩組 RAID1,再將兩組 RAID1 組成最後一組 RAID0,整體資料有點像底下的圖示:
      RAID-1+0 的磁碟寫入示意圖
      圖 14.1.1、RAID-1+0 的磁碟寫入示意圖
      因此效能會有提昇,同時具備容錯,雖然容量會少一半。
    • RAID 5, RAID 6 (效能與資料備份的均衡考量):RAID 5 至少需要 3 顆磁碟組成,在每一層的 chunk 當中,選擇一個進行備份, 將備份的資料平均分散在每顆磁碟上,因此任何一顆磁碟損毀時,都能夠重建出原本的磁碟資料,原理圖示有點像底下這樣:
      RAID5 的磁碟寫入示意圖
      圖 14.1.2、RAID-5 的磁碟寫入示意圖
      因為有一顆容量會用在備份上,因此總體容量少一顆,而為了計算備份的同位檢查碼 (partity),因此效能較難評估,原則上,效能比起單顆磁碟還是會稍微提昇。 不過還是具備有容錯功能,在越多顆磁碟組成時,比 RAID-1 要節省很多的容量。不過為了擔心單顆備份還是不太足夠,因此有 RAID 6 可以使用兩個 partity 來備份, 因此會佔用兩顆容量就是了。
    例題:嘗試完成底下的表格
    項目RAID0RAID1RAID10RAID5RAID6
    最少磁碟數2
    最大容錯磁碟數(1)n-1
    資料安全性(1)完全沒有
    理論寫入效能(2)n1n/2<n-1<n-2
    理論讀出效能(2)nnn<n-1<n-2
    可用容量(3)n1
    一般應用強調效能但資料不重要的環境資料與備份伺服器、雲系統常用資料與備份資料與備份

    而達成磁碟陣列功能的,主要有硬體 RAID 與軟體 RAID。

    • 硬體磁碟陣列:中高階硬體 RAID 為獨立的 RAID 晶片,內含 CPU 運算功能,可以運算類似 RAID 5/6 的 parity 資料,據以寫入磁碟當中。越高階的 RAID 還具有更多的快取 (cache memory), 可以加速讀/寫的性能。由於是硬體磁碟陣列組成的『大容量磁碟』,因此 Linux 會將他視為一顆獨立的物理磁碟,檔名通常就是 /dev/sd[abcd..]。
    • 軟體磁碟陣列:由作業系統提供模擬,透過 CPU 與 mdadm 軟體模擬出中高階磁碟陣列卡的功能,以達到磁碟陣列所需要的效能、容錯、容量增大的功能。 因為是作業系統模擬的,因此檔名會是 /dev/md[0123..]。這種作法很常見於 NAS 檔案伺服器環境中。
    例題:
    根據上述的內容,簡易說明磁碟陣列對於伺服器的重要性在哪裡?

    14.1.2:Software RAID 的使用

    Software RAID 主要透過 mdadm 這個軟體的協助,因此需要先確認 mdadm 是否安裝妥當。而 mdadm 的指令也相當簡單,範例如下:

    • 建立磁碟陣列
    [root@localhost ~]# mdadm --create /dev/md[0-9] --auto=yes --level=[015] --chunk=NK \
    > --raid-devices=N --spare-devices=N /dev/sdx 
    
    --create          :為建立 RAID 的選項;
    --auto=yes        :決定建立後面接的軟體磁碟陣列裝置,亦即 /dev/md0, /dev/md1...
    --level=[015]     :設定這組磁碟陣列的等級。支援很多,不過建議只要用 0, 1, 5 即可
    --chunk=Nk        :決定這個裝置的 chunk 大小,也可以當成 stripe 大小,一般是 64K 或 512K。
    --raid-devices=N  :使用幾個磁碟 (partition) 作為磁碟陣列的裝置
    --spare-devices=N :使用幾個磁碟作為備用 (spare) 裝置
    
    例題:現在利用上述的動作,以底下的設定來規範磁碟陣列:
    • 利用 4 個 partition 組成 RAID 5;
    • 每個 partition 約為 300MB 大小,需確定每個 partition 一樣大較佳;
    • 利用 1 個 partition 設定為 spare disk
    • 這個 spare disk 的大小與其他 RAID 所需 partition 一樣大!
    • chunk 設定為 256K 這麼大即可!
    • 將此 RAID 5 裝置掛載到 /srv/raid 目錄下
    請特別注意,因為使用了磁碟陣列,因此在進行 mkfs 時,務必參考磁碟陣列優化的參數。以 mkfs.xfs 為例, 請參考 su 以及 sw 的參數意義。此案例中, su 應為 256k,而 sw 應該是 (4-1) =3 。
    • 觀察磁碟陣列

    磁碟陣列建置妥當後,應該觀察一下運作的狀況比較妥當。主要的觀察方式為:

    [root@localhost ~]# mdadm --detail
    [root@localhost ~]# cat /proc/mdstat
    

    需要注意到是否有磁碟在損毀的狀況才行。

    • 磁碟陣列的救援功能

    假設 (1)磁碟陣列有某顆磁碟損毀了,或 (2)磁碟使用壽命也差不多,預計要整批換掉時,使用抽換的方式一顆一顆替換,如此則不用重新建立磁碟陣列。

    在此情況下,管理員應該要將磁碟陣列設定為損毀,然後將之抽離後,換插新的硬碟才可以?;镜闹噶钚枨笕缦拢?/p>

    [root@localhost ~]# mdadm --manage /dev/md[0-9] [--add 裝置] [--remove 裝置] [--fail 裝置] 
    
    --add    :會將後面的裝置加入到這個 md 中!
    --remove :會將後面的裝置由這個 md 中移除
    --fail   :會將後面的裝置設定成為出錯的狀態
    
    例題:
    1. 先觀察剛剛建立的磁碟陣列是否正常運作,同時觀察檔案系統是否正常 (/srv/raid 是否可讀寫)
    2. 將某顆運作中的磁碟 (例如 /dev/vda7) 設定為錯誤 (--fail),再觀察磁碟陣列與檔案系統
    3. 將錯誤的磁碟抽離 (--remove) 之後,假設修理完畢,再加入該磁碟陣列 (--add),然後再次觀察磁碟陣列與檔案系統

    14.2:邏輯捲軸管理員 (Logical Volume Manager)

    雖然 RAID 可以將檔案系統容量增加,也有效能增加與容錯的機制,但是就是沒有辦法在既有的檔案系統架構下,直接將容量放大的機制。 此時,可以彈性放大與縮小的 LVM 輔助,就很有幫助了。不過 LVM 主要是在彈性的管理檔案系統,不在於效能與容錯上。 因此,若需要容錯與效能,可以將 LVM 放置到 RAID 裝置上即可。

    14.2.1:LVM 基礎: PV, PE, VG, LV 的意義

    LVM 的全名是 Logical Volume Manager,中文可以翻譯作邏輯捲軸管理員。之所以稱為『捲軸』可能是因為可以將 filesystem 像捲軸一樣伸長或縮短之故!LVM 的作法是將幾個實體的 partitions (或 disk) 透過軟體組合成為一塊看起來是獨立的大磁碟 (VG) , 然後將這塊大磁碟再經過分割成為可使用分割槽 (LV), 最終就能夠掛載使用了。

    • Physical Volume, PV, 實體捲軸:作為 LVM 最基礎的物理捲軸,可以是 partition 也可以是整顆 disk。
    • Volume Group, VG, 捲軸群組:將許多的 PV 整合成為一個捲軸群組 (VG),這就是所謂的最大的主要大磁碟。 讀者應該知道磁碟的最小儲存單位為 sector,目前主流 sector 為 512bytes 或 4K。而 LVM 也有最小儲存單位, 那就是 Physical Extent (PE),所有的資料都是透過 PE 在 VG 當中進行交換的。
    • Physical Extent, PE, 實體範圍區塊:PE 是整個 LVM 最小的儲存區塊,系統的檔案資料都是藉由寫入 PE 來處理的。 簡單的說,這個 PE 就有點像檔案系統裡面的 block 。PE 預設需要是 2 的次方量,且最小為 4M 才行。
    • Logical Volume, LV, 邏輯捲軸:最終將 VG 再切割出類似 partition 的 LV 即是可使用的裝置了。 LV 是藉由『分配數個 PE 所組成的裝置』,因此 LV 的容量與 PE 的容量大小有關。

    上述談到的資料,可使用下圖來解釋彼此的關係:

    LVM 各元件的實現流程圖示
    圖14.2.1、LVM 各元件的實現流程圖示

    例題:
    使用 gdisk 或 fdisk 指令查詢一下,若需要將 partition 指定為 LVM 時,其 system ID (檔案系統識別碼) 應該指定為什麼?

    14.2.2:LVM 實做流程

    如前一小節所述,管理員若想要處理 LVM 的功能,應該從 partition --> PV --> VG --> LV --> filesystem 的角度來處理。 請讀者以底下的設定來實做出一組 LVM 來使用:

    • 使用 4 個 partition ,每個 partition 的容量均為 300MB 左右,且 system ID 需要為 8e;
    • 全部的 partition 整合成為一個 VG,VG 名稱設定為 myvg ;且 PE 的大小為 16MB;
    • 建立一個名為 mylv 的 LV,容量大約設定為 500MB 左右
    • 最終這個 LV 格式化為 xfs 的檔案系統,且掛載在 /srv/lvm 中

    先使用 gdisk 或 fdisk 分割出本案例所需要的 4 個分割,假設分割完成的磁碟檔名為 /dev/vda{9,10,11,12} 四個。 接下來即可使用 LVM 提供的指令來處理後續工作。一般來說, LVM 的三個階段 (PV/VG/LV) 均可分為『建立』、『掃描』與『詳細查閱』等步驟, 其相關指令可以彙整如下表:

    任務PV 階段VG 階段LV 階段filesystem
    (XFS / EXT4)
    搜尋(scan)pvscanvgscanlvscanlsblk, blkid
    建立(create)pvcreatevgcreatelvcreatemkfs.xfsmkfs.ext4
    列出(display)pvdisplayvgdisplaylvdisplaydf, mount
    增加(extend) vgextendlvextend (lvresize)xfs_growfsresize2fs
    減少(reduce) vgreducelvreduce (lvresize)不支援resize2fs
    刪除(remove)pvremovevgremovelvremoveumount, 重新格式化
    改變容量(resize)  lvresizexfs_growfsresize2fs
    改變屬性(attribute)pvchangevgchangelvchange/etc/fstab, remount
    • PV 階段

    所有的 partition 或 disk 均需要做成 LVM 最底層的實體捲軸,直接使用 pvcreate /device/name 即可。實做完成後,記得使用 pvscan 查閱是否成功。

    [root@localhost ~]# pvcreate /dev/vda{9,10,11,12}
    [root@localhost ~]# pvscan
      PV /dev/vda3    VG centos   lvm2 [20.00 GiB / 5.00 GiB free]
      PV /dev/vda12               lvm2 [300.00 MiB]
      PV /dev/vda11               lvm2 [300.00 MiB]
      PV /dev/vda10               lvm2 [300.00 MiB]
      PV /dev/vda9                lvm2 [300.00 MiB]
      Total: 5 [21.17 GiB] / in use: 1 [20.00 GiB] / in no VG: 4 [1.17 GiB]
    
    • VG 階段

    VG 比較需要注意的有三個項目:

    • VG 內的 PE 數值需要是 2 的倍數,如果沒有設定,預設會是 4MB
    • VG 需要給名字
    • 需要指定哪幾個 PV 加入這個 VG 中。

    根據上述的資料,使用 vgcreate --help 可以找到相對應的選項與參數,於是使用如下的指令來完成 VG 的任務:

    [root@localhost ~]# vgcreate -s 16M myvg /dev/vda{9,10,11,12}
    [root@localhost ~]# vgdisplay myvg
      --- Volume group ---
      VG Name               myvg
      System ID
      Format                lvm2
      Metadata Areas        4
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                4
      Act PV                4
      VG Size               1.12 GiB
      PE Size               16.00 MiB
      Total PE              72
      Alloc PE / Size       0 / 0
      Free  PE / Size       72 / 1.12 GiB
      VG UUID               SYirFy-Tnin-zd58-CDMK-HWWm-0hVS-dMKFkB
    
    • LV 階段

    LV 為實際被使用在檔案系統內的裝置,建置時需要考量的項目大概有:

    • 使用哪一個 VG 來進行 LV 的建置
    • 使用多大的容量或多少個 PE 來建置
    • 亦需要有 LV 的名字

    同樣使用 lvcreate --help 查閱,之後可以得到如下的選項與參數之設定:

    [root@localhost ~]# lvcreate -n mylv -L 500M myvg
      Rounding up size to full physical extent 512.00 MiB
      Logical volume "mylv" created.
    
    [root@localhost ~]# lvdisplay /dev/myvg/mylv
      --- Logical volume ---
      LV Path                /dev/myvg/mylv
      LV Name                mylv
      VG Name                myvg
      LV UUID                swQ33g-yEMi-frFh-iFyF-tRFS-jqbZ-VSLAw8
      LV Write Access        read/write
      LV Creation host, time www.centos, 2016-06-02 11:57:54 +0800
      LV Status              available
      # open                 0
      LV Size                512.00 MiB
      Current LE             32
      Segments               2
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     8192
      Block device           253:3
    

    由於實際建立的 LV 大小是由 PE 的數量來決定,因為本案例中使用 16MB 的 PE,因此不會剛好等於 500MB,故 LV 自動選擇接近 500MB 的數值來建立, 因此上表中會得到使用 512MB 的容量。

    另外,最終實際可用的 LV 裝置名稱為 /dev/myvg/mylv ,而因為 LVM 又是由 device mapper 的服務所管理的, 因此最終的名稱也會指向到 /dev/mapper/myvg-mylv 當中。無論如何,讀者僅需要記憶 /dev/myvg/mylv 這種格式的裝置檔名即可。

    例題:
    1. 請將上述的 /dev/myvg/mylv 實際格式化為 xfs 檔案系統,且此 fileysytem 可以開機後自動掛載於 /srv/lvm 目錄下。
    2. 再建立一個名為 /dev/myvg/mylvm2 的 LV 裝置,容量約為 300MB 左右,格式化為 ext4 檔案系統,開機後自動掛載於 /srv/lvm2 目錄下。

    14.2.3:彈性化處理 LVM 檔案系統

    LVM 最重要的任務就是進行裝置的容量放大與縮小,不過,前提是在該裝置下的檔案系統能夠支援放大與縮小才行。 目前在 CentOS 7 上面主要的兩款檔案系統中, ext4 可以放大與縮小,但是 xfs 檔案系統則僅能放大而已。因此使用上需要特別注意。

    • 將 myvg 所有剩餘容量分配給 /dev/myvg/mylvm2

    從上面的案例中,讀者可以知道 myvg 這個 VG 的總容量 1.1G 當中,有 500M 給 /dev/myvg/mylv 而 300M 給 /dev/myvg/mylvm2, 因此剩下大約 300MB 左右,讀者可以使用『 vgdisplay myvg 』來查詢剩餘的容量。若需要將檔案系統放大,則需要進行:

    • 先將 mylvm2 放大
    • 再將上面的檔案系統放大

    上述兩個步驟的順序不可錯亂。將 mylvm2 放大的方式為:

    [root@localhost ~]# vgdisplay myvg
      --- Volume group ---
      VG Name               myvg
      System ID
      Format                lvm2
      Metadata Areas        4
      Metadata Sequence No  3
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                2
      Open LV               2
      Max PV                0
      Cur PV                4
      Act PV                4
      VG Size               1.12 GiB
      PE Size               16.00 MiB
      Total PE              72
      Alloc PE / Size       51 / 816.00 MiB
      Free  PE / Size       21 / 336.00 MiB
      VG UUID               SYirFy-Tnin-zd58-CDMK-HWWm-0hVS-dMKFkB
    
    [root@localhost ~]# lvscan 
      ACTIVE            '/dev/myvg/mylv' [512.00 MiB] inherit
      ACTIVE            '/dev/myvg/mylvm2' [304.00 MiB] inherit
      ACTIVE            '/dev/centos/root' [10.00 GiB] inherit
      ACTIVE            '/dev/centos/home' [3.00 GiB] inherit
      ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
    

    如上所示,讀者可以發現剩餘 21 個 PE,而目前 mylvm2 擁有 304MB 的容量。因此,我們可以使用:

    • 不考慮原本的,額外加上 21 個 PE 在 mylvm2 上面,或;
    • 原有的 304MB + 336MB 最終給予 640MB 的容量。

    這兩種方式都可以!主要都是透過 lvresize 這個指令來達成。要額外增加時,使用『 lvresize -l +21 ... 』的方式, 若要給予固定的容量,則使用『 lvresize -L 640M ... 』的方式,底下為額外增加容量的範例。

    [root@localhost ~]# lvresize -l +21 /dev/myvg/mylvm2
      Size of logical volume myvg/mylvm2 changed from 304.00 MiB (19 extents) 
           to 640.00 MiB (40 extents).
      Logical volume mylvm2 successfully resized.
    
    [root@localhost ~]# lvscan
      ACTIVE            '/dev/myvg/mylv' [512.00 MiB] inherit
      ACTIVE            '/dev/myvg/mylvm2' [640.00 MiB] inherit
      ACTIVE            '/dev/centos/root' [10.00 GiB] inherit
      ACTIVE            '/dev/centos/home' [3.00 GiB] inherit
      ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
    

    完成了 LV 容量的增加,再來將檔案系統放大。EXT 家族的檔案系統透過 resize2fs 這個指令來完成檔案系統的放大與縮小。

    [root@localhost ~]# df /srv/lvm2
    檔案系統               1K-區段  已用   可用 已用% 掛載點
    /dev/mapper/myvg-mylvm2  293267  2062 271545    1% /srv/lvm2
    
    [root@localhost ~]# resize2fs /dev/myvg/mylvm2
    esize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/myvg/mylvm2 is mounted on /srv/lvm2; on-line resizing required
    old_desc_blocks = 3, new_desc_blocks = 5
    The filesystem on /dev/myvg/mylvm2 is now 655360 blocks long.
    
    [root@localhost ~]# df /srv/lvm2
    檔案系統               1K-區段  已用   可用 已用% 掛載點
    /dev/mapper/myvg-mylvm2  626473  2300 590753    1% /srv/lvm2
    
    • VG 的容量不足,可增加額外磁碟的方式

    假設讀者因為某些特殊需求,所以需要將 /dev/myvg/mylv 檔案系統放大一倍,亦即再加 500MB 時,該如何處理?此時 myvg 已經沒有剩餘容量了。 此時可以透過額外給予磁碟的方式來增加。此案例也是最常見到的情況,亦即在原有的檔案系統當中已無容量可用,所以管理員需要額外加入新購置的磁碟的手段。 假設管理員已經透過 gdisk /dev/vda 新增一個 /dev/vda13 的 500MB 分割槽,此時可以這樣做:

    [root@localhost ~]# lsblk
    NAME               MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    vda                252:0    0    40G  0 disk
    ├─vda9           252:9    0   300M  0 part
    │ └─myvg-mylv   253:2    0   512M  0 lvm   /srv/lvm
    ├─vda10          252:10   0   300M  0 part
    │ ├─myvg-mylv   253:2    0   512M  0 lvm   /srv/lvm
    │ └─myvg-mylvm2 253:4    0   640M  0 lvm   /srv/lvm2
    ├─vda11          252:11   0   300M  0 part
    │ └─myvg-mylvm2 253:4    0   640M  0 lvm   /srv/lvm2
    ├─vda12          252:12   0   300M  0 part
    │ └─myvg-mylvm2 253:4    0   640M  0 lvm   /srv/lvm2
    └─vda13          252:13   0   500M  0 part <==剛剛管理員新增的部份
    
    [root@localhost ~]# pvcreate /dev/vda13
      Physical volume "/dev/vda13" successfully created
    
    [root@localhost ~]# vgextend myvg /dev/vda13
      Volume group "myvg" successfully extended
    
    [root@localhost ~]# vgdisplay myvg
      --- Volume group ---
      VG Name               myvg
      System ID
      Format                lvm2
      Metadata Areas        5
      Metadata Sequence No  5
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                2
      Open LV               2
      Max PV                0
      Cur PV                5
      Act PV                5
      VG Size               1.61 GiB
      PE Size               16.00 MiB
      Total PE              103
      Alloc PE / Size       72 / 1.12 GiB
      Free  PE / Size       31 / 496.00 MiB
      VG UUID               SYirFy-Tnin-zd58-CDMK-HWWm-0hVS-dMKFkB
    

    此時系統即可多出將近 500MB 的容量給 myvg。

    例題:
    1. 請將所有剩餘的容量分配給 /dev/myvg/mylv
    2. 透過 xfs_growfs 來放大 /dev/myvg/mylv 這個檔案系統 (請自行 man xfs_growfs)
    3. 你目前的系統中,根目錄所在 filesystem 能否放大加入額外的 2GB 容量?若可以,請實做,若不行,請說明原因。

    14.3:Software RAID 與 LVM 綜合管理

    RAID 主要的目的在效能與容錯 (容量只是附加的),而 LVM 重點在彈性管理檔案系統 (最好不要考量 LVM 內建的容錯機制)。 若需要兩者的優點,則可以在 RAID 上面建置 LVM。但以目前管理員的測試機而言,建議先關閉原有的測試流程,然後再重新建立為宜。

    14.3.1:關閉與取消 software RAID 與 LVM 的方式

    在本練習冊中,我們並沒有給予 RAID 的設定檔,因此刪除掉分割槽後,系統應該會自動捨棄 software RAID (/dev/md0)。 不過,如果沒有將每個分割槽的檔頭資料刪除,那未來重新開機時, mdadm 還是會嘗試抓取 /dev/md0,這將造成些許困擾。 因此,建議刪除掉 software RAID 的手段如下:

    1. 先將 /etc/fstab 當中,關於 /dev/md0 的紀錄刪除或註解;
    2. 將 /dev/md0 完整的卸載
    3. 使用 mdadm --stop /dev/md0 將 md0 停止使用
    4. 使用 dd if=/dev/zero of=/dev/vda4 bs=1M count=10 強制刪除掉每個 partition 前面的 software RAID 標記
    5. 重複前一個步驟,將其他的 /dev/vda{5,6,7,8} 通通刪除標記

    LVM 的管理是很嚴格的,因此管理員不可在 LVM 活動中的情況下刪除掉任何一個屬於 LVM 的 partition/disk 才對。 例如目前 /dev/vda{9,10,11,12,13} 屬於 myvg 這個 VG,因此如果 myvg 沒有停止,那麼管理員不應該也盡量避免更動到上述的分割槽。 若需要停止與回收這個 VG 的分割槽,應該要這樣處理。

    1. 先將 /etc/fstab 當中與 myvg 有關的項目刪除或註解
    2. 將 myvg 有關的檔案系統卸載 (本案例中為 /srv/lvm 與 /srv/lvm2)
    3. 使用 vgchange -a n myvg 將此 VG 停用
    4. 使用 lvscan 確認一下 myvg 所屬的所有 LV 是否已經停用 (inactive)
    5. 使用 vgremove myvg 移除掉 myvg 這個 VG 的所有內容
    6. 使用 pvremove /dev/vda{9,10,11,12,13} 移除這些 PV
    7. 最終使用 pvscan 偵測是否順利移除
    例題:
    1. 請透過上述的方案,將 /dev/md0 以及 myvg 含所屬的 PV 刪除掉
    2. 將所屬的 /dev/vda{4...13} 使用 gdisk 刪除掉,等待下個章節使用

    14.3.2:在 Software RAID 上面建置 LVM

    假設管理員所管理的伺服器系統擁有 5 顆磁碟組成的 RAID 5 ,且擁有一顆 spare disk (容量個別為 300MB),建置完成之後, 在這個 RAID 上面建置好 VG (名稱為 raidvg),同時將所有容量通通給予一個 LV (名稱為 raidlv),並將他格式化為 xfs 且掛載到 /srv/raidlvm 目錄中。 假設管理員已經建置好 /dev/vda{4,5,6,7,8,9} 的裝置了。

    1. 先透過『 mdadm --create /dev/md0 --level=5 --chunk=256K --raid-devices=5 --spare-devices=1 /dev/vda{4,5,6,7,8,9} 』建立起 /dev/md0
    2. 建置完畢後,務必使用 mdadm --detail /dev/md0 確認陣列活動為正常。
    3. 建議將 RAID 設定寫入 /etc/mdadm.conf 當中
    4. 使用 pvcreate /dev/md0 建立 PV
    5. 使用 vgcreate -s 16M raidvg /dev/md0 建立 VG
    6. 使用 lvcreate -l 74 -n raidlv raidvg 建立 LV
    7. 最後使用 mkfs.xfs 以及修改 /etc/fstab 來處理檔案系統即可。
    例題:
    1. 以上述的流程完成本節的測試。

    14.4:簡易磁碟配額 (Quota)

    Filesystem Quota 可以使用於『公平的』使用檔案系統。雖然現今磁碟容量越來越大,但是在某些特別的情境中,為了管制使用者亂用檔案系統, 還是有必要管理一下 quota 用量的。

    14.4.1:Quota 的管理與限制

    基本上,要能使用 Quota ,你需要有底下的支援:

    • Linux 核心支援:除非你自己編譯核心,又不小心取消,否則目前預設核心都有支援 Quota 的
    • 啟用檔案系統支援:雖然 EXT 家族與 XFS 檔案系統均支援 Quota ,但是你還是得要在掛載時啟用支援才行。

    而一般 Quota 針對的管理對象是:

    • 可針對使用者 (但不包含 root)
    • 可針對群組
    • EXT家族僅可針對整個檔案系統,XFS可以針對某個目錄進行 Quota 管理

    那可以限制的檔案系統資料是:

    • 可限制檔案容量,其實就是針對 Filesystem 的 block 做限制
    • 可限制檔案數量,其實就是針對 Filesystem 的 inode 做限制 (一個檔案會佔用 1 個 inode 之故)

    至於限制的數值與資料,又可以分為底下幾個:

    • Soft 限制值:僅為軟性限制,可以突破該限制值,但超過 soft 數值後,就會產生『寬限時間 (grace time)』
    • Hard 限制值:就是嚴格限制,一定無法超過此數值
    • Grace time:寬限時間,通常為 7 天或 14 天,只有在用量超過 soft 數值後才會產生,若使用者無任何動作,則 grace time 倒數完畢後, soft 數值會成為 hard 數值,因此檔案系統就會被鎖死。

    所謂的『檔案系統鎖死』的意思,指的是使用者將無法新增/刪除檔案系統的任何資料,所以就得要藉由系統管理員來處理了!

    由於 Quota 需要檔案系統的支援,因此管理員請務必在 fstab 檔案中增加底下的設定值:

    • uquota/usrquota/quota:啟動使用者帳號 quota 管理
    • gquota/grpquota:啟動群組 quota 管理
    • pquota/prjquota:啟用單一目錄管理,但不可與 gquota 共用(本章不實做)

    在 xfs 檔案系統中,由於 quota 是『檔案系統內部紀錄管理』的,不像 EXT 家族是透過外部管理檔案處理, 因此設定好參數後,一定要卸載再掛載 (umount --> mount),不可以使用 remount 來處理。

    例題:
    1. 在測試的系統中, /home 為 xfs 檔案系統,請在設定檔中加入 usrquota, grpquota 的掛載參數;
    2. 能否直接卸載 /home 再掛載?為什麼?如何進行卸載再掛載的動作?
    3. 如何觀察已經掛載的檔案系統參數?

    14.4.2:xfs 檔案系統的 quota 實做

    一般來說,Quota 的實做大多就是觀察、設定、報告等項目,底下依序說明:

    • XFS 檔案系統的 Quota 狀態檢查

    xfs 檔案系統的 quota 實做都是透過 xfs_quota 這個指令,這個指令在觀察方面的語法如下:

    [root@www ~]# xfs_quota -x -c "指令" [掛載點]
    選項與參數:
    -x  :專家模式,後續才能夠加入 -c 的指令參數喔!
    -c  :後面加的就是指令,這個小節我們先來談談數據回報的指令
    指令:
          print :單純的列出目前主機內的檔案系統參數等資料
          df    :與原本的 df 一樣的功能,可以加上 -b (block) -i (inode) -h (加上單位) 等
          report:列出目前的 quota 項目,有 -ugr (user/group/project) 及 -bi 等資料
          state :說明目前支援 quota 的檔案系統的資訊,有沒有起動相關項目等
    

    例如列出目前支援 quota 的檔案系統觀察可以使用:

    [root@localhost ~]# xfs_quota -x -c "print"
    Filesystem          Pathname
    /                   /dev/mapper/centos-root
    /boot               /dev/vda2
    /srv/raidlvm        /dev/mapper/raidvg-raidlv
    /home               /dev/mapper/centos-home (uquota, gquota)
    

    如上表,系統就列出了有支援 quota 的載點,之後即可觀察 quota 的啟動狀態:

    [root@localhost ~]# xfs_quota -x -c "state"
    User quota state on /home (/dev/mapper/centos-home)
      Accounting: ON
      Enforcement: ON
      Inode: #168 (3 blocks, 3 extents)
    Group quota state on /home (/dev/mapper/centos-home)
      Accounting: ON
      Enforcement: ON
      Inode: #50175 (3 blocks, 3 extents)
    Project quota state on /home (/dev/mapper/centos-home)
      Accounting: OFF
      Enforcement: OFF
      Inode: #50175 (3 blocks, 3 extents)
    Blocks grace time: [7 days 00:00:30]
    Inodes grace time: [7 days 00:00:30]
    Realtime Blocks grace time: [7 days 00:00:30]
    
    • XFS 檔案系統的 Quota 帳號/群組使用與設定值報告

    若需要詳細的列出在該載點底下的所有帳號的 quota 資料,可以使用 report 這個指令項目:

    [root@localhost ~]# xfs_quota -x -c "report" /home
    User quota on /home (/dev/mapper/centos-home)
                                   Blocks
    User ID          Used       Soft       Hard    Warn/Grace
    ---------- --------------------------------------------------
    root                0          0          0     00 [--------]
    student          4064          0          0     00 [--------]
    
    Group quota on /home (/dev/mapper/centos-home)
                                   Blocks
    Group ID         Used       Soft       Hard    Warn/Grace
    ---------- --------------------------------------------------
    root                0          0          0     00 [--------]
    student          4064          0          0     00 [--------]
    
    [root@localhost ~]# xfs_quota -x -c "report -ubih" /home
    User quota on /home (/dev/mapper/centos-home)
                            Blocks                            Inodes
    User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
    ---------- --------------------------------- ---------------------------------
    root            0      0      0  00 [------]      3      0      0  00 [------]
    student      4.0M      0      0  00 [------]    133      0      0  00 [------]
    

    單純輸入 report 時,系統會列出 user/group 的 block 使用狀態,亦即是帳號/群組的容量使用情況,但預設不會輸出 inode 的使用狀態。 若額外需要 inode 的狀態,就可以在 report 後面加上 -i 之類的選項來處理。

    • XFS 檔案系統的 Quota 帳號/群組實際設定方式

    主要針對使用者與群組的 Quota 設定方式如下:

    [root@study ~]# xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
    [root@study ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays"
    選項與參數:
    limit :實際限制的項目,可以針對 user/group 來限制,限制的項目有
            bsoft/bhard : block 的 soft/hard 限制值,可以加單位
            isoft/ihard : inode 的 soft/hard 限制值
            name        : 就是用戶/群組的名稱??!
    timer :用來設定 grace time 的項目喔,也是可以針對 user/group 以及 block/inode 設定
    

    假設管理員要針對 student 這個帳號設定:可以使用的 /home 容量實際限制為 2G 但超過 1.8G 就予以警告, 簡易的設定方式如下:

    [root@localhost ~]# xfs_quota -x -c "limit -u bsoft=1800M bhard=2G student" /home
    [root@localhost ~]# xfs_quota -x -c "report -ub" /home
    User quota on /home (/dev/mapper/centos-home)
                                   Blocks
    User ID          Used       Soft       Hard    Warn/Grace
    ---------- --------------------------------------------------
    root                0          0          0     00 [--------]
    student          4064    1843200    2097152     00 [--------]
    

    若需要取消 student 設定值,直接將數值設定為 0 即可!

    [root@localhost ~]# xfs_quota -x -c "limit -u bsoft=0 bhard=0 student" /home
    
    例題:
    1. 建立一個名為 "quotaman" 的用戶,該用戶的密碼設定為 "myPassWord"
    2. 觀察 quotaman 剛剛建立好帳號後的 quota 數值
    3. 讓 quotaman 的實際容量限制為 200M 而寬限容量限制為 150M 左右,設定完畢請觀察是否正確
    4. 前往 tty2 終端機,並實際以 quotaman 的身份登入,同時執行『 dd if=/dev/zero of=test.img bs=1M count=160 』這個指令, 檢查 quotaman 家目錄是否有大型檔案?且該指令執行是否會出錯?
    5. 回歸 root 的身份,再次觀察 quotaman 的 quota 報告,是否有出現 grace time 的資料?為什麼?
    6. 再次來到 quotaman 的 tty2 終端機,再次使用『 dd if=/dev/zero of=test.img bs=1M count=260 』這個指令, 檢查 quotaman 家目錄是否有大型檔案?且該指令執行是否會出錯?
    7. 若使用 vim /etc/hosts 等指令後,離開 vim 會出現什麼錯誤訊息?為什麼?
    8. quotaman 需要如何處理資料後,才能夠正常的繼續操作系統?

    14.5:課後練習操作

    前置動作:請使用 unit14 的硬碟進入作業環境,並請先以 root 身分執行 vbird_book_setup_ip 指令設定好你的學號與 IP 之後,再開始底下的作業練習。

    請使用 root 的身份進行如下實做的任務。直接在系統上面操作,操作成功即可,上傳結果的程式會主動找到你的實做結果。 並請注意,題目是有相依性的,因此請依序進行底下的題目為宜

    1. 請回答下列問題,並將答案寫在 /root/ans14.txt 檔案內:
      1. RAID0, RAID1, RAID6, RAID10 中 (1)哪一個等級效能最佳 (2)哪些等級才會有容錯
      2. 承上,若以 8 顆磁碟為例,且都沒有 spare disk 的環境下,上述等級各有幾顆磁碟容量可用?
      3. 承上,以具有容錯的磁碟陣列而言,當有一顆磁碟損壞而需更換重建時, 哪些磁碟陣列的重建效能最佳 (資料可直接複製,無須透過重新計算而言)
      4. 軟體磁碟陣列的 (1)操作指令為何? (2)磁碟陣列檔名為何 (3)設定檔檔名為何
      5. LVM 的管理中,主要的組成有 PV, VG, LV 等,請問在 LVM 中,資料儲存、搬移的最小單位是甚麼 (寫下英文縮寫與全名)
      6. 進行分割 (partition) 時,Linux LVM 與 Linux software RAID 的 system ID 各為何?
      7. 進行磁碟配額 (filesystem quota) 時,掛載參數要加上哪兩個檔案系統參數 (以 XFS 檔案系統為例) 才能夠支援 quota
      8. 承上,磁碟配額限制【磁碟使用容量】與【可用檔案數量】時,分別是限制甚麼項目?
    2. 彈性化管理檔案系統:
      1. 將 /home 的容量增加成為 5GB
      2. 在目前的系統中,找到一個名為 hehe 的 LV ,將此 LV 的容量設定改成 2GB,且在這個 LV 上面的檔案系統須同步處理容量。
      3. 在目前的系統中,找到一個名為 haha 的 LV ,將此 LV 的容量設定改成 500M,且在這個 LV 上面的檔案系統須同步處理容量。
    3. 綜合管理檔案系統
      1. 請建立 5 個 1GB 的分割槽,且 system ID 請設定為 RAID 的樣式
      2. 將上列磁碟分割槽用來建立 /dev/md0 為名的磁碟陣列,等級為 RAID6,無須 spare disk,chunk size 請指定為 1M, 為避免 /dev/md0 被修改,請將檔名對應寫入設定檔內
      3. 以 /dev/md0 為磁碟來源,並依據底下的說明,重新建立一個 LVM 的檔案系統
        • VG 名稱請取為 myvg 容量請自訂,但是 PE 需要具有 8MB 的大小 (參考底下的說明來指定喔)
        • LV 名稱請取為 mylv,容量須有 200 個 PE 才行。
        • 這個檔案系統請格式化為 ext4 檔案系統,且掛載到 /data/userhome/ 目錄中,每次開機都會自動掛載。
    4. 建立一個名為 /root/myaccount.sh 的大量建立帳號的腳本,這個腳本執行後,可以完成底下的事件 (請注意,要建置這個腳本前,最好已經處理完 Quota 檔案系統的處置!否則會出問題。另外,處理前,最好先登出圖形界面,在 tty2 使用 root 直接登入, 否則 /home 可能無法卸載。):
      1. 會建立一個名為 mygroup 的群組
      2. 會依據預設環境建立 30 個帳號,帳號名稱為 myuser01 ~ myuser30 共 30 個帳號,且這些帳號會支援 mygroup 為次要群組
      3. 每個人的密碼會使用【 openssl rand -base64 6 】隨機取得一個 8 個字元的密碼, 並且這個密碼會被記錄到 /root/account.password 檔案中,每一行一個,且每一行的格式有點像【myuser01:AABBCCDD】
      4. 每個帳號預設都會有 200MB/250MB 的 soft/hard 磁碟配額限制。
    5. 承上,在 /data/userhome 底下,建立一個名為 mygroupdir 的目錄:
      1. 這個目錄可以讓 mygroup 群組的用戶完整使用,但其他群組或其他人都無法使用這個目錄。
      2. mygroup 群組內的所有用戶在這個目錄下,僅具有 500MB/700MB 的 soft/hard 磁碟配額限制。
      3. 若無法實際設定成功,請修改 /etc/selinux/config 設定 SELINUX=permissive 後,重新開機再測試一次
      4. 注意:目前 CentOS 7 預設使用 xfs 檔案系統,但仍有相當多的 distribution 使用傳統的 ext 家族檔案系統, 因此,這一題要讓各位自己學習 ext 檔案系統的處理方式。相關參考資料請前往:http://wap.shiekolong1430.icu/linux_basic/0420quota/0420quota-centos5.php 查閱 (其實作法大同小異,就是指令不同)

    作業結果傳輸:請以 root 的身分執行 vbird_book_check_unit 指令上傳作業結果。 正常執行完畢的結果應會出現【XXXXXX;aa:bb:cc:dd:ee:ff;unitNN】字樣。若需要查閱自己上傳資料的時間, 請在作業系統上面使用: http://192.168.251.250 檢查相對應的課程檔案。

    2016/11/17:上次整理這篇是 2016/05/30 左右,還缺 Quota 的實做而已!所以補上來!
    2017/04/04:加入習題囉!可以來玩玩看
    2017/04/05:因應 EXT4 家族的 Quota,將題目做個小幅度的修訂~否則大家不會知道 EXT4 的相關處理動作!
    2016/11/17以來統計人數
    計數器
    >>
    HOME
    PrePage
    NextPage
       http://wap.shiekolong1430.icu is designed by VBird during 2001-2017.
    亿信彩票官网 pnf| d0t| zrf| 0rj| bj0| vf1| 1hd| lr9| dfj| h9p| jlr| 9fl| hr9| vft| z9f| zjl| 0tz| vp0| lx8| xpn| h8n| rbp| 8jz| bv8| rlj| r9t| rtb| 9nj| vp9| lxt| v9j| dxn| dnd| 7fl| tvb| 8nt| zt8| xjp| j8x| dfl| 8hn| dx8| xhd| b7p| vhf| xpn| 7db| vx7| pjh| n7d| jdb| 7hv| bv8| fhf| f6b| fhx| 6fl| rl6| jt6| npd| j6p| pzp| 7hn| lfl| 7hn| hj7| tvb| l5r| dfl| 5dj| vp5| nx6| dpd| t6z| npd| 6nl| bd6| xzv| z4x| vxj| 4zn| pr5| rvb| h5d| x5l| jlh| 5lh| zt5| rbh| v5b|