1. 程式人生 > >centos 6 lvm 擴容超過16T的一個坑(unknown device)

centos 6 lvm 擴容超過16T的一個坑(unknown device)

首先建立lvm(2個8T的盤,由於硬體製造商的原因8T的盤在作業系統識別來看並沒有8T)

parted /dev/sdb
parted /dev/sdc
    (parted) mklabel gpt                     #標記為gpt格式的硬碟
    (parted) mkpart                            #分割槽
    檔案系統型別?  [ext2]? ext4       #ext4檔案系統
    起始點? 0
    結束點?-1
    toggle lvm                                     #給分割槽打上lvm標籤
mkfs.ext4 /dev/sdb1                        #格式化
mkfs.ext4 /dev/sdc1                        #格式化
tune2fs -m 1 /dev/sdb1                   #調整系統為root使用者保留的空間,預設為5%
tune2fs -m 1 /dev/sdc1

pvcreate  /dev/sdb1 /dev/sdc1                         #建立pv
vgcreate vr_vg  /dev/sdb1  /dev/sdc1              #建立vg
vgdisplay                                                         #檢視vg所有的PE,預設4M為一個PE
lvcreate -l 3815442 -n lv_vr vg_vr                   #將所有的空間建立一個lv
#第一次建立pv就這樣結束了,並沒有遇見任何坑;但是第二次擴充套件的時候卻遇見了一個大坑

#由於業務的變遷,16T的硬碟已經不再夠用,需要將剩下的一塊盤(8T)擴充套件到lvm中
擴充套件lvm:
    首先將硬碟分割槽格式(參照上面的步驟)
    pvcreate  /dev/sdd1
    vgvgextend   vg_vr  /dev/sdd1                                          #擴充套件vg
    lvresize  -l  +1907720  /dev/mapper/vr_vg-vr_lv               #擴充套件lv

    執行lvdisplay可以看見lv已經擴充套件了,但是使用df -hl檢視的時候分割槽還是這麼大,這時候我執行 resize2fs /dev/mapper/vr_vg-vr_lv 重新整理邏輯卷的時候 "坑出現了"

    $ resize2fs  /dev/mapper/vr_vg-vr_lv
        resize2fs: New size too large to be expressed in 32 bits                            
        #報錯了,說32檔案系統最大隻支援16T的分割槽,emmm 出現問題就要解決,沒辦法只能 百度了結果沒有找到換Google試試,最後總算找到了解決辦法

    https://askubuntu.com/questions/779754/how-do-i-resize-an-ext4-partition-beyond-the-16tb-limit      
    #Google找到的文件,國內也可以訪問

    更具文件的相關描述是因為 resize2fs 低版本有個bug(其實也不算bug),既然知道了原因那麼接開始幹,將resize2fs升級為最新版本

    umount /dev/mapper/vr_vg-vr_lv            #先把掛載去掉
    git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs       
        #下載resize2fs 版本必須高於1.44
    ./configure                               #檢查依賴關係(一般都不會遇見什麼坑)
    make                                       #編譯,別執行make install

    cd resize/
    ./resize2fs /dev/mapper/vr_vg-vr_lv               #執行這條命令會把32位檔案系統轉換為64為檔案系統(分割槽小於16T不會裝換),並且會擴大超級塊的數量
    #轉換完之後提示需要使用e2fsck -f 檢查分割槽

    e2fsck -f  /dev/mapper/vr_vg-vr_lv              #擦,又報錯,說e2fsck不支援64位的檔案系統, emmmmm, 想了一下可能 e2fsck 和 resize2fs 一樣版本過低不支援64位檔案系統,用最新版本試試,e2fsck和resize2fs是由一個包提供的
    cd ..
    cd e2fsck/
    ./e2fsck  /dev/mapper/vr_vg-vr_lv                    #果然使用新版本的e2fsck就可以了
    ./resize/resize2fs /dev/mapper/vr_vg-vr_lv      #然後重新整理檔案系統
    df -hl                                                                #看見22T分割槽大小(硬體製造商的鍋)

    #到這兒我心想應該沒問題了,結果更大的坑還在後面等著我
    執行 lvdisplay 看看沒問題
    執行 vgdisplay 看看沒問題
    執行 pvdisplay 看看.....坑來了

    --- Physical volume ---
    PV Name               /dev/sdb1
    VG Name               vr_vg
    PV Size               7.28 TiB / not usable 1.30 MiB
    Allocatable           yes (but full)
    PE Size               4.00 MiB
    Total PE              1907721
    Free PE               0
    Allocated PE          1907721
    PV UUID               PCFu9x-SEGH-W941-0hc9-NHBb-0Nox-QdT79y

    --- Physical volume ---
    PV Name               /dev/sdc1
    VG Name               vr_vg
    PV Size               7.28 TiB / not usable 1.30 MiB
    Allocatable           yes (but full)
    PE Size               4.00 MiB
    Total PE              1907721
    Free PE               0
    Allocated PE          1907721
    PV UUID               VHZUiE-in7U-RljG-WrvU-rO5u-lLf4-gpuMqE

    --- Physical volume ---
    PV Name               unknown device                                              #未識別的裝置????這是什麼情況
    VG Name               vr_vg
    PV Size               7.28 TiB / not usable 4.37 MiB
    Allocatable           yes (but full)
    PE Size               4.00 MiB
    Total PE              1907720
    Free PE               0
    Allocated PE          1907720
    PV UUID               x38382-rjUg-Fj5B-h5hC-LvrK-tq2h-HcZrkJ

