首頁 > 軟體

Linux磁碟分割區和邏輯卷詳解

2020-06-16 16:52:36

一、硬碟介面型別

  硬碟的介面主要有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 <大小> 磁區大小(512、1024、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

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

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-04/152069.htm


IT145.com E-mail:sddin#qq.com