Linux下的磁碟分割槽和邏輯卷

伯樂鍾情發表於2018-04-25

一、硬碟介面型別

  硬碟的介面主要有IDE、SATA、SCSI 、SAS和光纖通道等五種型別。其中IDE和SATA介面硬碟多用於家用產品中,也有部分應用於伺服器,SATA是一種新生的硬碟介面型別,已經取代了大部分IDE介面應用。SCSI 、SAS主要應用於伺服器上,普通家用裝置一般不支援SCSI和SAS介面。SAS也是是一種新生的硬碟介面型別,可以和SATA以及部分SCSI裝置無縫結合。光纖通道最初設計也不是為了硬碟設計開發的介面,是專門為網路系統設計的,但隨著儲存系統對速度的需求,才逐漸應用到硬碟系統中,並且其只應用在高階伺服器上價格昂貴。

二、硬碟和分割槽

  Linux中主要有兩種分割槽型別,分別為MBR(Master Boot Record)和GPT(GUID Partition Table),是在磁碟上儲存分割槽資訊的兩種不同方式。這些分割槽資訊包含了分割槽從哪裡開始的資訊,這樣作業系統才知道哪個扇區是屬於哪個分割槽的,以及哪個分割槽是可以啟動的。在磁碟上建立分割槽時,你必須在MBR和GPT之間做出選擇。

  在Linux中會把裝置對映成為一個/dev目錄下的系統檔案,IDE介面型別的硬碟裝置對映的檔名稱字首為“hd”,SCSI、SATA、SAS等介面的硬碟裝置對映的檔名稱字首為“sd”(部分虛擬機器或者雲主機的名稱可能是其他的,比如“vd”),後面拼接從“a”開始一直到“z”用來區分不同的硬碟裝置,在硬碟名稱後面拼接數字形式的分割槽號用來區分不同的分割槽。

1、MBR分割槽
  MBR的意思是“主開機記錄”,它是存在於驅動器開始部分的一個特殊的啟動扇區。這個扇區包含了已安裝的作業系統的啟動載入器和驅動器的邏輯分割槽資訊。MBR支援最大2TB磁碟,它無法處理大於2TB容量的磁碟。MBR格式的磁碟分割槽主要分為基本分割槽(primary partion)和擴充套件分割槽(extension partion)兩種主分割槽和擴充套件分割槽下的邏輯分割槽。主分割槽總數不能大於4個,其中最多隻能有一個擴充套件分割槽。且基本分割槽可以馬上被掛載使用但不能再分割槽,擴充套件分割槽必須再進行二次分割槽後才能掛載。擴充套件分割槽下的二次分割槽被稱之為邏輯分割槽,邏輯分割槽數量限制視磁碟型別而定。

  MBR的主分割槽號為1-4,邏輯分割槽號為從5開始累加的數字。比如裝置主機板上裝了4塊硬碟,分別為2塊IDE介面硬碟,1塊SCSI介面硬碟和一塊SATA介面硬碟。其中2塊IDE介面硬碟的分割槽策略為2個主分割槽和2個邏輯分割槽,SCSI分割槽策略為3個主分割槽和3個邏輯分割槽,SATA分割槽策略為4個主分割槽。硬碟檔案和分割槽名稱如下:

  硬碟  主分割槽1 主分割槽2 主分割槽3  主分割槽4  邏輯分割槽1  邏輯分割槽2  邏輯分割槽3 ……  邏輯分割槽n
IDE1 /dev/hda /dev/hda1(p) /dev/hda2(p) /dev/hda3(e) / /dev/hda5(l) /dev/hda6(l) / …… /
IDE2 /dev/hdb /dev/hdb1(p) /dev/hdb2(p) /dev/hdb3(e) / /dev/hdb5(l) /dev/hdb6(l) / …… /
SCSI /dev/sda /dev/sda1(p) /dev/sda2(p) /dev/sda3(p) /dev/sda4(e) /dev/sda5(l) /dev/sda6(l) /dev/sda7(l) …… /
SATA /dev/sdb /dev/sdb1(p) /dev/sdb2(p) /dev/sdb3(p) /dev/sdb4(p) / / / …… /

  其中分割槽名稱後面的(p)代表基本分割槽,(e)代表擴充套件分割槽,(l)代表邏輯分割槽。需要注意的是,如果分割槽策略中存在邏輯分割槽,則說明一定會有擴充套件分割槽,那麼基本分割槽數則最多隻能有3個,擴充套件分割槽數最多隻能是1個,如果沒有擴充套件分割槽則可以建立4個基本分割槽。想要建立邏輯分割槽,則必須先將唯一的擴充套件分割槽建立出來,並且如果刪除了擴充套件分割槽,那麼它下面的所有邏輯分割槽也會被自動刪除。

  如果是SCSI介面硬碟則最多隻能有15(其中擴充套件分割槽不能直接使用所以不計算)個分割槽,其中主分割槽最多4個,邏輯分割槽最多12個。IDE介面硬碟最多隻能有63(其中擴充套件分割槽不能直接使用所以不計算)個分割槽,其中主分割槽最多4個,邏輯分割槽最多60個。