#沒辦法解決了半天沒還是解決不了.....,重啟一下試試,結果一重啟機器起不來了,叫機房的人看看....最後發現是系統檢查 /dev/mapper/vr_vg-vr_lv 報錯了,果然是個坑啊,沒辦法機房的人解決不了,自己去一下機房解決吧!!!

#來到機房第一件事進單使用者模式,結果進不去...原因是因為fsck檢查/dev/mapper/vr_vg-vr_lv失敗

/dev/mapper/vr_vg-vr_lv                   /data                   ext4    defaults       1 2                #/etc/fstab配置

硬碟檢查不過進不了系統,那麼就只能把伺服器的系統盤卸下來掛載到其他的伺服器上,修改掛載盤的 etc/fstab 把掛載lvm的哪行去掉,然後放回原來的伺服器

#做完這些操作之後成功進入系統....但是檢查lvm卻發現/dev/mapper/不存在vr_vg-vr_lv.... 這是什麼情況???

lvdisplay                 #沒問題一切正常
vgdisplay                 #沒問題一切正常
pvdisplay                 #/dev/sdd還是顯示unknown device

那麼先解決unknown device這個問題吧:
  首先肯定要卸掉/dev/sdd這個盤:
    vgreduce vr_vg --removemissing --force              #強行卸掉vr_vg裡面未知的裝置

    lvdisplay             #檢視lv大小還是22T,但是現在兩塊盤只有16T,所有要將lvm恢復成兩塊盤時候的大小

  恢復lvm:
    cd /etc/lvm/          #在lvm目錄下有兩個主要的目錄 archive:儲存lvm每次發生改變的源資料  backup:lvm的備份檔案
    cd archive/           #找到lvm還是兩塊盤的時候的備份

    cp vr_vg_00002-1529881488.vg ../backup/     #vgcfgrestore 恢復時只會在這個目錄查詢
    cd ../backup/
    mv vr_vg vr_vg.back1                        #備份當前的vr_vg(vg的名字)
    mv vr_vg_00002-1529881488.vg vr_vg
    vgcfgrestore vr_vg                          #恢復備份

    lvdisplay                             #檢視lv大小已經恢復成16T,現在需要把剩下的那塊盤加上

    首先還是將硬碟分割槽格式,然後使用pvcreate建立pv,使用vgextend擴充套件vg,使用lvresize擴充套件lv

    擴充套件完後/dev/mapper/還是不存在vr_vg-vr_lv,那是因為vg還沒有啟用

    vgchange -ay vr_vg            #啟用vg,這個時候再去檢視/dev/mapper/發現vr_vg-vr_lv已經有了,但是這時候還不能直接使用,因為剛加了的盤還沒有執行resize2fs

    ./e2fsck -f  /dev/mapper/vr_vg-vr_lv            #先檢查硬碟(因為lv已經擴充套件過一次了所以會提示實際的塊小於應有的塊,是否檢查,回覆 y 就行,當檢查到所有的塊之後會詢問你是否將這些加入現有分割槽,回覆y即可)

    ./resize/resize2fs /dev/mapper/vr_vg-vr_lv      #重新整理lv大小

    最後重新整理完之後,一切正常,由於lvm的線性儲存,資料也沒有丟失

  最後:
    修改
      /etc/fstab配置/dev/mapper/vr_vg-vr_lv                   /data                   ext4    defaults       0 0