Advanced Filesystem Management

本文主要出自於參考轉載 Weithenn, RH133 - Red Hat Enterprise Linux System Administration - RHEL 系統管理實務
Lab1. 建立 Software RAID-1
本次實作因為沒有多的硬碟可供實驗,因此在 hda 硬碟中建立二個 1GB 的空間來建立 Software RAID-1,當然實際情況您可能是使用硬碟代號 hdb + hdc 來建立 Software RAID-1。

 #fdisk /dev/hda                                            //進入 fdisk 互動模式
 #p >> n >> enter >> +1G >> n >> enter >> +1G >> p >> w     //建立二個 1GB 的空間
 #partprobe                                                 //套用剛才的設定值
 #cat /proc/partitions                                      //系統可辨別新增的掛載點
   3     7     987966 hda7
   3     8     987966 hda8
新增完新的空間後建議在建立 Software RAID-1 以前先確定 md0 是否有內容 (是否曾經建立過 Software RAID) 詳細的用法可以 man mdadm,當然若完成後記得修改 /etc/fstab 使系統重開機時也能自動掛載 Software RAID 的空間。
-l 1: Level 1 (也就是 RAID-1)
-n 2: 指定硬碟數量有 2 顆


#cat /dev/md0                                              //確定 md0 沒東西 (cat /proc/mdstat 也可)
 #mdadm -C /dev/md0 -l 1 -n 2 /dev/hda{7,8}                 //建立 Software RAID-1  (man mdadm)
 mdadm: array /dev/md0 started                              
 #mkfs.ext3 -L raid1 /dev/md0                               //格式化 Software RAID-1 分割區 (標籤為 raid1)
 #blkid                                                     //檢查 Block ID
 /dev/md0: LABEL="raid1" UUID="92d0b1c8-13fe-482c-974c-b9f4c658fc12" SEC_TYPE="ext2" TYPE="ext3"
 #mount /dev/md0 /mnt                                       //先掛載該 RAID-1 空間看看
 #df –h
 /dev/md0              950M   18M  885M   2% /mnt
 #cat /proc/mdstat                                          //查看 raid1 資訊
 #mdadm --detail /dev/md0                                   //查看 raid1 資訊
 #mdadm --fail /dev/md0 /dev/hda7                           //設定 hda7 爛了 (假設該硬碟損壞了)
 #mdadm --remove /dev/md0 /dev/hda7                         //移掉 hda7 (實際上應該是關機把該硬碟換掉)
 #mdadm --add /dev/md0 /dev/hda7                            //把新 hda7 加入 (自動 Rebuild raid1)
 #cat /proc/mdstat                                          //查看 Rebuild 百分比
 Personalities : [raid1]
 md0 : active raid1 hda7[0] hda8[1]
       987840 blocks [2/1] [_U]
       [>....................]  recovery =  3.9% (39872/987840) finish=0.7min speed=19936K/sec