2、GPT分割槽

  GPT意為GUID分割槽表,驅動器上的每個分割槽都有一個全域性唯一的識別符號(globally unique identifier,GUID)。支援的最大磁碟可達18EB,它沒有主分割槽和邏輯分割槽之分,每個硬碟最多可以有128個分割槽,具有更強的健壯性與更大的相容性,並且將逐步取代MBR分割槽方式。GPT分割槽的命名和MBR類似,只不過沒有主分割槽、擴充套件分割槽和邏輯分割槽之分,分割槽號直接從1開始累加一直到128。

三、邏輯卷

   LVM(邏輯卷)的產生是因為傳統的分割槽一旦分割槽好後就無法線上擴充空間,也存在一些工具能實現線上擴充空間但是還是會面臨資料損壞的風險;傳統的分割槽當分割槽空間不足時,一般的解決辦法是再建立一個更大的分割槽將原分割槽解除安裝然後將資料拷貝到新分割槽,但是在企業的生產系統往往不允許停機或者允許停機的時間很短,LVM就能很好的解決線上擴充空間的問題,而且不會對資料造成影響,LVM還能通過快照在備份的過程中保證日誌檔案和表空間檔案在同一時間點的一致性。

  在LVM中PE(Physical Extend)是卷的最小單位,預設4M大小,就像我們的資料是以頁的形式儲存一樣,卷就是以PE的形式儲存。PV(Physical Volume)是物理卷,如果要使用邏輯卷,首先第一步操作就是將物理磁碟或者物理分割槽格式化成PV,格式化之後PV就可以為邏輯卷提供PE了。VG(Volume Group)是卷組,VG就是將很多PE組合在一起生成一個卷組,當然這裡的PE是可以跨磁碟的,如果當前伺服器磁碟空間不足就可以增加一個新磁碟對當前系統不會產生任何影響。LV(Logical Volume)是邏輯卷,邏輯卷最終是給使用者使用的,前面幾個都是為建立邏輯卷做的準備,建立邏輯卷的大小隻要不超過VG剩餘空間就可以。

四、檔案系統

  當硬碟分割槽被建立完成之後,還並不能直接掛載到目錄上儲存檔案,需要選擇合適的檔案系統進行格式化。常見的分割槽型別有FAT32、FAT16、NTFS、HP-UX等,而專供Linux使用的主流的一些分割槽有ext2/3/4、physical volume (LVM) 、softwareRAID、swap、vfat、xfs等。其中:

  1、ext2/3/4:是適合Linux的檔案系統型別,由於ext3檔案系統多了日誌記錄功能,因此係統恢復起來更加快速,ext4是ext3的升級,效率更加高,因此建議使用預設型別ext4型別,而不要使用ext2/3;

  2、physical volume (LVM):這是一種彈性調整檔案系統大小的機制,即可以讓檔案系統變大或變小,而不改變原檔案資料的內容,功能不錯,但效能不佳。

  3、softwareRAID:利用Linux系統的特性,用軟體模擬出磁碟陣列功能。

  4、swap:就是記憶體交換空間。由於swap並不會使用到目錄樹的掛載,因此用swap就不需要指定掛載點。

  5、vfat:同時被Linux與windows所支援的檔案系統型別。如果主機硬碟同事存在windows和linux兩種作業系統,為了進行資料交換,可以使用該檔案系統。

  6、xfs:也是一個檔案系統型別,在centos7中將被作為預設的檔案系統型別,替換ext4。

五、使用fdisk操作分割槽

  本文主要以CentOS 7發行版的Linux作為實驗,我們使用Fdisk工具來操作分割槽,Fdisk 是各種 Linux 發行版本中最常用的分割槽工具。

  首先輸入 fdisk -h 命令檢視幫助資訊:

[root@localnat201 ~]# fdisk -h
用法:
fdisk [選項] <磁碟> 更改分割槽表
fdisk [選項] -l <磁碟> 列出分割槽表
fdisk -s <分割槽> 給出分割槽大小(塊數)

選項:
-b <大小> 扇區大小(5121024、2048或4096)
-c[=<模式>] 相容模式:“dos”或“nondos”(預設)
-h 列印此幫助文字
-u[=<單位>] 顯示單位:“cylinders”(柱面)或“sectors”(扇區,預設)
-v 列印程式版本
-C <數字> 指定柱面數
-H <數字> 指定磁頭數
-S <數字> 指定每個磁軌的扇區數

  從中我們可以看出,使用 fdisk -l 命令可檢視分割槽表資訊:

[root@localnat201 ~]# fdisk -l

磁碟 /dev/sda:32.2 GB, 32212254720 位元組,62914560 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000b1bc3

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    62914559    30407680   8e  Linux LVM

磁碟 /dev/sdb:53.7 GB, 53687091200 位元組,104857600 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組


磁碟 /dev/mapper/cl-root:29.0 GB, 28982640640 位元組,56606720 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組


磁碟 /dev/mapper/cl-swap:2147 MB, 2147483648 位元組,4194304 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組

  從中我們可以看出,有4個裝置,分別為/dev/sda、/dev/sdb、/dev/mapper/cl-root、/dev/mapper/cl-swap。其中/dev/sda硬碟已經有2個分割槽分割槽為:/dev/sda1和/dev/sda2。/dev/mapper/cl-root和/dev/mapper/cl-swap兩個裝置是/dev/sda2分割槽建立的邏輯卷。這裡的/dev/sdb硬碟裝置並沒有被分割槽,我們則是需要來操作這個硬碟,至於如何操作邏輯卷後面會講到。

  輸入 fdisk /dev/sdb 命令,對/dev/sda硬碟的分割槽表進行操作:

