linux磁盤分區

Linux下的磁盤分區和邏輯卷

一、硬盤接口類型

  硬盤的接口主要有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[email protected]

複製代碼

   從幫助信息中可看出,使用 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</span>+, hfs, jfs, swsusp, linux-swap(v1), linux-swap(v0), ntfs, reiserfs, hp-ufs, sun-<span style="color: #000000">ufs, xfs, apfs2, apfs1, asfs, amufs5, amufs4,
    amufs3, amufs2, amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2, affs1, affs0, linux</span>-swap, linux-swap(new), linux-<span style="color: #000000">swap(old)
    START and END are disk locations, such as 4GB or </span><span style="color: #800080">10</span>%.  Negative values count from the end of the disk.  For example, -1s specifies exactly the <span style="color: #0000ff">last</span><span style="color: #000000"> sector.
    
    </span><span style="color: #800000">'</span><span style="color: #800000">mkpart</span><span style="color: #800000">'</span> makes a partition without creating a new <span style="color: #0000ff">file</span> system on the partition.  FS-TYPE may be specified to set an appropriate partition ID.</pre>
複製代碼

  我們用 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.cnblogs.com/lbole/p/8904298.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章