Lab2. 建立 LV with LVM,並對應到 FileSystem
[LVM Administrator's Guide for RHEL 4.6] LVM 簡單來說便是把一堆硬碟結合成為一顆大硬碟讓空間使用更具彈性,本次實作為模擬將二顆 1GB 的硬碟 (PV) 結合成為一顆 2GB 的大硬碟 (VG) 在這大硬碟中切割出二顆 512MB 的硬碟 (LV)
PV (Physical Volume):hda7 (1GB)、hda8 (1GB)
VG (Volume Group):myvg (2GB)
LV (Logic Volume):mylv1 (512MB)、mylv2 (512MB)


 #fdisk /dev/hda                                            //進入 fdisk 互動模式
 #p >> n >> enter >> +1G >> n >> enter >> +1G >> p          //建立二個 1GB 的空間
 #t >> 7 >> 8e(LVM) >> t >> 8 >> 8e(LVM) >> p (Linux LVM) >> w     //將剛才建立的二個 1GB 空間類型設定為 8e (LVM)
 #partprobe                                                 //套用剛才的設定值
 #cat /proc/partitions                                      //查看系統分割區資訊 (確認系統可辨別新增的分割區)
    3     7     987966 hda7
    3     8     987966 hda8
 #pvcreate /dev/hda{7,8}                                    //建立 PV 並指定加入 PV 的硬碟
 #pvs                                                       //列出 PV 的狀態
   PV         VG   Fmt  Attr PSize   PFree
   /dev/hda7       lvm2 --   964.81M 964.81M
   /dev/hda8       lvm2 --   964.81M 964.81M
 #vgcreate myvg /dev/hda{7,8}                               //建立 VG 並指定加入 VG 的硬碟 (VG Name 為 myvg)
 #vgs                                                       //列出 VG 的狀態
   VG   #PV #LV #SN Attr   VSize VFree
   myvg   2   0   0 wz--n- 1.88G 1.88G
 #lvcreate -L 512M -n mylv1 myvg                            //建立 LV 並指定大小 (LV Name 為 mylv1)
   Logical volume "mylv1" created
 #lvcreate -L 512M -n mylv2 myvg                            //建立 LV 並指定大小 (LV Name 為 mylv2)
   Logical volume "mylv2" created
 #lvs                                                       //列出 LV 的狀態
   LV    VG   Attr   LSize   Origin Snap%  Move Log Copy%  Convert
   mylv1 myvg -wi-a- 512.00M
   mylv2 myvg -wi-a- 512.00M
 #mkfs.ext3 /dev/myvg/mylv1                                 //格式化 LV (mylv1)
 #mkfs.ext3 /dev/myvg/mylv2                                 //格式化 LV (mylv2)
 #blkid                                                     //查看 Block ID
 /dev/mapper/myvg-mylv2: UUID="d43dd314-b251-4252-8a77-c1b28b8f2a10" SEC_TYPE="ext2" TYPE="ext3"
 /dev/mapper/myvg-mylv1: UUID="affd43af-722c-4af8-a82f-e9a2aa3b3a22" SEC_TYPE="ext2" TYPE="ext3"
 #mkdir /mnt/mylv{1,2}                                      //建立資料夾 (等一下 LV 的掛載點)
 #mount /dev/myvg/mylv1 /mnt/mylv1                          //將 LV (mylv1) 掛載至剛才建立的資料夾上
 #mount /dev/myvg/mylv2 /mnt/mylv2                          //將 LV (mylv2) 掛載至剛才建立的資料夾上
 #df -h                                                     //確定系統可使用該掛載點並寫入資料 (確定 ok 後記得把設定寫入 /etc/fstab 內)
 /dev/mapper/myvg-mylv1              496M   19M  452M   4% /mnt/mylv1
 /dev/mapper/myvg-mylv2              496M   19M  452M   4% /mnt/mylv2
Lab3. 擴大 (Extend) LV with LVM (把 mylv1 從 512M -> 768M)
本次實作為將 Lab2 建立的 LV (mylv1) 空間擴大從原本的 512MB 擴大 256MB 至 768MB,LV 擴大指令步驟如下:
1. lvexntend: 配合參數 -L 來指定要從 VG 上面拉多少空間來增加至指定的 LV 上。
2. resize2fs: 使增加至 LV 上的空間生效 (讓系統可以辨別)。

#lvextend -L +256M /dev/myvg/mylv1                         //增加 256MB 至 mylv1
   Extending logical volume mylv1 to 768.00 MB
   Logical volume mylv1 successfully resized
 #df –h                                                    //目前系統還無法辨別增加的空間 (用 df –h 看仍然沒有增加容量)
 /dev/mapper/myvg-mylv1      496M   19M  452M   4% /mnt/mylv1
 #resize2fs -p /dev/myvg/mylv1                              //使系統能辨別增加的空間
 resize2fs 1.39 (29-May-2006)
 Filesystem at /dev/myvg/mylv1 is mounted on /mnt/mylv1; on-line resizing required
 Performing an on-line resize of /dev/myvg/mylv1 to 786432 (1k) blocks.
 The filesystem on /dev/myvg/mylv1 is now 786432 blocks long.
 #df –h                                                    //系統可辨別增加的空間 (這時用 df –h 才容量才增加)
 /dev/mapper/myvg-mylv1        744M   19M  687M   3% /mnt/mylv1
Lab4. 縮小 (Reduce) LV with LVM (把 mylv2 從 512M -> 256M)
本次實作為將 Lab2 建立的 LV (mylv2) 空間縮小從原本的 512MB 縮小 312MB 至 200MB,LV 縮小指令步驟如下: (執行前請先備份好重要資料!!)
1. umount: LV 縮小無法線上進行,因此請先卸載 LV (mylv2)
2. e2fsck: 將硬碟資料重組及檢查 (避免因為空間縮小造成部份資料遺失)
3. resize2fs: 指定 LV 縮小後的空間 (讓系統可以辨別)
4. lvreduce: 配合參數 -L 縮小 LV 多少空間回 VG 上
5. mount: 完成後再重新掛載縮小後的 LV

 #umount /mnt/mylv2                                         //卸載 LV (mylv2)
 #e2fsck -f /dev/myvg/mylv2                                 //將硬碟資料重組及檢查
 e2fsck 1.39 (29-May-2006)
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 /dev/myvg/mylv2: 11/131072 files (9.1% non-contiguous), 35308/524288 blocks
 #resize2fs /dev/myvg/mylv2 200M                            //指定 LV 縮小後的空間為 200MB
 resize2fs 1.39 (29-May-2006)
 Resizing the filesystem on /dev/myvg/mylv2 to 204800 (1k) blocks.
 The filesystem on /dev/myvg/mylv2 is now 204800 blocks long.
 #lvreduce -L -312M /dev/myvg/mylv2                         //mylv2 減少 312MB (512MB - 312MB = 200MB)
   WARNING: Reducing active logical volume to 200.00 MB
   THIS MAY DESTROY YOUR DATA (filesystem etc.)
 Do you really want to reduce mylv2? [y/n]: y               //輸入 y 確定縮小,系統詢問確定要縮小 LV (mylv2) 空間 
   Reducing logical volume mylv2 to 200.00 MB
   Logical volume mylv2 successfully resized
 #mount /dev/myvg/mylv2 /mnt/mylv2                     //重新掛載 LV (mylv2)
 #df –h                                                    //系統可辨別減少的空間
 /dev/mapper/myvg-mylv2          189M   19M  175M   9% /mnt/mylv2
Lab5. 備份 LV (Dump、Restore)
本次實作為利用 Dump 及 Restore 指令來備份 LV,其中要注意的地方為執行 restore 指令時記得要切換到還原的掛載點才可正確復原

 #df –h
 /dev/mapper/myvg-mylv            1.5G   49M  1.4G   4% /mnt
 #dump -0uf /tmp/backup.dump /dev/myvg/mylv                 //備份 LV (mylv) 其備份檔案名稱為 backup.dump
 #cd /mnt                                                   //執行 resotre 前記得切換到要還原的掛載點
 #restore -rf /tmp/backup.dump                              //開始還原
補充一、如何刪除 Software Raid?
因為要練習建立 Software RAID 熟練度所以如何乾淨的把 Software RAID 設定清除乾淨便是此次的筆記目的。

 #umount /dev/md0                                           //卸載 md0,也請記得將 /etc/fstab 該內容給註解掉
 #mdadm -S /dev/md0                                         //Stop Software Array
 mdadm: stopped /dev/md0
 #blkid                                                     //查看 Block ID 可發現只剩 hda7,8 而 md0 不見了
 /dev/hda7: LABEL="raid1" UUID="bb0c3e7e-141b-4d9e-8321-415820288b83" SEC_TYPE="ext2" TYPE="ext3"
 /dev/hda8: LABEL="raid1" UUID="bb0c3e7e-141b-4d9e-8321-415820288b83" SEC_TYPE="ext2" TYPE="ext3"
 #fdisk /dev/hda                                            //進入 fdisk 互動模式
 #d >> 8 >> d >> 7 >> w                                     //刪除 hda7,8 (實際上為把 Software HDD 給移除掉)
 #partprobe                                                 //系統可辨別已移除指定的掛載點
 #blkid                                                     //查看 Block ID (應該發現 hda7,8 消失了)
 #cat /proc/partitions                                      //查看系統分割區資訊 (應該發現 hda7,8 消失了)
 #rm /dev/md0
補充二、如何刪除 LV、VG、PV?
因為要練習建立 LV、VG、PV 熟練度所以如何乾淨的把 LV、VG、PV 設定清除乾淨便是此次的筆記目的。

 #umount /mnt/mylv{1,2}                                     //卸載 LV (mylv1、mylv2)
 #lvremove myvg                                             //從 VG 裡面移除所有 LV
 Do you really want to remove active logical volume "mylv1"? [y/n]: y   //輸入 y 確定移除 LV (mylv1)
   Logical volume "mylv1" successfully removed
 Do you really want to remove active logical volume "mylv2"? [y/n]: y   //輸入 y 確定移除 LV (mylv2)
   Logical volume "mylv2" successfully removed
 #lvs                                                       //查看 LV 狀態 (空白,因為把 LV 都移除掉了)
 #vgremove myvg                                             //移除 VG
   Volume group "myvg" successfully removed
 #vgs                                                       //查看 VG 狀態 (空白,因為把 VG 都移除掉了)
 #pvremove /dev/hda{7,8}                                    //移除 PV (hda7、hda8)
   Labels on physical volume "/dev/hda7" successfully wiped
   Labels on physical volume "/dev/hda8" successfully wiped
 #pvs                                                       //查看 PV 狀態 (空白,因為把 PV 都移除掉了)
 #fdisk /dev/hda                                            //進入 fdisk 對話模式
 #p >> d >> 8 >> d >> 7 >> p >> w                           //移除 hda7、hda8
 #partprobe                                                 //使系統辨別已移除 hda7、hda8
 #cat /proc/partitions                                      //查看系統分割區 (確認 hda7、hda8 已移除)
補充三、 /etc/fstab 內容寫錯系統無法正常開機?
因為此單元的實作常常需要修改 FileSystem Table (/etc/fstab),而若您對於此設定檔內容修改錯誤時當系統重開機時便會造成掛載錯誤無法繼續開機,以下簡述解決步驟:
1. 系統重新開機時卡住系統要求輸入 root 密碼後登入系統
2. 使用 mount 指令檢查 根目錄 (/) 為哪個裝置代號 (ex. /dev/hda3)
3. 使用此指令將根目錄變成可讀寫 mount –o remount,rw /dev/hda3 /
4. 上述指令執行成功後,這樣您修改 /etc/fstab 內容才會生效 (否則會為唯讀狀態無法寫入),請把 /etc/fstab 內容修改正確
5. 修改完成後您可執行 init 3 or 5 直接開機或執行 reboot 重開機即可

留言

這個網誌中的熱門文章

Json概述以及python對json的相關操作

Docker容器日誌查看與清理

利用 Keepalived 提供 VIP