[root@localnat201 ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。

Device does not contain a recognized partition table
使用磁碟識別符號 0xc72a6f6a 建立新的 DOS 磁碟標籤。

  我們輸入”m”選項可以檢視到幫助資訊:

命令(輸入 m 獲取幫助):m
命令操作
   a   toggle a bootable flag 切換可引導標誌
   b   edit bsd disklabel 編輯BSD磁碟標籤
   c   toggle the dos compatibility flag 切換DOS相容性標誌
   d   delete a partition 刪除分割槽
   g   create a new empty GPT partition table 建立一個新的空GPT分割槽表
   G   create an IRIX (SGI) partition table 建立一個ILIX(SGI)分割槽表
   l   list known partition types 列出已知分割槽型別
   m   print this menu 列印此選單
   n   add a new partition 新增新分割槽
   o   create a new empty DOS partition table 建立一個新的空DOS分割槽表
   p   print the partition table 列印分割槽表
   q   quit without saving changes 不儲存更改退出
   s   create a new empty Sun disklabel 建立一個新的空太陽標籤
   t   change a partition`s system id 更改分割槽的系統ID
   u   change display/entry units 更改顯示/輸入單元
   v   verify the partition table 驗證分割槽表
   w   write table to disk and exit 將表寫入磁碟並退出
   x   extra functionality (experts only) 額外功能(僅專家)

命令(輸入 m 獲取幫助):

  從上面的幫助資訊中,可以得知一些選項的用途。這裡主要注意”d”、”n”、”q”、”g”、”w”等選項。首先要明確分割槽格式,fdisk預設的分割槽格式是msdos(mbr),在此可輸入”g”選項,將分割槽格式修改為GPT,不過在修改完儲存退出之後,在輸入 fdisk /dev/sdb 命令進入分割槽模式,會出現 WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. 資訊,提示fdisk gpt分割槽是新的功能,目前還在實驗階段。所以如果要進行GPT分割槽,那麼推薦使用 parted 命令,後面會介紹到。

  那麼首先輸入”n”選項來開始建立分割槽:

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 

  可以看到互動介面列印的資訊,提示需要選擇一個分割槽型別,”p”:為基本分割槽(預設);”e”:為擴充套件分割槽。在此我們選擇”p”,建立一個基本分割槽:

Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p 分割槽號 (
2-4,預設 2):

  互動介面提示需要選擇一個分割槽號,範圍為2-4。由於已經存在了一個基本分割槽,所以只可選擇2、3、4(預設2,順序累加)。在此我們輸入2:

Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分割槽號 (2-4,預設 2):2
起始 扇區 (2099200-314572799,預設為 2099200):

  可以看到互動介面提示序號選擇其實扇區,預設為剩餘未被分配的最小扇區,推薦選擇預設(直接點選回車);

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分割槽號 (2-4,預設 2):2
起始 扇區 (2099200-314572799,預設為 2099200):
將使用預設值 2099200
Last 扇區, +扇區 or +size{K,M,G} (2099200-314572799,預設為 314572799):

  互動介面提示,要輸入需要分配的截止扇區,預設為未被分配的最小扇區,此處推薦預設(直接點選回車):

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分割槽號 (2-4,預設 2):2
起始 扇區 (2099200-314572799,預設為 2099200):
將使用預設值 2099200
Last 扇區, +扇區 or +size{K,M,G} (2099200-314572799,預設為 314572799):
將使用預設值 314572799
分割槽 2 已設定為 Linux 型別,大小設為 149 GiB

命令(輸入 m 獲取幫助):

  可以看到又回到了最初的互動介面,這表示分割槽表已經設定成功,輸入選項q表示要放棄本次分割槽表的修改並退出,w選項表示儲存本次分割槽表的修改並退出,此處選擇w表示將分割槽資訊寫入到磁碟,此次分割槽完成;

  回到最初操作分割槽表的地方,選擇”d”選項,刪除分割槽的功能:

命令(輸入 m 獲取幫助):d
分割槽號 (1,2,預設 2):

  互動介面提示輸入要刪除的分割槽的分割槽號,此處選擇2:

命令(輸入 m 獲取幫助):d
分割槽號 (1,2,預設 2):2
分割槽 2 已刪除

命令(輸入 m 獲取幫助):

  互動介面提示本次分割槽表操作成功,輸入選項”w”,表示將分割槽資訊寫入到磁碟,此次刪除分割槽完成。回到最初選擇分割槽型別的地方,選擇”e”,建立擴充套件分割槽:

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分割槽號 (2-4,預設 2):

  互動介面提示要輸入擴充套件分割槽的分割槽號,可選範圍為2-4,此處選擇2:

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分割槽號 (2-4,預設 2):2
起始 扇區 (2099200-314572799,預設為 2099200):

  互動介面提示輸入要分配給擴充套件分割槽的起始扇區,此處選擇預設:

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分割槽號 (2-4,預設 2):2
起始 扇區 (2099200-314572799,預設為 2099200):
將使用預設值 2099200
Last 扇區, +扇區 or +size{K,M,G} (2099200-314572799,預設為 314572799):

  互動介面提示輸入要分配給擴充套件分割槽的截止扇區,此處選擇預設:

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分割槽號 (2-4,預設 2):2
起始 扇區 (2099200-314572799,預設為 2099200):
將使用預設值 2099200
Last 扇區, +扇區 or +size{K,M,G} (2099200-314572799,預設為 314572799):
將使用預設值 314572799
分割槽 2 已設定為 Extended 型別,大小設為 149 GiB

命令(輸入 m 獲取幫助):

  互動介面提示本次對分割槽表的操作已完成,輸入”w”選項,儲存本次對分割槽表的操作;當再次建立分割槽的時候,互動介面就會將擴充套件分割槽的選項”e”替換成為邏輯分割槽的選項”l”:

Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): 

  之後再要建立邏輯分割槽和之前建立分割槽的步驟一直,分割槽完成。至此CentOS中的分割槽操作已完成;接下來我們需要將物理分割槽格式化成某一個檔案系統,我們使用mkds進行分割槽格式化操作,輸入 mkfs -h 命令獲取幫助資訊:

[root@localhost ~]# mkfs -h
用法:
 mkfs [選項] [-t <型別>] [檔案系統選項] <裝置> [<大小>]

選項:
 -t, --type=<型別>  檔案系統型別;
     fs-options     實際檔案系統構建程式的引數
     <裝置>         要使用裝置的路徑
     <大小>         要使用裝置上的塊數
 -V, --verbose      解釋正在進行的操作;
                      多次指定 -V 將導致空執行(dry-run)
 -V, --version      顯示版本資訊並退出
                      將 -V 作為 --version 選項時必須是惟一選項
 -h, --help         顯示此幫助並退出

更多資訊請參閱 mkfs(8)。

  從幫助資訊中我們可以看到,可以使用mkfs -t xfs /dev/sdb1 進行格式化分割槽:

[root@localnat201 ~]# mkfs -t xfs /dev/sda2 
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=624936 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2499744, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

  格式化成xfs時,若提示分割槽已存在檔案系統,則需要在分割槽前面加上-f選項強行覆蓋,例如: mkfs -t xfs -f /dev/sda2 。被格式化的裝置既可以是分割槽,也可以是邏輯卷。要檢視所有分割槽的檔案系統格式則可以使用 df -Th 命令。至此格式化分割槽完成。分割槽格式化完成之後則可以將分割槽掛載到某一個目錄下面,正式開始使用改分割槽,我們在系統中建立一個使用者掛載分割槽的目錄:

[root@localhost ~]# mkdir /data

  將分割槽掛載到目錄上:

mount /dev/sda2 /data/

  設定開機自動掛載分割槽到掛載點,編輯 vim /etc/fstab :

#
# /etc/fstab
# Created by anaconda on Sun Jun 25 07:16:25 2017
#
# Accessible filesystems, by reference, are maintained under `/dev/disk`
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=eb697457-a097-4263-8bbf-a75aa632d27c /                       ext4    defaults        1 1

/dev/sda2                               /data                   xfs    defaults        0 0

  如果想要解除安裝掛載點:

[root@localnat201 ~]# umount /dev/sda2

  至此掛載分割槽已完成;

六、使用parted操作分割槽

  parted是一個可以分割槽並進行分割槽調整的工具,他可以建立,破壞,移動,複製,調整ext2 linux-swap fat fat32 reiserfs型別的分割槽,可以建立,調整,移動Macintosh的HFS分割槽,檢測jfs,ntfs,ufs,xfs分割槽。既可以建立MBR分割槽,又可以用來建立GPT分割槽,如果你的硬碟大於2TB則必須要使用parted來建立GPT格式的分割槽。

  可以使用 parted -h 命令檢視使用說明

[root@localnat201 ~]# parted -h
Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
Apply COMMANDs with PARAMETERS to DEVICE.  If no COMMAND(s) are given, run in
interactive mode.

選項:
  -h, --help                      顯示此求助資訊
  -l, --list                      lists partition layout on all block devices 列出所有塊裝置上的分割槽佈局
  -m, --machine                   displays machine parseable output 顯示機器可分析輸出
  -s, --script                    從不提示使用者
  -v, --version                   顯示版本
  -a, --align=[none|cyl|min|opt]  alignment for new partitions

命令:
  align-check TYPE N                        check partition N for TYPE(min|opt)
        alignment
  help [COMMAND]                           print general help, or help on
        COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition
        table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table,
        available devices, free space, all found partitions, or a particular
        partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START
        and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected
        device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition
        NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and
        copyright information of GNU Parted

Report bugs to bug-parted@gnu.org

   從幫助資訊中可看出,使用 parted -l 命令可檢視分割槽表資訊:

[root@localnat201 ~]# parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  標誌
 1      1049kB  1075MB  1074MB  primary  xfs          啟動
 2      1075MB  32.2GB  31.1GB  primary               lvm

錯誤: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 107GB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags: Model: Linux device-mapper (linear) (dm) Disk /dev/mapper/cl-swap: 2147MB Sector size (logical/physical): 512B/512B Partition Table: loop Disk Fla  gs: Number Start End Size File system 標誌 1 0.00B 2147MB 2147MB linux-swap(v1) Model: Linux device-mapper (linear) (dm) Disk /dev/mapper/cl-root: 29.0GB Sector size (logical/physical): 512B/512B Partition Table: loop Disk Flags: Number Start End Size File system 標誌 1 0.00B 29.0GB 29.0GB xfs

  從中可看出與上面 fdisk -l 命令返回的差不多的資訊。總共有4個裝置:/dev/sda和/dev/sdb為物理裝置,/dev/mapper/cl-swap和/dev/mapper/cl-root為邏輯卷建立的裝置。可以看到/dev/sdb還沒有分割槽,並且還看到上面有一個錯誤資訊 錯誤: /dev/sdb: unrecognised disk label 。這是由於該磁碟裝置沒有設定上標籤(label)所以會有錯誤,只需要設定了標籤就可以了。

   這裡我們使用 parted /dev/sdb 命令開始分割槽:

[root@localnat201 ~]# parted /dev/sdb 
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type `help` to view a list of commands.
(parted) 

  輸入help選項,檢視幫助資訊:

[root@localnat201 ~]# parted /dev/sdb 
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type `help` to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted) 

  也可以在”help”選項後面加上具體的命令,可以檢視具體命令的幫助資訊;接下來使用 mklabel gpt 或者 mktable gpt 命令格式化分割槽型別和設定標籤:

[root@localnat201 ~]# parted /dev/sdb 
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type `help` to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted) mklabel gpt                                                      
(parted)

  此處可選擇modos(mbr)和gpt型別,如果修改的分割槽標籤型別,則分割槽所有資料將會丟失;接下來可輸入 print 選項,列印分割槽資訊:

(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  標誌

(parted) 

  由此可以看出分割槽已經是GPT分割槽格式;加下來需要建立分割槽,建立分割槽需要使用 mkpart 命令,在此我們可以輸入 help mkpart 命令檢視幫助資訊:

(parted) help mkpart                                                      
  mkpart PART-TYPE [FS-TYPE] START END     make a partition

    分割槽型別是:primary(主分割槽)、logical(邏輯分割槽)、extended(擴充套件分割槽)之一
    檔案系統型別是以下任意一項:btrfs, nilfs2, ext4, ext3, ext2, fat32, fat16, hfsx, hfs+, hfs, jfs, swsusp, linux-swap(v1), linux-swap(v0), ntfs, reiserfs, hp-ufs, sun-ufs, xfs, apfs2, apfs1, asfs, amufs5, amufs4,
        amufs3, amufs2, amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2, affs1, affs0, linux-swap, linux-swap(new), linux-swap(old)
        START and END are disk locations, such as 4GB or 10%.  Negative values count from the end of the disk.  For example, -1s specifies exactly the last sector.
        
        `mkpart` makes a partition without creating a new file system on the partition.  FS-TYPE may be specified to set an appropriate partition ID.

  我們用 mkpart xfs 0 100% 命令建立分割槽,xfs是檔案系統型別(這裡只是做說明或者說是分割槽的名稱,分割槽完成之後是需要使用 mkfs 命令進行真正的格式化的,否則不能掛載), 0是磁碟的起始位置,100%是磁碟的結束位置:

(parted) mkpart primary xfs 0 100%                                        
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放棄/Cancel?

  建立的過程中,我們會看到有警告資訊 The resulting partition is not properly aligned for best performance. ,說分割槽沒有正確對齊,會影響最佳新能。這裡說的是磁碟的位置沒有給一個合適的值。其實在使用fdisk分割槽的時候,會有預設的起始和結束扇區,所以如果不是很確定這個值,那麼可以先試用fdisk命令進入分割槽模式,看一下預設的起始扇區和結束扇區是多少。我這裡的起始扇區是2048,但由於parted預設是M為位置單位,所以這裡需要使用s說明是扇區為單位。結束扇還是100%,所以命令為 mkpart xfs 2048s 100% :

(parted) mkpart xfs 2048s 100%                                            
(parted)

  其中不需要指明分割槽型別是主分割槽還是邏輯分割槽,GPT分割槽只有一種分割槽格式,如果是msdos(mbr)才需要指明。可以使用 rm 分割槽號 命令刪除分割槽,使用 quit 命令退出當前分割槽模式,至此parted命令進行GPT分割槽已完成;格式化分割槽和掛載分割槽與上面fdisk分割槽中的方式一樣。

七、使用邏輯卷

   首先我們需要將物理裝置(可以是物理磁碟/dev/sdb、也可以是物理分割槽/dev/sdb1)格式化為PV(物理卷),在此我們使用 parted -l 命令檢視我們有哪些可供使用的物理裝置:

[root@localnat201 ~]# parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  標誌
 1      1049kB  1075MB  1074MB  primary  xfs          啟動
 2      1075MB  32.2GB  31.1GB  primary               lvm


Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  標誌
 1      1049kB  21.5GB  21.5GB               xfs


錯誤: /dev/sdc: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)                                    
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags: 

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/cl-swap: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End     Size    File system     標誌
 1      0.00B  2147MB  2147MB  linux-swap(v1)


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/cl-root: 29.0GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End     Size    File system  標誌
 1      0.00B  29.0GB  29.0GB  xfs

  這裡我們拋開已經做過分割槽和已經存在的物理卷的一些裝置,其中/dev/sdb和/dev/sdc這兩個物理磁碟是需要我們關注的。我們可以看到/dev/sdb這塊磁碟已經有了一個分割槽,分割槽號是1也就是/dev/sdb1分割槽(gpt分割槽表只展示分割槽號,只要將磁碟名稱拼上分割槽號就是分割槽名稱),而/dev/sdc磁碟並沒有做過分割槽。所以我們首先需要使用 pvcreate 命令將/dev/sdb1和/dev/sdc格式化成PV:

[root@localnat201 ~]# pvcreate /dev/sdb1 /dev/sdc 
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc" successfully created.
[root@localnat201 ~]#

  這裡可以看到建立成功了,其中pvcreate是建立命令,後面引數是需要初始化的物理裝置,多個裝置之間使用空格分隔。我們可以使用 pvdisplay 命令或者 pvs 命令檢視已經存在的PV資訊:

[root@localnat201 ~]# pvcreate /dev/sdb1 /dev/sdc 
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc" successfully created.
[root@localnat201 ~]# clear
[root@localnat201 ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               <29.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               1
  Allocated PE          7422
  PV UUID               KdNi7s-YftA-YY9W-hK7a-PHw1-j7n2-ln4cLg
   
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               AbmsNB-2NUK-IxJA-QYY7-N81f-avOz-wyMKiR
   
  "/dev/sdb1" is a new physical volume of "<20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               <20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               sts9D4-P47z-Qrj2-WaWX-9wEU-o8jo-Y70xgb
   
[root@localnat201 ~]# pvs
  PV         VG Fmt  Attr PSize   PFree  
  /dev/sda2  cl lvm2 a--  <29.00g   4.00m
  /dev/sdb1     lvm2 ---  <20.00g <20.00g
  /dev/sdc      lvm2 ---   20.00g  20.00g

  如果有需要我們也可以使用 pvremove 命令刪除物理卷:

[root@localnat201 ~]# pvremove /dev/sdc 
  Labels on physical volume "/dev/sdc" successfully wiped.
[root@localnat201 ~]# 

  我們可以看到有三個裝置已經被初始化成了PV,這裡不需要關注/dev/sda2分割槽,這是在安裝系統時自動初始化的PV,這裡/dev/sdb1分割槽和/dev/sdc磁碟是我們這次初始化的PV。既然建立了PV那麼就需要VG(PV組)了,下面我們來使用 vgcreate 命令來建立VG(卷組):

[root@localnat201 ~]# vgcreate myvg /dev/sdb1 
  Volume group "myvg" successfully created
[root@localnat201 ~]#

  可以看見已經建立成功,其中vgcreate是建立命令myvg是這個VG組的名稱,/dev/sdb1是指將這個已經初始化成PV的裝置新增套這個卷組中,如果需要新增多個裝置使用空格分隔。我們可以使用 vgdisplay 或者 vgs 命令檢視卷組資訊:

[root@localnat201 ~]# vgdisplay 
  --- Volume group ---
  VG Name               cl
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <29.00 GiB
  PE Size               4.00 MiB
  Total PE              7423
  Alloc PE / Size       7422 / 28.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               EZIlfD-2r61-x8RC-qLwl-Nsqp-D5zr-J8pPfI
   
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <20.00 GiB
  PE Size               4.00 MiB
  Total PE              5119
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5119 / <20.00 GiB
  VG UUID               dVW1W5-AMKN-xMEy-TGBs-QRF7-Nvvs-ZnFpLd
   
[root@localnat201 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  cl     1   2   0 wz--n- <29.00g   4.00m
  myvg   1   0   0 wz--n- <20.00g <20.00g

  我們可以看到我們建立的名稱為myvg的卷組,大小為小於20G,也就是說最大沒有20G可用,PE大小是4M,有5119個PE。如果有需要我們可以使用 vgremove 命令刪除卷組:

[root@localnat201 ~]# vgremove myvg
  Volume group "myvg" successfully removed
[root@localnat201 ~]#

  有了卷組,接下來我們就可以真正開始建立邏輯捲了,這裡使用 lvcreate -n 邏輯卷名稱 -l 邏輯卷PE數 卷組名 命令來建立邏輯卷:

[root@localnat201 ~]# lvcreate -n mylv -l 5119  myvg
  Logical volume "mylv" created.
[root@localnat201 ~]# 

  在這裡可以看到名稱為mylv的邏輯卷建立成功,其中 -l 選項可以換成 -L ,用來只用以磁碟大小為單位的數值,比如說K、M、G、T等。但是這裡的VG可用大小是5119PE和小於20.0G,使用G做單位不知道具體小於多小,不好給定一個具體的值,所以這裡我們使用PE作為單位。接下來我們可以使用 lvdisplay 或者 lvs 命令檢視邏輯卷資訊:

[root@localnat201 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                UzXXeu-TO2S-xXWF-ZZtt-Kq2L-JaAE-GLdRvQ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-12-01 18:58:38 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                emExFt-9Y5c-dEq7-2mPp-kiO0-03j4-4IxbsT
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-12-01 18:58:39 +0800
  LV Status              available
  # open                 1
  LV Size                26.99 GiB
  Current LE             6910
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                KloMrL-XW8i-Eo2J-pdI3-f28r-s4gw-wIBSfB
  LV Write Access        read/write
  LV Creation host, time localnat201, 2018-04-24 23:11:28 +0800
  LV Status              available
  # open                 0
  LV Size                <20.00 GiB
  Current LE             5119
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
[root@localnat201 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root cl   -wi-ao----  26.99g                                                    
  swap cl   -wi-ao----   2.00g                                                    
  mylv myvg -wi-a----- <20.00g

  這裡我們可以看到具體的邏輯卷資訊了,我們建立的這個邏輯卷在作業系統中對映的檔案的據對路徑為”/dev/myvg/mylv”,但是一般邏輯卷會在”/dev/mapper”目錄下面建立一個軟連線”/dev/mapper/myvg-mylv”,軟連線名稱為卷組名稱加-再加上邏輯卷名稱。如果有必要我們可以使用 lvremove /dev/myvg/mylv 命令刪除邏輯卷。這個邏輯卷和物理分割槽一樣,需要先格式化成合適的檔案系統,然後掛載到某一個目錄上就可以了,格式化分割槽和掛載分割槽與上面fdisk分割槽中的方法一樣:

[root@localnat201 ~]# mkfs -t xfs /dev/myvg/mylv 
meta-data=/dev/myvg/mylv         isize=512    agcount=4, agsize=1310464 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5241856, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localnat201 ~]# mount /dev/myvg/mylv /data/
[root@localnat201 ~]# df -lh
檔案系統               容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root     27G  5.6G   22G   21% /
devtmpfs               1.9G     0  1.9G    0% /dev
tmpfs                  1.9G     0  1.9G    0% /dev/shm
tmpfs                  1.9G  8.6M  1.9G    1% /run
tmpfs                  1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1             1014M  186M  829M   19% /boot
tmpfs                  378M     0  378M    0% /run/user/0
/dev/mapper/myvg-mylv   20G   33M   20G    1% /data

  其中”/dev/mapper/myvg-mylv”是”/dev/myvg/mylv”的軟連線,這兩個路徑都可以對邏輯捲進項操作,至此邏輯卷的建立和格式化掛載完成。這時如果由於邏輯卷空間滿了需要擴充,我們可以使用 vgs 命令檢視還有沒有可供邏輯卷擴充的空間:

[root@localnat201 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  cl     1   2   0 wz--n- <29.00g 4.00m
  myvg   1   1   0 wz--n- <20.00g    0 
[root@localnat201 ~]# 

  我們可以看到,名稱為myvg的卷組的自由空間已經是0了,這個時候我們需要線擴充vg。這是我們可以使用 pvs 命令檢視有沒有可供vg擴充的pv:

[root@localnat201 ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree 
  /dev/sda2  cl   lvm2 a--  <29.00g  4.00m
  /dev/sdb1  myvg lvm2 a--  <20.00g     0 
  /dev/sdc        lvm2 ---   20.00g 20.00g

  這是我們看到/dev/sdc這個pv並沒有被新增到某個vg中可以使用,我們使用 vgextend 命令擴充卷組:

[root@localnat201 ~]# vgextend myvg /dev/sdc 
  Volume group "myvg" successfully extended
[root@localnat201 ~]# vgdisplay 
  --- Volume group ---
  VG Name               cl
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <29.00 GiB
  PE Size               4.00 MiB
  Total PE              7423
  Alloc PE / Size       7422 / 28.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               EZIlfD-2r61-x8RC-qLwl-Nsqp-D5zr-J8pPfI
   
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       5119 / <20.00 GiB
  Free  PE / Size       5119 / <20.00 GiB
  VG UUID               dVW1W5-AMKN-xMEy-TGBs-QRF7-Nvvs-ZnFpLd

  我們可以看到VG擴充成功,並且已經有了5119PE的自由空間。現在我們就可以使用這個剩餘空間擴充邏輯捲了,這裡我們可以使用 lvextend 命令擴充邏輯卷:

[root@localnat201 ~]# lvextend -l +5119 /dev/myvg/mylv 
  Size of logical volume myvg/mylv changed from <20.00 GiB (5119 extents) to 39.99 GiB (10238 extents).
  Logical volume myvg/mylv successfully resized.
[root@localnat201 ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root cl   -wi-ao---- 26.99g                                                    
  swap cl   -wi-ao----  2.00g                                                    
  mylv myvg -wi-a----- 39.99g                                                    
[root@localnat201 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  cl     1   2   0 wz--n- <29.00g 4.00m
  myvg   2   1   0 wz--n-  39.99g    0
[root@localnat201 ~]# df -lh
檔案系統               容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root     27G  5.6G   22G   21% /
devtmpfs               1.9G     0  1.9G    0% /dev
tmpfs                  1.9G     0  1.9G    0% /dev/shm
tmpfs                  1.9G  8.6M  1.9G    1% /run
tmpfs                  1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1             1014M  186M  829M   19% /boot
tmpfs                  378M     0  378M    0% /run/user/0
/dev/mapper/myvg-mylv   20G   33M   19.9G    1% /data

  我們可以看到擴充邏輯捲成功,邏輯卷大小變成了39.9G了,而卷組剩餘大小變成了0。但是這是如果我們直接將這個邏輯卷掛載到/data目錄下面,再使用 df -lh 命令檢視,你就會發現邏輯卷大小並沒有發生變化,其實這是因為邏輯卷大小雖然擴充了,但是邏輯捲上面的檔案系統並沒有更新,所以需要先更新檔案系統才能真正使用到擴充後的空間。注意這裡使用 xfs_growfs /dev/myvg/mylv 命令更新一下檔案系統,不能重新格式化整個分割槽的檔案系統:

[root@localnat201 ~]# xfs_growfs /dev/m
mapper/ mcelog  mem     midi    mqueue/ myvg/   
[root@localnat201 ~]# xfs_growfs /dev/myvg/mylv 
meta-data=/dev/mapper/myvg-mylv  isize=512    agcount=4, agsize=1310464 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=5241856, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 5241856 to 10483712
[root@localnat201 ~]# df -lh
檔案系統               容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root     27G  5.6G   22G   21% /
devtmpfs               1.9G     0  1.9G    0% /dev
tmpfs                  1.9G     0  1.9G    0% /dev/shm
tmpfs                  1.9G  8.6M  1.9G    1% /run
tmpfs                  1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1             1014M  186M  829M   19% /boot
tmpfs                  378M     0  378M    0% /run/user/0
/dev/mapper/myvg-mylv   40G   33M   40G    1% /data

  我們可以看到,已經掛載的邏輯卷大小達到了40G,說明擴充分割槽成功了。這裡需要注意,由於我是用的是xfs的檔案系統,所以使用 xfs_growfs 命令來更新檔案系統,如果是ext2/ext3/ext4等檔案系統則需使用 resize2fs 命令來更新檔案系統了。如果覺得麻煩,在這裡我們也可以直接使用 lvresize -l 2000 -r /dev/myvg/mylv 命令,可以替代 lvextend 和 xfs_growfs/resize2fs 命令,這裡的大小如果前面有”+”號,則代表增加大小,如果沒有”+”但是設定的值比原來的大則也是增加大小。  

  在平時我們不只是需要擴充邏輯卷,還有可能需要收縮(減小)或者解除安裝邏輯卷,注意xfs檔案系統只支援增大分割槽空間的情況,不支援減小的情況,硬要減小的話,只能在減小後將邏輯分割槽重新通過mkfs.xfs命令重新格式化才能掛載上,這樣的話這個邏輯分割槽上原來的資料就丟失了。但是ext檔案系統可以支援減小減小邏輯卷操作,接下來我們做ext收縮邏輯卷操作。對邏輯捲進行收縮操作之前,如果邏輯卷已經掛載到了目錄上必須先解除安裝邏輯卷的掛載,然後縮小檔案系統,最後才是縮小邏輯卷,而且收縮的大小也不能超過剩餘空間大小。

[root@localnat201 ~]# umount /dev/myvg/mylv 
[root@localnat201 ~]# 

  解除安裝了邏輯卷的掛載之後,需要先收縮檔案系統,這一步一定是要在收縮邏輯卷之前操作,在這之前我已經將邏輯卷格式化成了ext4的蓋世樂,所以這裡我們使用 resize2fs 明來執行收縮操作:

[root@localnat201 ~]# resize2fs /dev/myvg/mylv 30G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 7864320 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 7864320 blocks long.

[root@localnat201 ~]# 

  然後將邏輯捲縮小:

[root@localnat201 ~]# lvreduce -L 30G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 30.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 39.99 GiB (10238 extents) to 30.00 GiB (7680 extents).
  Logical volume myvg/mylv successfully resized.
[root@localnat201 ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root cl   -wi-ao---- 26.99g                                                    
  swap cl   -wi-ao----  2.00g                                                    
  mylv myvg -wi-a----- 30.00g                                                    
[root@localnat201 ~]# 

  這裡縮小成功了,注意這裡沒有在30G前面加上減號,但是30G本來就比原來的40G要小,所以是縮小操作。接下來只要在掛載,那麼本次縮小邏輯卷操作就完成了:

[root@localnat201 ~]# mount /dev/myvg/mylv /data/
[root@localnat201 ~]# df -Th
檔案系統              型別      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root   xfs        27G  5.6G   22G   21% /
devtmpfs              devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                 tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                 tmpfs     1.9G  8.6M  1.9G    1% /run
tmpfs                 tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1             xfs      1014M  186M  829M   19% /boot
tmpfs                 tmpfs     378M     0  378M    0% /run/user/0
/dev/mapper/myvg-mylv ext4       30G   45M   28G    1% /data
[root@localnat201 ~]# 

  這裡如果覺得麻煩,可以使用 lvresize -l 30G -r /dev/vg2/xfstest 命令替代 lvextend 和 resize2fs 命令:

[root@localnat201 ~]# lvresize -L 20G -r /dev/myvg/mylv 
Do you want to unmount "/data"? [Y|n] y
fsck,來自 util-linux 2.23.2
/dev/mapper/myvg-mylv: 11/1966080 files (0.0% non-contiguous), 167453/7864320 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/myvg-mylv to 5242880 (4k) blocks.

The filesystem on /dev/mapper/myvg-mylv is now 5242880 blocks long.

  Size of logical volume myvg/mylv changed from 30.00 GiB (7680 extents) to 20.00 GiB (5120 extents).
  Logical volume myvg/mylv successfully resized.
[root@localnat201 ~]# df -Th
檔案系統              型別      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root   xfs        27G  5.6G   22G   21% /
devtmpfs              devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                 tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                 tmpfs     1.9G  8.6M  1.9G    1% /run
tmpfs                 tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1             xfs      1014M  186M  829M   19% /boot
tmpfs                 tmpfs     378M     0  378M    0% /run/user/0
/dev/mapper/myvg-mylv ext4       20G   45M   19G    1% /data

  我們可以看到也縮小成功了,至此邏輯卷的操作也都已經完成。

相關文章