<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 14.3 邏輯卷軸管理員 (Logical Volume Manager) 想像一個情況,你在當初規劃主機的時候將 /home 只給他 50G ,等到使用者眾多之后導致這個 filesystem 不夠大, 此時你能怎么作?多數的朋友都是這樣:再加一顆新硬盤,然后重新分區、格式化,將 /home 的數據完整的復制過來, 然后將原本的 partition 卸載重新掛載新的 partition 。啊!好忙碌啊!若是第二次分區卻給的容量太多!導致很多磁盤容量被浪費了! 你想要將這個 partition 縮小時,又該如何作?將上述的流程再搞一遍!唉~煩死了,尤其復制很花時間ㄟ~有沒有更簡單的方法呢? 有的!那就是我們這個小節要介紹的 LVM 這玩意兒! LVM 的重點在于“可以彈性的調整 filesystem 的容量!”而并非在于性能與數據保全上面。 需要文件的讀寫性能或者是數據的可靠性,請參考前面的 RAID 小節。 LVM 可以整合多個實體 partition 在一起, 讓這些 partitions 看起來就像是一個磁盤一樣!而且,還可以在未來新增或移除其他的實體 partition 到這個 LVM 管理的磁盤當中。 如此一來,整個磁盤空間的使用上,實在是相當的具有彈性啊! 既然 LVM 這么好用,那就讓我們來瞧瞧這玩意吧! ### 14.3.1 什么是 LVM: PV, PE, VG, LV 的意義 LVM 的全名是 Logical Volume Manager,中文可以翻譯作邏輯卷軸管理員。之所以稱為“卷軸”可能是因為可以將 filesystem 像卷軸一樣伸長或縮短之故吧!LVM 的作法是將幾個實體的 partitions (或 disk) 通過軟件組合成為一塊看起來是獨立的大磁盤 (VG) ,然后將這塊大磁盤再經過分區成為可使用分區 (LV), 最終就能夠掛載使用了。但是為什么這樣的系統可以進行 filesystem 的擴充或縮小呢?其實與一個稱為 PE 的項目有關! 下面我們就得要針對這幾個項目來好好聊聊! * Physical Volume, PV, 實體卷軸 我們實際的 partition (或 Disk) 需要調整系統識別碼 (system ID) 成為 8e (LVM 的識別碼),然后再經過 pvcreate 的指令將他轉成 LVM 最底層的實體卷軸 (PV) ,之后才能夠將這些 PV 加以利用! 調整 system ID 的方是就是通過 [gdisk](../Text/index.html#gdisk) 啦! * Volume Group, VG, 卷軸群組 所謂的 LVM 大磁盤就是將許多 PV 整合成這個 VG 的東西就是啦!所以 VG 就是 LVM 組合起來的大磁盤!這么想就好了。 那么這個大磁盤最大可以到多少容量呢?這與下面要說明的 PE 以及 LVM 的格式版本有關喔~在默認的情況下, 使用 32位的 Linux 系統時,基本上 LV 最大僅能支持到 65534 個 PE 而已,若使用默認的 PE 為 4MB 的情況下, 最大容量則僅能達到約 256GB 而已~不過,這個問題在 64位的 Linux 系統上面已經不存在了!LV 幾乎沒有啥容量限制了! * Physical Extent, PE, 實體范圍區塊 LVM 默認使用 4MB 的 PE 區塊,而 LVM 的 LV 在 32 位系統上最多僅能含有 65534 個 PE (lvm1 的格式),因此默認的 LVM 的 LV 會有 4M*65534/(1024M/G)=256G。這個 PE 很有趣喔!他是整個 LVM 最小的儲存區塊,也就是說,其實我們的文件數據都是借由寫入 PE 來處理的。簡單的說,這個 PE 就有點像文件系統里面的 block 大小啦。 這樣說應該就比較好理解了吧?所以調整 PE 會影響到 LVM 的最大容量喔!不過,在 CentOS 6.x 以后,由于直接使用 lvm2 的各項格式功能,以及系統轉為 64 位,因此這個限制已經不存在了。 * Logical Volume, LV, 邏輯卷軸 最終的 VG 還會被切成 LV,這個 LV 就是最后可以被格式化使用的類似分區的咚咚了!那么 LV 是否可以隨意指定大小呢? 當然不可以!既然 PE 是整個 LVM 的最小儲存單位,那么 LV 的大小就與在此 LV 內的 PE 總數有關。 為了方便使用者利用 LVM 來管理其系統,因此 LV 的設備文件名通常指定為“ /dev/vgname/lvname ”的樣式! 此外,我們剛剛有談到 LVM 可彈性的變更 filesystem 的容量,那是如何辦到的?其實他就是通過“交換 PE ”來進行數據轉換, 將原本 LV 內的 PE 移轉到其他設備中以降低 LV 容量,或將其他設備的 PE 加到此 LV 中以加大容量! VG、LV 與 PE 的關系有點像下圖: ![PE 與 VG 的相關性圖示](https://box.kancloud.cn/2016-05-13_573573799ed03.gif)圖14.3.1、PE 與 VG 的相關性圖示 如上圖所示,VG 內的 PE 會分給虛線部分的 LV,如果未來這個 VG 要擴充的話,加上其他的 PV 即可。 而最重要的 LV 如果要擴充的話,也是通過加入 VG 內沒有使用到的 PE 來擴充的! * 實作流程 通過 PV, VG, LV 的規劃之后,再利用 [mkfs](../Text/index.html#mkfs) 就可以將你的 LV 格式化成為可以利用的文件系統了!而且這個文件系統的容量在未來還能夠進行擴充或減少, 而且里面的數據還不會被影響!實在是很“福氣啦!”那實作方面要如何進行呢?很簡單呢! 整個流程由基礎到最終的結果可以這樣看: ![LVM 各元件的實現流程圖示](https://box.kancloud.cn/2016-05-13_57357379b0dd5.jpg)圖14.3.2、LVM 各元件的實現流程圖示 如此一來,我們就可以利用 LV 這個玩意兒來進行系統的掛載了。不過,你應該要覺得奇怪的是, 那么我的數據寫入這個 LV 時,到底他是怎么寫入硬盤當中的? 呵呵!好問題~其實,依據寫入機制的不同,而有兩種方式: * 線性模式 (linear):假如我將 /dev/vda1, /dev/vdb1 這兩個 partition 加入到 VG 當中,并且整個 VG 只有一個 LV 時,那么所謂的線性模式就是:當 /dev/vda1 的容量用完之后,/dev/vdb1 的硬盤才會被使用到, 這也是我們所建議的模式。 * 交錯模式 (triped):那什么是交錯模式?很簡單啊,就是我將一筆數據拆成兩部分,分別寫入 /dev/vda1 與 /dev/vdb1 的意思,感覺上有點像 RAID 0 啦!如此一來,一份數據用兩顆硬盤來寫入,理論上,讀寫的性能會比較好。 基本上,LVM 最主要的用處是在實現一個可以彈性調整容量的文件系統上, 而不是在創建一個性能為主的磁盤上,所以,我們應該利用的是 LVM 可以彈性管理整個 partition 大小的用途上,而不是著眼在性能上的。因此, LVM 默認的讀寫模式是線性模式啦! 如果你使用 triped 模式,要注意,當任何一個 partition “歸天”時,所有的數據都會“損毀”的! 所以啦,不是很適合使用這種模式啦!如果要強調性能與備份,那么就直接使用 RAID 即可, 不需要用到 LVM 啊! ### 14.3.2 LVM 實作流程 LVM 必需要核心有支持且需要安裝 lvm2 這個軟件,好佳在的是, CentOS 與其他較新的 distributions 已經默認將 lvm 的支持與軟件都安裝妥當了!所以你不需要擔心這方面的問題!用就對了! 假設你剛剛也是通過同樣的方法來處理鳥哥的測試機 RAID 實作,那么現在應該有 5 個可用的分區才對! 不過,建議你還是得要修改一下 system ID 比較好!將 RAID 的 fd 改為 LVM 的 8e 吧!現在,我們實作 LVM 有點像下面的模樣: * 使用 4 個 partition ,每個 partition 的容量均為 1GB 左右,且 system ID 需要為 8e; * 全部的 partition 整合成為一個 VG,VG 名稱設置為 vbirdvg;且 PE 的大小為 16MB; * 創建一個名為 vbirdlv 的 LV,容量大約 2G 好了! * 最終這個 LV 格式化為 xfs 的文件系統,且掛載在 /srv/lvm 中 * 0\. Disk 階段 (實際的磁盤) 鳥哥就不仔細的介紹實體分區了,請您自行參考[第七章的 gdisk](../Text/index.html#gdisk) 來達成下面的范例: ``` [root@study ~]# gdisk -l /dev/vda Number Start (sector) End (sector) Size Code Name 1 2048 6143 2.0 MiB EF02 2 6144 2103295 1024.0 MiB 0700 3 2103296 65026047 30.0 GiB 8E00 4 65026048 67123199 1024.0 MiB 8300 Linux filesystem 5 67123200 69220351 1024.0 MiB 8E00 Linux LVM 6 69220352 71317503 1024.0 MiB 8E00 Linux LVM 7 71317504 73414655 1024.0 MiB 8E00 Linux LVM 8 73414656 75511807 1024.0 MiB 8E00 Linux LVM 9 75511808 77608959 1024.0 MiB 8E00 Linux LVM # 其實 system ID 不改變也沒關系!只是為了讓我們管理員清楚知道該 partition 的內容, # 所以這里建議還是修訂成正確的磁盤內容較佳! ``` 上面的 /dev/vda{5,6,7,8} 這 4 個分區就是我們的實體分區!也就是下面會實際用到的信息!至于 /dev/vda9 則先保留下來不使用。 注意看,那個 8e 的出現會導致 system 變成“ Linux LVM ”哩!其實沒有設置成為 8e 也沒關系, 不過某些 LVM 的偵測指令可能會偵測不到該 partition 就是了!接下來,就一個一個的處理各流程吧! * 1\. PV 階段 要創建 PV 其實很簡單,只要直接使用 pvcreate 即可!我們來談一談與 PV 有關的指令吧! * pvcreate :將實體 partition 創建成為 PV ; * pvscan :搜尋目前系統里面任何具有 PV 的磁盤; * pvdisplay :顯示出目前系統上面的 PV 狀態; * pvremove :將 PV 屬性移除,讓該 partition 不具有 PV 屬性。 那就直接來瞧一瞧吧! ``` # 1\. 檢查有無 PV 在系統上,然后將 /dev/vda{5-8} 創建成為 PV 格式 [root@study ~]# pvscan PV /dev/vda3 VG centos lvm2 [30.00 GiB / 14.00 GiB free] Total: 1 [30.00 GiB] / in use: 1 [30.00 GiB] / in no VG: 0 [0 ] # 其實安裝的時候,我們就有使用 LVM 了喔!所以會有 /dev/vda3 存在的! [root@study ~]# pvcreate /dev/vda{5,6,7,8} Physical volume "/dev/vda5" successfully created Physical volume "/dev/vda6" successfully created Physical volume "/dev/vda7" successfully created Physical volume "/dev/vda8" successfully created # 這個指令可以一口氣創建這四個 partition 成為 PV 啦!注意大括號的用途 [root@study ~]# pvscan PV /dev/vda3 VG centos lvm2 [30.00 GiB / 14.00 GiB free] PV /dev/vda8 lvm2 [1.00 GiB] PV /dev/vda5 lvm2 [1.00 GiB] PV /dev/vda7 lvm2 [1.00 GiB] PV /dev/vda6 lvm2 [1.00 GiB] Total: 5 [34.00 GiB] / in use: 1 [30.00 GiB] / in no VG: 4 [4.00 GiB] # 這就分別顯示每個 PV 的信息與系統所有 PV 的信息。尤其最后一行,顯示的是: # 整體 PV 的量 / 已經被使用到 VG 的 PV 量 / 剩余的 PV 量 # 2\. 更詳細的列示出系統上面每個 PV 的個別信息: [root@study ~]# pvdisplay /dev/vda5 "/dev/vda5" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/vda5 &lt;==實際的 partition 設備名稱 VG Name &lt;==因為尚未分配出去,所以空白! PV Size 1.00 GiB &lt;==就是容量說明 Allocatable NO &lt;==是否已被分配,結果是 NO PE Size 0 &lt;==在此 PV 內的 PE 大小 Total PE 0 &lt;==共分區出幾個 PE Free PE 0 &lt;==沒被 LV 用掉的 PE Allocated PE 0 &lt;==尚可分配出去的 PE 數量 PV UUID Cb717z-lShq-6WXf-ewEj-qg0W-MieW-oAZTR6 # 由于 PE 是在創建 VG 時才給予的參數,因此在這里看到的 PV 里頭的 PE 都會是 0 # 而且也沒有多余的 PE 可供分配 (allocatable)。 ``` 講是很難,作是很簡單!這樣就將 PV 創建了起來啰!簡單到不行吧! ^_^!繼續來玩 VG 去! * 2\. VG 階段 創建 VG 及 VG 相關的指令也不少,我們來看看: * vgcreate :就是主要創建 VG 的指令啦!他的參數比較多,等一下介紹。 * vgscan :搜尋系統上面是否有 VG 存在? * vgdisplay :顯示目前系統上面的 VG 狀態; * vgextend :在 VG 內增加額外的 PV ; * vgreduce :在 VG 內移除 PV; * vgchange :設置 VG 是否啟動 (active); * vgremove :刪除一個 VG 啊! 與 PV 不同的是, VG 的名稱是自訂的!我們知道 PV 的名稱其實就是 partition 的設備文件名, 但是這個 VG 名稱則可以隨便你自己取啊!在下面的例子當中,我將 VG 名稱取名為 vbirdvg 。創建這個 VG 的流程是這樣的: ``` [root@study ~]# vgcreate [-s N[mgt]] VG名稱 PV名稱 選項與參數: -s :后面接 PE 的大小 (size) ,單位可以是 m, g, t (大小寫均可) # 1\. 將 /dev/vda5-7 創建成為一個 VG,且指定 PE 為 16MB 喔! [root@study ~]# vgcreate -s 16M vbirdvg /dev/vda{5,6,7} Volume group "vbirdvg" successfully created [root@study ~]# vgscan Reading all physical volumes. This may take a while... Found volume group "vbirdvg" using metadata type lvm2 # 我們手動制作的 Found volume group "centos" using metadata type lvm2 # 之前系統安裝時作的 [root@study ~]# pvscan PV /dev/vda5 VG vbirdvg lvm2 [1008.00 MiB / 1008.00 MiB free] PV /dev/vda6 VG vbirdvg lvm2 [1008.00 MiB / 1008.00 MiB free] PV /dev/vda7 VG vbirdvg lvm2 [1008.00 MiB / 1008.00 MiB free] PV /dev/vda3 VG centos lvm2 [30.00 GiB / 14.00 GiB free] PV /dev/vda8 lvm2 [1.00 GiB] Total: 5 [33.95 GiB] / in use: 4 [32.95 GiB] / in no VG: 1 [1.00 GiB] # 嘿嘿!發現沒!有三個 PV 被用去,剩下 1 個 /dev/vda8 的 PV 沒被用掉! [root@study ~]# vgdisplay vbirdvg --- Volume group --- VG Name vbirdvg System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size 2.95 GiB &lt;==整體的 VG 容量有這么大 PE Size 16.00 MiB &lt;==內部每個 PE 的大小 Total PE 189 &lt;==總共的 PE 數量共有這么多! Alloc PE / Size 0 / 0 Free PE / Size 189 / 2.95 GiB &lt;==尚可配置給 LV 的 PE數量/總容量有這么多! VG UUID Rx7zdR-y2cY-HuIZ-Yd2s-odU8-AkTW-okk4Ea # 最后那三行指的就是 PE 能夠使用的情況!由于尚未切出 LV,因此所有的 PE 均可自由使用。 ``` 這樣就創建一個 VG 了!假設我們要增加這個 VG 的容量,因為我們還有 /dev/vda8 嘛!此時你可以這樣做: ``` # 2\. 將剩余的 PV (/dev/vda8) 丟給 vbirdvg 吧! [root@study ~]# vgextend vbirdvg /dev/vda8 Volume group "vbirdvg" successfully extended [root@study ~]# vgdisplay vbirdvg ....(前面省略).... VG Size 3.94 GiB PE Size 16.00 MiB Total PE 252 Alloc PE / Size 0 / 0 Free PE / Size 252 / 3.94 GiB # 基本上,不難吧!這樣就可以抽換整個 VG 的大小啊! ``` 我們多了一個設備喔!接下來為這個 vbirdvg 進行分區吧!通過 LV 功能來處理! * 3\. LV 階段 創造出 VG 這個大磁盤之后,再來就是要創建分區區啦!這個分區區就是所謂的 LV 啰!假設我要將剛剛那個 vbirdvg 磁盤,分區成為 vbirdlv ,整個 VG 的容量都被分配到 vbirdlv 里面去!先來看看能使用的指令后,就直接工作了先! * lvcreate :創建 LV 啦! * lvscan :查詢系統上面的 LV ; * lvdisplay :顯示系統上面的 LV 狀態啊! * lvextend :在 LV 里面增加容量! * lvreduce :在 LV 里面減少容量; * lvremove :刪除一個 LV ! * lvresize :對 LV 進行容量大小的調整! ``` [root@study ~]# lvcreate [-L N[mgt]] [-n LV名稱] VG名稱 [root@study ~]# lvcreate [-l N] [-n LV名稱] VG名稱 選項與參數: -L :后面接容量,容量的單位可以是 M,G,T 等,要注意的是,最小單位為 PE, 因此這個數量必須要是 PE 的倍數,若不相符,系統會自行計算最相近的容量。 -l :后面可以接 PE 的“個數”,而不是數量。若要這么做,得要自行計算 PE 數。 -n :后面接的就是 LV 的名稱啦! 更多的說明應該可以自行查閱吧! man lvcreate # 1\. 將 vbirdvg 分 2GB 給 vbirdlv 喔! [root@study ~]# lvcreate -L 2G -n vbirdlv vbirdvg Logical volume "vbirdlv" created # 由于本案例中每個 PE 為 16M ,如果要用 PE 的數量來處理的話,那使用下面的指令也 OK喔! # lvcreate -l 128 -n vbirdlv vbirdvg [root@study ~]# lvscan ACTIVE '/dev/vbirdvg/vbirdlv' [2.00 GiB] inherit &lt;==新增加的一個 LV 啰! ACTIVE '/dev/centos/root' [10.00 GiB] inherit ACTIVE '/dev/centos/home' [5.00 GiB] inherit ACTIVE '/dev/centos/swap' [1.00 GiB] inherit [root@study ~]# lvdisplay /dev/vbirdvg/vbirdlv --- Logical volume --- LV Path /dev/vbirdvg/vbirdlv # 這個是 LV 的全名喔! LV Name vbirdlv VG Name vbirdvg LV UUID QJJrTC-66sm-878Y-o2DC-nN37-2nFR-0BwMmn LV Write Access read/write LV Creation host, time study.centos.vbird, 2015-07-28 02:22:49 +0800 LV Status available # open 0 LV Size 2.00 GiB # 容量就是這么大! Current LE 128 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:3 ``` 如此一來,整個 LV partition 也準備好啦!接下來,就是針對這個 LV 來處理啦!要特別注意的是, VG 的名稱為 vbirdvg , 但是 LV 的名稱必須使用全名!亦即是 /dev/vbirdvg/vbirdlv 才對喔! 后續的處理都是這樣的!這點初次接觸 LVM 的朋友很容易搞錯! * 文件系統階段 這個部分鳥哥我就不再多加解釋了!直接來進行吧! ``` # 1\. 格式化、掛載與觀察我們的 LV 吧! [root@study ~]# mkfs.xfs /dev/vbirdvg/vbirdlv &lt;==注意 LV 全名! [root@study ~]# mkdir /srv/lvm [root@study ~]# mount /dev/vbirdvg/vbirdlv /srv/lvm [root@study ~]# df -Th /srv/lvm Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.0G 33M 2.0G 2% /srv/lvm [root@study ~]# cp -a /etc /var/log /srv/lvm [root@study ~]# df -Th /srv/lvm Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.0G 152M 1.9G 8% /srv/lvm &lt;==確定是可用的啊! ``` 通過這樣的功能,我們現在已經創建好一個 LV 了!你可以自由的應用 /srv/lvm 內的所有資源! ### 14.3.3 放大 LV 容量 我們不是說 LVM 最大的特色就是彈性調整磁盤容量嗎?好!那我們就來處理一下,如果要放大 LV 的容量時, 該如何進行完整的步驟呢?其實一點都不難喔!如果你回去看[圖 14.3.2](../Text/index.html#fig14.3.2) 的話,那么你會知道放大文件系統時, 需要下面這些流程的: 1. VG 階段需要有剩余的容量:因為需要放大文件系統,所以需要放大 LV,但是若沒有多的 VG 容量, 那么更上層的 LV 與文件系統就無法放大的。因此,你得要用盡各種方法來產生多的 VG 容量才行。一般來說,如果 VG 容量不足, 最簡單的方法就是再加硬盤!然后將該硬盤使用上面講過的 pvcreate 及 vgextend 增加到該 VG 內即可! 2. LV 階段產生更多的可用容量:如果 VG 的剩余容量足夠了, 此時就可以利用 lvresize 這個指令來將剩余容量加入到所需要增加的 LV 設備內!過程相當簡單! 3. 文件系統階段的放大:我們的 Linux 實際使用的其實不是 LV 啊!而是 LV 這個設備內的文件系統! 所以一切最終還是要以文件系統為依歸!目前在 Linux 環境下,鳥哥測試過可以放大的文件系統有 XFS 以及 EXT 家族! 至于縮小僅有 EXT 家族,目前 XFS 文件系統并不支持文件系統的容量縮小喔!要注意!要注意!XFS 放大文件系統通過簡單的 xfs_growfs 指令即可! 其中最后一個步驟最重要!我們在[第七章](../Text/index.html)當中知道, 整個文件系統在最初格式化的時候就創建了 inode/block/superblock 等信息,要改變這些信息是很難的! 不過因為文件系統格式化的時候創建的是多個 block group ,因此我們可以通過在文件系統當中增加 block group 的方式來增減文件系統的量!而增減 block group 就是利用 xfs_growfs 啰!所以最后一步是針對文件系統來處理的, 前面幾步則是針對 LVM 的實際容量大小! ![鳥哥的圖示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鳥哥的圖示") **Tips** 因此,嚴格說起來,放大文件系統并不是沒有進行“格式化”喔!放大文件系統時,格式化的位置在于該設備后來新增的部份,設備的前面已經存在的文件系統則沒有變化。 而新增的格式化過的數據,再反饋回原本的 supberblock 這樣而已! 讓我們來實作個范例,假設我們想要針對 /srv/lvm 再增加 500M 的容量,該如何處置? ``` # 1\. 由前面的過程我們知道 /srv/lvm 是 /dev/vbirdvg/vbirdlv 這個設備,所以檢查 vbirdvg 吧! [root@study ~]# vgdisplay vbirdvg --- Volume group --- VG Name vbirdvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 3.94 GiB PE Size 16.00 MiB Total PE 252 Alloc PE / Size 128 / 2.00 GiB Free PE / Size 124 / 1.94 GiB # 看起來剩余容量確實超過 500M 的! VG UUID Rx7zdR-y2cY-HuIZ-Yd2s-odU8-AkTW-okk4Ea # 既然 VG 的容量夠大了!所以直接來放大 LV 吧!! # 2\. 放大 LV 吧!利用 lvresize 的功能來增加! [root@study ~]# lvresize -L +500M /dev/vbirdvg/vbirdlv Rounding size to boundary between physical extents: 512.00 MiB Size of logical volume vbirdvg/vbirdlv changed from 2.00 GiB (128 extents) to 2.50 GiB (160 extents). Logical volume vbirdlv successfully resized # 這樣就增加了 LV 了喔!lvresize 的語法很簡單,基本上同樣通過 -l 或 -L 來增加! # 若要增加則使用 + ,若要減少則使用 - !詳細的選項請參考 man lvresize 啰! [root@study ~]# lvscan ACTIVE '/dev/vbirdvg/vbirdlv' [2.50 GiB] inherit ACTIVE '/dev/centos/root' [10.00 GiB] inherit ACTIVE '/dev/centos/home' [5.00 GiB] inherit ACTIVE '/dev/centos/swap' [1.00 GiB] inherit # 可以發現 /dev/vbirdvg/vbirdlv 容量由 2G 增加到 2.5G 啰! [root@study ~]# df -Th /srv/lvm Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.0G 111M 1.9G 6% /srv/lvm ``` 看到了吧?最終的結果中 LV 真的有放大到 2.5GB 喔!但是文件系統卻沒有相對增加!而且,我們的 LVM 可以線上直接處理,并不需要特別給他 umount 哩!真是人性化! 但是還是得要處理一下文件系統的容量啦!開始觀察一下文件系統,然后使用 xfs_growfs 來處理一下吧! ``` # 3.1 先看一下原本的文件系統內的 superblock 記錄情況吧! [root@study ~]# xfs_info /srv/lvm meta-data=/dev/mapper/vbirdvg-vbirdlv isize=256 agcount=4, agsize=131072 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=524288, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@study ~]# xfs_growfs /srv/lvm # 這一步驟才是最重要的! [root@study ~]# xfs_info /srv/lvm meta-data=/dev/mapper/vbirdvg-vbirdlv isize=256 agcount=5, agsize=131072 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=655360, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@study ~]# df -Th /srv/lvm Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.5G 111M 2.4G 5% /srv/lvm [root@study ~]# ls -l /srv/lvm drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc drwxr-xr-x. 16 root root 4096 Jul 28 00:01 log # 剛剛復制進去的數據可還是存在的喔!并沒有消失不見! ``` 在上表中,注意看兩次 xfs_info 的結果,你會發現到 1)整個 block group (agcount) 的數量增加一個!那個 block group 就是紀錄新的設備容量之文件系統所在! 而你也會 2)發現整體的 block 數量增加了!這樣整個文件系統就給他放大了!同時,使用 df 去查閱時,就真的看到增加的量了吧! 文件系統的放大可以在 On-line 的環境下實作耶!超棒的! 最后,請注意!目前的 XFS 文件系統中,并沒有縮小文件系統容量的設計!也就是說,文件系統只能放大不能縮小喔!如果你想要保有放大、縮小的本事, 那還請回去使用 EXT 家族最新的 EXT4 文件系統啰!XFS 目前是辦不到的! ### 14.3.4 使用 LVM thin Volume 讓 LVM 動態自動調整磁盤使用率 想像一個情況,你有個目錄未來會使用到大約 5T 的容量,但是目前你的磁盤僅有 3T,問題是,接下來的兩個月你的系統都還不會超過 3T 的容量, 不過你想要讓用戶知道,就是他最多有 5T 可以使用就是了!而且在一個月內你確實可以將系統提升到 5T 以上的容量啊! 你又不想要在提升容量后才放大到 5T!那可以怎么辦?呵呵!這時可以考慮“實際用多少才分配多少容量給 LV 的 LVM Thin Volume ”功能! 另外,再想像一個環境,如果你需要有 3 個 10GB 的磁盤來進行某些測試,問題是你的環境僅有 5GB 的剩余容量,再傳統的 LVM 環境下, LV 的容量是一開始就分配好的,因此你當然沒有辦法在這樣的環境中產生出 3 個 10GB 的設備啊!而且更嘔的是,那個 10GB 的設備其實每個實際使用率都沒有超過 10%, 也就是總用量目前僅會到 3GB 而已!但...我實際就有 5GB 的容量啊!為何不給我做出 3 個只用 1GB 的 10GB 設備呢?有啊!就還是 LVM thin Volume 啊! 什么是 LVM thin Volume 呢?這東西其實挺好玩的,他的概念是:先創建一個可以實支實付、用多少容量才分配實際寫入多少容量的磁盤容量儲存池 (thin pool), 然后再由這個 thin pool 去產生一個“指定要固定容量大小的 LV 設備”,這個 LV 就有趣了!雖然你會看到“宣告上,他的容量可能有 10GB ,但實際上, 該設備用到多少容量時,才會從 thin pool 去實際取得所需要的容量”!就如同上面的環境說的,可能我們的 thin pool 僅有 1GB 的容量, 但是可以分配給一個 10GB 的 LV 設備!而該設備實際使用到 500M 時,整個 thin pool 才分配 500M 給該 LV 的意思!當然啦! 在所有由 thin pool 所分配出來的 LV 設備中,總實際使用量絕不能超過 thin pool 的最大實際容量啊!如這個案例說的, thin pool 僅有 1GB, 那所有的由這個 thin pool 創建出來的 LV 設備內的實際用量,就絕不能超過 1GB 啊! 我們來實作個環境好了!剛剛鳥哥的 vbirdvg 應該還有剩余容量,那么請這樣作看看: 1. 由 vbirdvg 的剩余容量取出 1GB 來做出一個名為 vbirdtpool 的 thin pool LV 設備,這就是所謂的磁盤容量儲存池 (thin pool) 2. 由 vbirdvg 內的 vbirdtpool 產生一個名為 vbirdthin1 的 10GB LV 設備 3. 將此設備實際格式化為 xfs 文件系統,并且掛載于 /srv/thin 目錄內! 話不多說,我們來實驗看看! ``` # 1\. 先以 lvcreate 來創建 vbirdtpool 這個 thin pool 設備: [root@study ~]# lvcreate -L 1G -T vbirdvg/vbirdtpool # 最重要的創建指令 [root@study ~]# lvdisplay /dev/vbirdvg/vbirdtpool --- Logical volume --- LV Name vbirdtpool VG Name vbirdvg LV UUID p3sLAg-Z8jT-tBuT-wmEL-1wKZ-jrGP-0xmLtk LV Write Access read/write LV Creation host, time study.centos.vbird, 2015-07-28 18:27:32 +0800 LV Pool metadata vbirdtpool_tmeta LV Pool data vbirdtpool_tdata LV Status available # open 0 LV Size 1.00 GiB # 總共可分配出去的容量 Allocated pool data 0.00% # 已分配的容量百分比 Allocated metadata 0.24% # 已分配的中介數據百分比 Current LE 64 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:6 # 非常有趣吧!竟然在 LV 設備中還可以有再分配 (Allocated) 的項目耶!果然是儲存池! [root@study ~]# lvs vbirdvg # 語法為 lvs VGname LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert vbirdlv vbirdvg -wi-ao---- 2.50g vbirdtpool vbirdvg twi-a-tz-- 1.00g 0.00 0.24 # 這個 lvs 指令的輸出更加簡單明了!直接看比較清晰! # 2\. 開始創建 vbirdthin1 這個有 10GB 的設備,注意!必須使用 --thin 與 vbirdtpool 鏈接喔! [root@study ~]# lvcreate -V 10G -T vbirdvg/vbirdtpool -n vbirdthin1 [root@study ~]# lvs vbirdvg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert vbirdlv vbirdvg -wi-ao---- 2.50g vbirdthin1 vbirdvg Vwi-a-tz-- 10.00g vbirdtpool 0.00 vbirdtpool vbirdvg twi-aotz-- 1.00g 0.00 0.27 # 很有趣吧!明明連 vbirdvg 這個 VG 都沒有足夠大到 10GB 的容量,通過 thin pool # 竟然就產生了 10GB 的 vbirdthin1 這個設備了!好有趣! # 3\. 開始創建文件系統 [root@study ~]# mkfs.xfs /dev/vbirdvg/vbirdthin1 [root@study ~]# mkdir /srv/thin [root@study ~]# mount /dev/vbirdvg/vbirdthin1 /srv/thin [root@study ~]# df -Th /srv/thin Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdthin1 xfs 10G 33M 10G 1% /srv/thin # 真的有 10GB 耶!! # 4\. 測試一下容量的使用!創建 500MB 的文件,但不可超過 1GB 的測試為宜! [root@study ~]# dd if=/dev/zero of=/srv/thin/test.img bs=1M count=500 [root@study ~]# lvs vbirdvg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert vbirdlv vbirdvg -wi-ao---- 2.50g vbirdthin1 vbirdvg Vwi-aotz-- 10.00g vbirdtpool 4.99 vbirdtpool vbirdvg twi-aotz-- 1.00g 49.93 1.81 # 很要命!這時已經分配出 49% 以上的容量了!而 vbirdthin1 卻只看到用掉 5% 而已! # 所以鳥哥認為,這個 thin pool 非常好用!但是在管理上,得要特別特別的留意! ``` 這就是用多少算多少的 thin pool 實作方式!基本上,用來騙人挺嚇人的!小小的一個磁盤可以仿真出好多容量!但實際上,真的可用容量就是實際的磁盤儲存池內的容量! 如果突破該容量,這個 thin pool 可是會爆炸而讓數據損毀的!要注意!要注意! ### 14.3.5 LVM 的 LV 磁盤快照 現在你知道 LVM 的好處咯,未來如果你有想要增加某個 LVM 的容量時,就可以通過這個放大的功能來處理。 那么 LVM 除了這些功能之外,還有什么能力呢?其實他還有一個重要的能力,那就是 LV 磁盤的快照 (snapshot)。 什么是 LV 磁盤快照啊?快照就是將當時的系統信息記錄下來,就好像照相記錄一般! 未來若有任何數據更動了,則原始數據會被搬移到快照區,沒有被更動的區域則由快照區與文件系統共享。 用講的好像很難懂,我們用圖解說明一下好了: ![LVM 快照區域的備份示意圖](https://box.kancloud.cn/2016-05-13_57357379cd785.gif)圖14.3.3、LVM 快照區域的備份示意圖 左圖為最初創建 LV 磁盤快照區的狀況,LVM 會預留一個區域 (左圖的左側三個 PE 區塊) 作為數據存放處。 此時快照區內并沒有任何數據,而快照區與系統區共享所有的 PE 數據, 因此你會看到快照區的內容與文件系統是一模一樣的。 等到系統運行一陣子后,假設 A 區域的數據被更動了 (上面右圖所示),則更動前系統會將該區域的數據移動到快照區, 所以在右圖的快照區被占用了一塊 PE 成為 A,而其他 B 到 I 的區塊則還是與文件系統共享! 照這樣的情況來看,LVM 的磁盤快照是非常棒的“備份工具”,因為他只有備份有被更動到的數據, 文件系統內沒有被變更的數據依舊保持在原本的區塊內,但是 LVM 快照功能會知道那些數據放置在哪里, 因此“快照”當時的文件系統就得以“備份”下來,且快照所占用的容量又非常小!所以您說,這不是很棒的工具又是什么? 那么快照區要如何創建與使用呢?首先,由于快照區與原本的 LV 共享很多 PE 區塊,因此快照區與被快照的 LV 必須要在同一個 VG 上頭。 另外,或許你跟鳥哥一樣,會想到說:“咦! 我們能不能使用 thin pool 的功能來制作快照”呢?老實說,是可以的!不過使用上面的限制非常的多!包括最好要在同一個 thin pool 內的原始 LV 磁盤, 如果為非 thin pool 內的原始 LV 磁盤快照,則該磁盤快照“不可以寫入”,亦即 LV 磁盤要設置成只讀才行!同時, 使用 thin pool 做出來的快照,通常都是不可啟動 (inactive) 的默認情況,啟動又有點麻煩~所以,至少目前 (CentOS 7.x) 的環境下, 鳥哥還不是很建議你使用 thin pool 快照喔! 下面我們針對傳統 LV 磁盤進行快照的創建,大致流程為: * 預計被拿來備份的原始 LV 為 /dev/vbirdvg/vbirdlv 這個東西~ * 使用傳統方式快照創建,原始碟為 /dev/vbirdvg/vbirdlv,快照名稱為 vbirdsnap1,容量為 vbirdvg 的所有剩余容量 * 傳統快照區的創建 ``` # 1\. 先觀察 VG 還剩下多少剩余容量 [root@study ~]# vgdisplay vbirdvg ....(其他省略).... Total PE 252 Alloc PE / Size 226 / 3.53 GiB Free PE / Size 26 / 416.00 MiB # 就只有剩下 26 個 PE 了!全部分配給 vbirdsnap1 啰! # 2\. 利用 lvcreate 創建 vbirdlv 的快照區,快照被取名為 vbirdsnap1,且給予 26 個 PE [root@study ~]# lvcreate -s -l 26 -n vbirdsnap1 /dev/vbirdvg/vbirdlv Logical volume "vbirdsnap1" created # 上述的指令中最重要的是那個 -s 的選項!代表是 snapshot 快照功能之意! # -n 后面接快照區的設備名稱, /dev/.... 則是要被快照的 LV 完整文件名。 # -l 后面則是接使用多少個 PE 來作為這個快照區使用。 [root@study ~]# lvdisplay /dev/vbirdvg/vbirdsnap1 --- Logical volume --- LV Path /dev/vbirdvg/vbirdsnap1 LV Name vbirdsnap1 VG Name vbirdvg LV UUID I3m3Oc-RIvC-unag-DiiA-iQgI-I3z9-0OaOzR LV Write Access read/write LV Creation host, time study.centos.vbird, 2015-07-28 19:21:44 +0800 LV snapshot status active destination for vbirdlv LV Status available # open 0 LV Size 2.50 GiB # 原始碟,就是 vbirdlv 的原始容量 Current LE 160 COW-table size 416.00 MiB # 這個快照能夠紀錄的最大容量! COW-table LE 26 Allocated to snapshot 0.00% # 目前已經被用掉的容量! Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:11 ``` 您看看!這個 /dev/vbirdvg/vbirdsnap1 快照區就被創建起來了!而且他的 VG 量竟然與原本的 /dev/vbirdvg/vbirdlv 相同!也就是說,如果你真的掛載這個設備時,看到的數據會跟原本的 vbirdlv 相同喔!我們就來測試看看: ``` [root@study ~]# mkdir /srv/snapshot1 [root@study ~]# mount -o nouuid /dev/vbirdvg/vbirdsnap1 /srv/snapshot1 [root@study ~]# df -Th /srv/lvm /srv/snapshot1 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.5G 111M 2.4G 5% /srv/lvm /dev/mapper/vbirdvg-vbirdsnap1 xfs 2.5G 111M 2.4G 5% /srv/snapshot1 # 有沒有看到!這兩個咚咚竟然是一模一樣喔!我們根本沒有動過 # /dev/vbirdvg/vbirdsnap1 對吧!不過這里面會主動記錄原 vbirdlv 的內容! ``` 因為 XFS 不允許相同的 UUID 文件系統的掛載,因此我們得要加上那個 nouuid 的參數,讓文件系統忽略相同的 UUID 所造成的問題! 沒辦法啊!因為快照出來的文件系統當然是會一模一樣的! * 利用快照區復原系統 首先,我們來玩一下,如何利用快照區復原系統吧!不過你要注意的是,你要復原的數據量不能夠高于快照區所能負載的實際容量。由于原始數據會被搬移到快照區, 如果你的快照區不夠大,若原始數據被更動的實際數據量比快照區大,那么快照區當然容納不了,這時候快照功能會失效喔! 我們的 /srv/lvm 已經有 /srv/lvm/etc, /srv/lvm/log 等目錄了,接下來我們將這個文件系統的內容作個變更, 然后再以快照區數據還原看看: ``` # 1\. 先將原本的 /dev/vbirdvg/vbirdlv 內容作些變更,增增減減一些目錄吧! [root@study ~]# df -Th /srv/lvm /srv/snapshot1 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.5G 111M 2.4G 5% /srv/lvm /dev/mapper/vbirdvg-vbirdsnap1 xfs 2.5G 111M 2.4G 5% /srv/snapshot1 [root@study ~]# cp -a /usr/share/doc /srv/lvm [root@study ~]# rm -rf /srv/lvm/log [root@study ~]# rm -rf /srv/lvm/etc/sysconfig [root@study ~]# df -Th /srv/lvm /srv/snapshot1 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.5G 146M 2.4G 6% /srv/lvm /dev/mapper/vbirdvg-vbirdsnap1 xfs 2.5G 111M 2.4G 5% /srv/snapshot1 [root@study ~]# ll /srv/lvm /srv/snapshot1 /srv/lvm: total 60 drwxr-xr-x. 887 root root 28672 Jul 20 23:03 doc drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc /srv/snapshot1: total 16 drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc drwxr-xr-x. 16 root root 4096 Jul 28 00:01 log # 兩個目錄的內容看起來已經不太一樣了喔!檢測一下快照 LV 吧! [root@study ~]# lvdisplay /dev/vbirdvg/vbirdsnap1 --- Logical volume --- LV Path /dev/vbirdvg/vbirdsnap1 ....(中間省略).... Allocated to snapshot 21.47% # 鳥哥僅列出最重要的部份!就是全部的容量已經被用掉了 21.4% 啰! # 2\. 利用快照區將原本的 filesystem 備份,我們使用 xfsdump 來處理! [root@study ~]# xfsdump -l 0 -L lvm1 -M lvm1 -f /home/lvm.dump /srv/snapshot1 # 此時你就會有一個備份數據,亦即是 /home/lvm.dump 了! ``` 為什么要備份呢?為什么不可以直接格式化 /dev/vbirdvg/vbirdlv 然后將 /dev/vbirdvg/vbirdsnap1 直接復制給 vbirdlv 呢? 要知道 vbirdsnap1 其實是 vbirdlv 的快照,因此如果你格式化整個 vbirdlv 時,原本的文件系統所有數據都會被搬移到 vbirdsnap1。 那如果 vbirdsnap1 的容量不夠大 (通常也真的不夠大),那么部分數據將無法復制到 vbirdsnap1 內,數據當然無法全部還原啊! 所以才要在上面表格中制作出一個備份文件的!了解乎? 而快照還有另外一個功能,就是你可以比對 /srv/lvm 與 /srv/snapshot1 的內容,就能夠發現到最近你到底改了啥咚咚! 這樣也是很不賴啊!您說是吧! ^_^!接下來讓我們準備還原 vbirdlv 的內容吧! ``` # 3\. 將 vbirdsnap1 卸載并移除 (因為里面的內容已經備份起來了) [root@study ~]# umount /srv/snapshot1 [root@study ~]# lvremove /dev/vbirdvg/vbirdsnap1 Do you really want to remove active logical volume "vbirdsnap1"? [y/n]: y Logical volume "vbirdsnap1" successfully removed [root@study ~]# umount /srv/lvm [root@study ~]# mkfs.xfs -f /dev/vbirdvg/vbirdlv [root@study ~]# mount /dev/vbirdvg/vbirdlv /srv/lvm [root@study ~]# xfsrestore -f /home/lvm.dump -L lvm1 /srv/lvm [root@study ~]# ll /srv/lvm drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc drwxr-xr-x. 16 root root 4096 Jul 28 00:01 log # 是否與最初的內容相同啊!這就是通過快照來還原的一個簡單的方法啰! ``` * 利用快照區進行各項練習與測試的任務,再以原系統還原快照 換個角度來想想,我們將原本的 vbirdlv 當作備份數據,然后將 vbirdsnap1 當作實際在運行中的數據, 任何測試的動作都在 vbirdsnap1 這個快照區當中測試,那么當測試完畢要將測試的數據刪除時,只要將快照區刪去即可! 而要復制一個 vbirdlv 的系統,再作另外一個快照區即可!這樣是否非常方便啊? 這對于教學環境中每年都要幫學生制作一個練習環境主機的測試,非常有幫助呢! ![鳥哥的圖示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鳥哥的圖示") **Tips** 以前鳥哥老是覺得使用 LVM 的快照來進行備份不太合理,因為還要制作一個備份文件!后來仔細研究并參考徐秉義老師的教材[[4]](#ps4)后,才發現 LVM 的快照實在是一個棒到不行的工具!尤其是在虛擬機當中創建多份給同學使用的測試環境, 你只要有一個基礎的環境保持住,其他的環境使用快照來提供即可。實時同學將系統搞爛了,你只要將快照區刪除, 再重建一個快照區!這樣環境就恢復了!天吶!實在是太棒了! ^_^ ### 14.3.6 LVM 相關指令匯整與 LVM 的關閉 好了,我們將上述用過的一些指令給他匯整一下,提供給您參考參考: | 任務 | PV 階段 | VG 階段 | LV 階段 | filesystem(XFS / EXT4) | | --- | --- | | 搜尋(scan) | pvscan | vgscan | lvscan | lsblk, blkid | | 創建(create) | pvcreate | vgcreate | lvcreate | mkfs.xfs | mkfs.ext4 | | 列出(display) | pvdisplay | vgdisplay | lvdisplay | df, mount | | 增加(extend) | vgextend | lvextend (lvresize) | xfs_growfs | resize2fs | | 減少(reduce) | vgreduce | lvreduce (lvresize) | 不支持 | resize2fs | | 刪除(remove) | pvremove | vgremove | lvremove | umount, 重新格式化 | | 改變容量(resize) | lvresize | xfs_growfs | resize2fs | | 改變屬性(attribute) | pvchange | vgchange | lvchange | /etc/fstab, remount | 至于文件系統階段 (filesystem 的格式化處理) 部分,還需要以 xfs_growfs 來修訂文件系統實際的大小才行啊! ^_^ 。至于雖然 LVM 可以彈性的管理你的磁盤容量,但是要注意,如果你想要使用 LVM 管理您的硬盤時,那么在安裝的時候就得要做好 LVM 的規劃了, 否則未來還是需要先以傳統的磁盤增加方式來增加后,移動數據后,才能夠進行 LVM 的使用啊! 會玩 LVM 還不行!你必須要會移除系統內的 LVM 喔!因為你的實體 partition 已經被使用到 LVM 去, 如果你還沒有將 LVM 關閉就直接將那些 partition 刪除或轉為其他用途的話,系統是會發生很大的問題的! 所以啰,你必須要知道如何將 LVM 的設備關閉并移除才行!會不會很難呢?其實不會啦! 依據以下的流程來處理即可: 1. 先卸載系統上面的 LVM 文件系統 (包括快照與所有 LV); 2. 使用 lvremove 移除 LV ; 3. 使用 vgchange -a n VGname 讓 VGname 這個 VG 不具有 Active 的標志; 4. 使用 vgremove 移除 VG: 5. 使用 pvremove 移除 PV; 6. 最后,使用 fdisk 修改 ID 回來啊! 好吧!那就實際的將我們之前創建的所有 LVM 數據給刪除吧! ``` [root@study ~]# umount /srv/lvm /srv/thin /srv/snapshot1 [root@study ~]# lvs vbirdvg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync vbirdlv vbirdvg -wi-a----- 2.50g vbirdthin1 vbirdvg Vwi-a-tz-- 10.00g vbirdtpool 4.99 vbirdtpool vbirdvg twi-aotz-- 1.00g 49.93 1.81 # 要注意!先刪除 vbirdthin1 --&gt; vbirdtpool --&gt; vbirdlv 比較好! [root@study ~]# lvremove /dev/vbirdvg/vbirdthin1 /dev/vbirdvg/vbirdtpool [root@study ~]# lvremove /dev/vbirdvg/vbirdlv [root@study ~]# vgchange -a n vbirdvg 0 logical volume(s) in volume group "vbirdvg" now active [root@study ~]# vgremove vbirdvg Volume group "vbirdvg" successfully removed [root@study ~]# pvremove /dev/vda{5,6,7,8} ``` 最后再用 [gdisk](../Text/index.html#gdisk) 將磁盤的 ID 給他改回來 83 就好啦!整個過程就這樣的啦! ^_^
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看