日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结

發布時間:2024/3/7 linux 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

物理設備的命名規則

在Linux系統中一切都是文件,硬件設備也不例外。既然是文件,就必須有文件名稱。系統內核中的udev設備管理器會自動把硬件名稱規范起來,目的是讓用戶通過設備文件的名字可以猜出設備大致的屬性以及分區信息等;這對于陌生的設備來說特別方便。另外,udev設備管理器的服務會一直以守護進程的形式運行并偵聽內核發出的信號來管理/dev目錄下的設備文件。Linux系統中常見的硬件設備的文件名稱如下所示。
常見的硬件設備及其文件名稱

硬件設備文件名稱
IDE設備/dev/hd[a-d]
SCSI/SATA/U盤/dev/sd[a-p]
軟驅/dev/fd[0-1]
打印機/dev/lp[0-15]
光驅/dev/cdrom
鼠標/dev/mouse
磁帶機/dev/st0或/dev/ht0

分區

由于現在的IDE設備已經很少見了,所以一般的硬盤設備都會是以“/dev/sd”開頭的。而一臺主機上可以有多塊硬盤,因此系統采用a~p來代表16塊不同的硬盤(默認從a開始分配),而且硬盤的分區編號也很有講究:

主分區或擴展分區的編號從1開始,到4結束;
邏輯分區從編號5開始。

國內很多Linux培訓講師以及很多知名Linux圖書在講到設備和分區名稱時,總會講錯兩個知識點。第一個知識點是設備名稱的理解錯誤。很多培訓講師和Linux技術圖書中會提到,比如/dev/sda表示主板上第一個插槽上的存儲設備,學員或讀者在實踐操作的時候會發現果然如此,因此也就對這條理論知識更加深信不疑。但真相不是這樣的,/dev目錄中sda設備之所以是a,并不是由插槽決定的,而是由系統內核的識別順序來決定的,而恰巧很多主板的插槽順序就是系統內核的識別順序,因此才會被命名為/dev/sda。大家以后在使用iSCSI網絡存儲設備時就會發現,明明主板上第二個插槽是空著的,但系統卻能識別到/dev/sdb這個設備就是這個道理。

第二個知識點是對分區名稱的理解錯誤。很多Linux培訓講師會告訴學員,分區的編號代表分區的個數。比如sda3表示這是設備上的第三個分區,而學員在做實驗的時候確實也會得出這樣的結果,但是這個理論知識是錯誤的,因為分區的數字編碼不一定是強制順延下來的,也有可能是手工指定的。因此sda3只能表示是編號為3的分區,而不能判斷sda設備上已經存在了3個分區。

在填了這兩個“坑”之后,再來分析一下/dev/sda5這個設備文件名稱包含哪些信息,如圖6-2所示。

首先,/dev/目錄中保存的應當是硬件設備文件;其次,sd表示是存儲設備;然后,a表示系統中同類接口中第一個被識別到的設備,最后,5表示這個設備是一個邏輯分區。一言以蔽之,“/dev/sda5”表示的就是“這是系統中第一塊被識別到的硬件設備中分區編號為5的邏輯分區的設備文件”。考慮到我們的很多讀者完全沒有Linux基礎,不太容易理解前面所說的主分區、擴展分區和邏輯分區的概念,因此接下來簡單科普一下硬盤相關的知識。

正是因為計算機有了硬盤設備,我們才可以在玩游戲的過程中或游戲通關之后隨時存檔,而不用每次重頭開始。硬盤設備是由大量的扇區組成的,每個扇區的容量為512字節。其中第一個扇區最重要,它里面保存著主引導記錄與分區表信息。就第一個扇區來講,主引導記錄需要占用446字節,分區表為64字節,結束符占用2字節;其中分區表中每記錄一個分區信息就需要16字節,這樣一來最多只有4個分區信息可以寫到第一個扇區中,這4個分區就是4個主分區。第一個扇區中的數據信息如圖6-3所示。

現在,問題來了—第一個扇區最多只能創建出4個分區?于是為了解決分區個數不夠的問題,可以將第一個扇區的分區表中16字節(原本要寫入主分區信息)的空間(稱之為擴展分區)拿出來指向另外一個分區。也就是說,擴展分區其實并不是一個真正的分區,而更像是一個占用16字節分區表空間的指針—一個指向另外一個分區的指針。這樣一來,用戶一般會選擇使用3個主分區加1個擴展分區的方法,然后在擴展分區中創建出數個邏輯分區,從而來滿足多分區(大于4個)的需求。當然,就目前來講大家只要明白為什么主分區不能超過4個就足夠了。主分區、擴展分區、邏輯分區可以像圖6-4那樣來規劃。

所謂擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個分區的指針,這種指針結構將形成一個單向鏈表。

文件系統介紹

用戶在硬件存儲設備中執行的文件建立、寫入、讀取、修改、轉存與控制等操作都是依靠文件系統來完成的。文件系統的作用是合理規劃硬盤,以保證用戶正常的使用需求。Linux系統支持數十種的文件系統,而最常見的文件系統如下所示。

Ext3:是一款日志文件系統,能夠在系統異常宕機時避免文件系統資料丟失,并能自動修復數據的不一致與錯誤。然而,當硬盤容量較大時,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個磁盤的每個寫入動作的細節都預先記錄下來,以便在發生異常宕機后能回溯追蹤到被中斷的部分,然后嘗試進行修復。

Ext4:Ext3的改進版本,作為RHEL 6系統中的默認文件管理系統,它支持的存儲容量高達1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4文件系統能夠批量分配block塊,從而極大地提高了讀寫效率。

XFS:是一種高性能的日志文件系統,而且是RHEL 7中默認的文件管理系統,它的優勢在發生意外宕機后尤其明顯,即可以快速地恢復可能被破壞的文件,而且強大的日志功能只用花費極低的計算和存儲性能。并且它最大可支持的存儲容量為18EB,這幾乎滿足了所有需求。

就像拿到了一張未裁切的完整紙張那樣,我們首先要進行裁切以方便使用,然后在裁切后的紙張上畫格以便能書寫工整。在拿到了一塊新的硬盤存儲設備后,也需要先分區,然后再格式化文件系統,最后才能掛載并正常使用。硬盤的分區操作取決于您的需求和硬盤大小;您也可以選擇不進行分區,但是必須對硬盤進行格式化處理。接下來劉遄老師再向大家簡單地科普一下硬盤在格式化后發生的事情。再次強調,不用刻意去記住,只要能看懂就行了。

日常在硬盤需要保存的數據實在太多了,因此Linux系統中有一個名為super block的“硬盤地圖”。Linux并不是把文件內容直接寫入到這個“硬盤地圖”里面,而是在里面記錄著整個文件系統的信息。因為如果把所有的文件內容都寫入到這里面,它的體積將變得非常大,而且文件內容的查詢與寫入速度也會變得很慢。Linux只是把每個文件的權限與屬性記錄在inode中,而且每個文件占用一個獨立的inode表格,該表格的大小默認為128字節,里面記錄著如下信息:

該文件的訪問權限(read、write、execute);
該文件的所有者與所屬組(owner、group);
該文件的大小(size);
該文件的創建或內容修改時間(ctime);
該文件的最后一次訪問時間(atime);
該文件的修改時間(mtime);
文件的特殊權限(SUID、SGID、SBIT);
該文件的真實數據地址(point)。

而文件的實際內容則保存在block塊中(大小可以是1KB、2KB或4KB),一個inode的默認大小僅為128B(Ext3),記錄一個block則消耗4B。當文件的inode被寫滿后,Linux系統會自動分配出一個block塊,專門用于像inode那樣記錄其他block塊的信息,這樣把各個block塊的內容串到一起,就能夠讓用戶讀到完整的文件內容了。對于存儲文件內容的block塊,有下面兩種常見情況(以4KB的block大小為例進行說明)。

情況1:文件很小(1KB),但依然會占用一個block,因此會潛在地浪費3KB。
情況2:文件很大(5KB),那么會占用兩個block(5KB-4KB后剩下的1KB也要占用一個block)。

計算機系統在發展過程中產生了眾多的文件系統,為了使用戶在讀取或寫入文件時不用關心底層的硬盤結構,Linux內核中的軟件層為用戶程序提供了一個VFS(Virtual File System,虛擬文件系統)接口,這樣用戶實際上在操作文件時就是統一對這個虛擬文件系統進行操作了。圖6-5所示為VFS的架構示意圖。從中可見,實際文件系統在VFS下隱藏了自己的特性和細節,這樣用戶在日常使用時會覺得“文件系統都是一樣的”,也就可以隨意使用各種命令在任何文件系統中進行各種操作了(比如使用cp命令來復制文件)。

1. fdisk命令

在Linux系統中,管理硬盤設備最常用的方法就當屬fdisk命令了。fdisk命令用于管理磁盤分區,格式為“fdisk [磁盤名稱]”,它提供了集添加、刪除、轉換分區等功能于一身的“一站式分區服務”。不過與前面講解的直接寫到命令后面的參數不同,這條命令的參數是交互式的,因此在管理硬盤設備時特別方便,可以根據需求動態調整。

參數作用
m查看全部可用的參數
n添加新的分區
d刪除某個分區信息
l列出所有可用的分區類型
t改變某個分區的類型
p查看分區表信息
w保存并退出
q不保存直接退出

1.1:fdisk -l 查看磁盤分區信息

先查看下是否有磁盤沒有分區

詳細信息解釋

[root@localhost ~]# fdisk -l磁盤 /dev/sda:21.5 GB, 21474836480 字節,41943040 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理)512 字節 / 512 字節 I/O 大小(最小/最佳)512 字節 / 512 字節 磁盤標簽類型:dos 磁盤標識符:0x000c928b設備 Boot Start End Blocks Id System /dev/sda1 * 2048 411647 204800 83 Linux /dev/sda2 411648 4605951 2097152 82 Linux swap / Solaris /dev/sda3 4605952 41943039 18668544 83 Linux磁盤 /dev/sdb:10.7 GB, 10737418240 字節,20971520 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理)512 字節 / 512 字節 I/O 大小(最小/最佳)512 字節 / 512 字節 磁盤標簽類型:dos 磁盤標識符:0x3ca78df9設備 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM /dev/sdb2 2099200 4196351 1048576 8e Linux LVM /dev/sdb3 4196352 6293503 1048576 8e Linux LVM [root@localhost ~]#

1.2: 新增分區

1.2.1:新增分區解釋

第1步:我們首先使用fdisk命令來嘗試管理/dev/sdb硬盤設備。在看到提示信息后輸入參數p來查看硬盤設備內已有的分區信息,其中包括了硬盤的容量大小、扇區個數等信息:
第2步:輸入參數n嘗試添加新的分區。系統會要求您是選擇繼續輸入參數p來創建主分區,還是輸入參數e來創建擴展分區。這里輸入參數p來創建一個主分區:

第3步:在確認創建一個主分區后,系統要求您先輸入主分區的編號。主分區的編號范圍是1~4,因此這里輸入默認的1就可以了。接下來系統會提示定義起始的扇區位置,這不需要改動,我們敲擊回車鍵保留默認設置即可,系統會自動計算出最靠前的空閑扇區的位置。最后,系統會要求定義分區的結束扇區位置,這其實就是要去定義整個分區的大小是多少。我們不用去計算扇區的個數,只需要輸入+1G即可創建出一個容量為1GB的硬盤分區。

Command (m for help): n Partition type:p primary (0 primary, 0 extended, 4 free)e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G Partition 1 of type Linux and of size 1 GiB is set

第4步:再次使用參數p來查看硬盤設備中的分區信息。果然就能看到一個名稱為/dev/sdb1、起始扇區位置為2048、結束扇區位置為4196351的主分區了。這時候千萬不要直接關閉窗口,而應該敲擊參數w后回車,這樣分區信息才是真正的寫入成功啦。
第5步:在上述步驟執行完畢之后,Linux系統會自動把這個硬盤主分區抽象成/dev/sdb1設備文件。我們可以使用file命令查看該文件的屬性,但是劉遄老師在講課和工作中發現,有些時候系統并沒有自動把分區信息同步給Linux內核,而且這種情況似乎還比較常見(但不能算作是嚴重的bug)。我們可以輸入partprobe命令手動將分區信息同步到內核,而且一般推薦連續兩次執行該命令,效果會更好。如果使用這個命令都無法解決問題,那么就重啟計算機吧,這個殺手锏百試百靈,一定會有用的。

[root@linuxprobe ]# file /dev/sdb1 /dev/sdb1: cannot open (No such file or directory) [root@linuxprobe ]# partprobe [root@linuxprobe ]# partprobe [root@linuxprobe ]# file /dev/sdb1 /dev/sdb1: block special

詳細信息描述

[root@localhost ~]# fdisk /dev/sdb 歡迎使用 fdisk (util-linux 2.23.2)。更改將停留在內存中,直到您決定將更改寫入磁盤。 使用寫入命令前請三思。命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:10.7 GB, 10737418240 字節,20971520 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理)512 字節 / 512 字節 I/O 大小(最小/最佳)512 字節 / 512 字節 磁盤標簽類型:dos 磁盤標識符:0x3ca78df9設備 Boot Start End Blocks Id System命令(輸入 m 獲取幫助):n Partition type:p primary (0 primary, 0 extended, 4 free)e extended Select (default p): p 分區號 (1-4,默認 1): 起始 扇區 (2048-20971519,默認為 2048): 將使用默認值 2048 Last 扇區, +扇區 or +size{K,M,G} (2048-20971519,默認為 20971519)+1G 分區 1 已設置為 Linux 類型,大小設為 1 GiB命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:10.7 GB, 10737418240 字節,20971520 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理)512 字節 / 512 字節 I/O 大小(最小/最佳)512 字節 / 512 字節 磁盤標簽類型:dos 磁盤標識符:0x3ca78df9設備 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux命令(輸入 m 獲取幫助):t 已選擇分區 1 Hex 代碼(輸入 L 列出所有代碼)8e 已將分區“Linux”的類型更改為“Linux LVM”命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:10.7 GB, 10737418240 字節,20971520 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理)512 字節 / 512 字節 I/O 大小(最小/最佳)512 字節 / 512 字節 磁盤標簽類型:dos 磁盤標識符:0x3ca78df9設備 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM

1.2: 修改分區類型為8e

t 更改類型, 8e 代表lvm

[root@linuxprobe /]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them. Be careful before using the write command.Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'Command (m for help): pDisk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xcdd05104Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVMCommand (m for help): w The partition table has been altered!Calling ioctl() to re-read partition table. Syncing disks.

1.3:刪除分區

2. 格式化分區

如果硬件存儲設備沒有進行格式化,則Linux系統無法得知怎么在其上寫入數據。因此,在對存儲設備進行分區后還需要進行格式化操作。在Linux系統中用于格式化操作的命令是mkfs。這條命令很有意思,因為在Shell終端中輸入mkfs名后再敲擊兩下用于補齊命令的Tab鍵,會有如下所示的效果:

[root@linuxprobe ~]# mkfs mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat

對!這個mkfs命令很貼心地把常用的文件系統名稱用后綴的方式保存成了多個命令文件,用起來也非常簡單—mkfs.文件類型名稱。例如要格式分區為XFS的文件系統,則命令應為mkfs.ext4 /dev/sdb1。

[root@linuxprobe dev]# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 65536 inodes, 262144 blocks 13107 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=268435456 8 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks:32768, 98304, 163840, 229376Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done

3.掛載和取消掛載

什么是掛載

我們在用慣了Windows系統后總覺得一切都是理所當然的,平時把U盤插入到電腦后也從來沒有考慮過Windows系統做了哪些事情,才使得我們可以訪問這個U盤的。接下來我們會逐一學習在Linux系統中掛載和卸載存儲設備的方法,以便大家更好地了解Linux系統添加硬件設備的工作原理和流程。前面講到,在拿到一塊全新的硬盤存儲設備后要先分區,然后格式化,最后才能掛載并正常使用。“分區”和“格式化”大家以前經常聽到,但“掛載”又是什么呢?在這里給您一個最簡單、最貼切的解釋—當用戶需要使用硬盤設備或分區中的數據時,需要先將其與一個已存在的目錄文件進行關聯,而這個關聯動作就是“掛載”。

mount命令用于掛載文件系統,格式為“mount 文件系統 掛載目錄”。mount命令中可用的參數及作用如表6-3所示。掛載是在使用硬件設備前所執行的最后一步操作。只需使用mount命令把硬盤設備或分區與一個目錄文件進行關聯,然后就能在這個目錄中看到硬件設備中的數據了。對于比較新的Linux系統來講,一般不需要使用-t參數來指定文件系統的類型,Linux系統會自動進行判斷。而mount 中的-a參數則厲害了,它會在執行后自動檢查/etc/fstab文件中有無疏漏被掛載的設備文件,如果有,則進行自動掛載操作。

參數作用
-a掛載所有在/etc/fstab中定義的文件系統
-t指定文件系統的類型

3.1創建掛載點,并進行掛載

終于完成了存儲設備的分區和格式化操作,接下來就是要來掛載并使用存儲設備了。與之相關的步驟也非常簡單:首先是創建一個用于掛載設備的掛載點目錄;然后使用mount命令將存儲設備與掛載點進行關聯;最后使用df -h命令來查看掛載狀態和硬盤使用量信息。

[root@linuxprobe /]# mkdir -p java [root@linuxprobe /]# mount /dev/sdb1 /java/ [root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/sdb1 976M 2.6M 907M 1% /java

3.2取消掛載

卸載掛載點

$ umount /dev/hda1
$ umount /java
參數可以是設備文件或安裝點

[root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64

3.3 讓掛在永久有效

雖然按照上面的方法執行mount命令后就能立即使用文件系統了,但系統在重啟后掛載就會失效,也就是說我們需要每次開機后都手動掛載一下。這肯定不是我們想要的效果,如果想讓硬件設備和目錄永久地進行自動關聯,就必須把掛載信息按照指定的填寫格式“設備文件 掛載目錄 格式類型 權限選項 是否備份 是否自檢”(各字段的意義見表6-4)寫入到/etc/fstab文件中。這個文件中包含著掛載所需的諸多信息項目,一旦配置好之后就能一勞永逸了。
用于掛載信息的指定填寫格式中,各字段所表示的意義

字段意義
設備文件一般為設備的路徑+設備名稱,也可以寫唯一識別碼(UUID,Universally Unique Identifier)
掛載目錄指定要掛載到的目錄,需在掛載前創建好
格式類型指定文件系統的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此為光盤設備)等
權限選項若設置為defaults,則默認權限為:rw, suid, dev, exec, auto, nouser, async
是否備份若為1則開機后使用dump進行磁盤備份,為0則不備份
是否自檢若為1則開機后自動進行磁盤自檢,為0則不自檢

如果想將文件系統為ext4的硬件設備/dev/sdb2在開機后自動掛載到/backup目錄上,并保持默認權限且無需開機自檢,就需要在/etc/fstab文件中寫入下面的信息,這樣在系統重啟后也會成功掛載。

[root@linuxprobe ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Wed May 4 19:26:23 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 # /dev/mapper/rhel-root / xfs defaults 1 1 UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2 /dev/mapper/rhel-swap swap swap defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 /dev/sdb2 /backup ext4 defaults 0 0

4.LVM邏輯卷管理器的使用

前面學習的硬盤設備管理技術雖然能夠有效地提高硬盤設備的讀寫速度以及數據的安全性,但是在硬盤分好區或者部署為RAID磁盤陣列之后,再想修改硬盤分區大小就不容易了。換句話說,當用戶想要隨著實際需求的變化調整硬盤分區的大小時,會受到硬盤“靈活性”的限制。這時就需要用到另外一項非常普及的硬盤設備資源管理技術了—LVM(邏輯卷管理器)。LVM可以允許用戶對硬盤資源進行動態調整。

邏輯卷管理器是Linux系統用于對硬盤分區進行管理的一種機制,理論性較強,其創建初衷是為了解決硬盤設備在創建分區后不易修改分區大小的缺陷。盡管對傳統的硬盤分區進行強制擴容或縮容從理論上來講是可行的,但是卻可能造成數據的丟失。而LVM技術是在硬盤分區和文件系統之間添加了一個邏輯層,它提供了一個抽象的卷組,可以把多塊硬盤進行卷組合并。這樣一來,用戶不必關心物理硬盤設備的底層架構和布局,就可以實現對硬盤分區的動態調整。LVM的技術架構如圖所示。

  • 物理存儲介質(The physical media)
    這里指系統的存儲設備:硬盤,如:/dev/hda、/dev/sda等等,是存儲系統最低層的存儲單元。
  • 物理卷(physicalvolume)
    物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
  • 卷組(Volume Group)
    LVM卷組類似于非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。
  • 邏輯卷(logicalvolume)
    LVM的邏輯卷類似于非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。
  • PV(physical volume,PV)
    物理卷,它的文件格式不是ext4這些,而是具有LVM管理功能的LVM格式
  • VG(Volume Group,VG)
    卷組,卷組是在PV物理卷的基礎上創建的,卷組是由一個或多個物理卷組成的,卷組可以在物理卷PV的基礎上擴展和縮小。
  • LV(logical volume,LV)
    邏輯卷,在VG的基礎上創建,可以進行格式化、可以創建文件系統、可以被掛載。對于用戶相當于一個磁盤分區,不過實際上是在VG上邏輯出來的,可以在VG的基礎上實現擴展和縮小,擴展的邊界是不能超過VG的。
  • PE(Physical Extents)
    物理塊、PE相當于block塊,默認是4M,一個物理卷PV被劃分為稱為PE(Physical Extents)的基本單元,VG是由這些PE塊組成,也是VG可以自由擴展和縮小的關鍵原因。
  • LE(Logical Extent)
    邏輯卷LV也被劃分為可被尋址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,并且一一對應

為了幫助大家理解,劉遄老師來舉一個吃貨的例子。比如小明家里想吃饅頭但是面粉不夠了,于是媽媽從隔壁老王家、老李家、老張家分別借來一些面粉,準備蒸饅頭吃。首先需要把這些面粉(物理卷[PV,Physical Volume])揉成一個大面團(卷組[VG,Volume Group]),然后再把這個大面團分割成一個個小饅頭(邏輯卷[LV,Logical Volume]),而且每個小饅頭的重量必須是每勺面粉(基本單元[PE,Physical Extent])的倍數。

物理卷處于LVM中的最底層,可以將其理解為物理硬盤、硬盤分區或者RAID磁盤陣列,這都可以。卷組建立在物理卷之上,一個卷組可以包含多個物理卷,而且在卷組創建之后也可以繼續向其中添加新的物理卷。邏輯卷是用卷組中空閑的資源建立的,并且邏輯卷在建立后可以動態地擴展或縮小空間。這就是LVM的核心理念。

一般而言,在生產環境中無法精確地評估每個硬盤分區在日后的使用情況,因此會導致原先分配的硬盤分區不夠用。比如,伴隨著業務量的增加,用于存放交易記錄的數據庫目錄的體積也隨之增加;因為分析并記錄用戶的行為從而導致日志目錄的體積不斷變大,這些都會導致原有的硬盤分區在使用上捉襟見肘。而且,還存在對較大的硬盤分區進行精簡縮容的情況。

我們可以通過部署LVM來解決上述問題。部署LVM時,需要逐個配置物理卷、卷組和邏輯卷。常用的部署命令如表7-2所示。

命令物理卷管理卷組管理邏輯卷管理
掃描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
顯示pvdisplayvgdisplaylvdisplay
刪除pvremovevgremovelvremove
擴展vgextendlvextend
縮小vgreducelvreduce

4.1物理卷的使用

4.1.1創建物理卷

讓新sdb的主分區1支持LVM技術。
若是創建物理卷失敗,有可能磁盤掛載了(umount /mnt)

[root@linuxprobe /]# pvscanPV /dev/sda2 VG rhel_linuxprobe lvm2 [19.51 GiB / 0 free]Total: 1 [19.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 0 [0 ] [root@linuxprobe /]# pvcreate /dev/sdb1 WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n] yWiping ext4 signature on /dev/sdb1.Physical volume "/dev/sdb1" successfully created [root@linuxprobe /]# pvscanPV /dev/sda2 VG rhel_linuxprobe lvm2 [19.51 GiB / 0 free]PV /dev/sdb1 lvm2 [1.00 GiB]Total: 2 [20.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 1 [1.00 GiB]

4.1.2刪除物理卷

[root@linuxprobe /]# pvremove /dev/sdb1Labels on physical volume "/dev/sdb1" successfully wiped

4.1.3查看物理卷

pvdisplay和pvs命令

[root@linuxprobe /]# pvcreate /dev/sdb1Physical volume "/dev/sdb1" successfully created [root@linuxprobe /]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 rhel_linuxprobe lvm2 a-- 19.51g 0/dev/sdb1 lvm2 a-- 1.00g 1.00g [root@linuxprobe /]# pvdisplay--- Physical volume ---PV Name /dev/sda2VG Name rhel_linuxprobePV Size 19.51 GiB / not usable 3.00 MiBAllocatable yes (but full)PE Size 4.00 MiBTotal PE 4994Free PE 0Allocated PE 4994PV UUID vgri2e-8lV9-46Lw-F6tk-D9hQ-JkrR-c4xzP1"/dev/sdb1" is a new physical volume of "1.00 GiB"--- NEW Physical volume ---PV Name /dev/sdb1VG NamePV Size 1.00 GiBAllocatable NOPE Size 0Total PE 0Free PE 0Allocated PE 0PV UUID 2Zej1y-de1v-SfhX-5jId-qNiX-RngU-6Qu69I

4.2卷組

4.2.1創建卷組

  • vgcreate 命令,創建卷組
  • 格式:vgcreate vg1 /dev/sdb1 /dev/sdb2 兩個物理卷創建一個卷組“vg1”

把名字為/dev/sdb1的物理卷加入到卷組中,并且卷組命名為javavg

[root@linuxprobe /]# vgcreate javavg /dev/sdb1Volume group "javavg" successfully created [root@linuxprobe /]# vgsVG #PV #LV #SN Attr VSize VFreejavavg 1 0 0 wz--n- 1020.00m 1020.00mrhel_linuxprobe 1 2 0 wz--n- 19.51g 0 [root@linuxprobe /]# vgdisplay javavg--- Volume group ---VG Name javavgSystem IDFormat lvm2Metadata Areas 1Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 1Act PV 1VG Size 1020.00 MiBPE Size 4.00 MiBTotal PE 255Alloc PE / Size 0 / 0Free PE / Size 255 / 1020.00 MiBVG UUID 45kAcN-flU1-0n2a-BylI-Xrn2-vDTi-CEzc0T

4.2.2查看卷組

vgdisplay和vgs命令

[root@linuxprobe /]# vgsVG #PV #LV #SN Attr VSize VFreejavavg 1 0 0 wz--n- 1020.00m 1020.00mrhel_linuxprobe 1 2 0 wz--n- 19.51g 0 [root@linuxprobe /]# vgdisplay javavg--- Volume group ---VG Name javavgSystem IDFormat lvm2Metadata Areas 1Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 1Act PV 1VG Size 1020.00 MiBPE Size 4.00 MiBTotal PE 255Alloc PE / Size 0 / 0Free PE / Size 255 / 1020.00 MiBVG UUID 45kAcN-flU1-0n2a-BylI-Xrn2-vDTi-CEzc0T

4.2.3刪除卷組

刪除邏輯卷的時候可以只寫卷組的名稱,不需要設備的絕對路徑
刪除名字為storage的卷組

[root@linuxprobe /]# vgremove storageVolume group "storage" successfully removed [root@linuxprobe /]# pvdisplay--- Physical volume ---PV Name /dev/sda2VG Name rhel_linuxprobePV Size 19.51 GiB / not usable 3.00 MiBAllocatable yes (but full)PE Size 4.00 MiBTotal PE 4994Free PE 0Allocated PE 4994PV UUID vgri2e-8lV9-46Lw-F6tk-D9hQ-JkrR-c4xzP1"/dev/sdb1" is a new physical volume of "1.00 GiB"--- NEW Physical volume ---PV Name /dev/sdb1VG NamePV Size 1.00 GiBAllocatable NOPE Size 0Total PE 0Free PE 0Allocated PE 0PV UUID 8o6Fvh-SOI3-U1Q2-gRFZ-eof4-XgOC-jt33th

4.3邏輯卷

4.3.1創卷邏輯卷

lvcreate命令,創建邏輯卷

  • -L 參數,指定邏輯卷的大小
  • -n 參數,指定邏輯卷的名稱,并劃分出來
[root@linuxprobe /]# lvcreate -L 900M -n javalv javavgLogical volume "javalv" created [root@linuxprobe /]# lvsLV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convertjavalv javavg -wi-a----- 900.00mroot rhel_linuxprobe -wi-ao---- 17.51gswap rhel_linuxprobe -wi-ao---- 2.00g [root@linuxprobe /]# lvdisplay--- Logical volume ---LV Path /dev/rhel_linuxprobe/swapLV Name swapVG Name rhel_linuxprobeLV UUID hzHRjg-GD1i-0mff-K3QN-AlaN-dsSv-cId1zLLV Write Access read/writeLV Creation host, time localhost, 2019-09-18 08:16:52 +0800LV Status available# open 2LV Size 2.00 GiBCurrent LE 512Segments 1Allocation inheritRead ahead sectors auto- currently set to 256Block device 253:0--- Logical volume ---LV Path /dev/rhel_linuxprobe/rootLV Name rootVG Name rhel_linuxprobeLV UUID h7VYfL-xiF5-Wt2w-HaB9-Qfpp-7MM9-38xOSsLV Write Access read/writeLV Creation host, time localhost, 2019-09-18 08:16:53 +0800LV Status available# open 1LV Size 17.51 GiBCurrent LE 4482Segments 1Allocation inheritRead ahead sectors auto- currently set to 256Block device 253:1--- Logical volume ---LV Path /dev/javavg/javalvLV Name javalvVG Name javavgLV UUID ZebZis-KjJi-2GUx-3e5Q-f2Gl-L0Tp-JVVZ1dLV Write Access read/writeLV Creation host, time linuxprobe.com, 2020-06-07 16:36:05 +0800LV Status available# open 0LV Size 900.00 MiBCurrent LE 225Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2

4.3.2格式化邏輯卷

mkfs.ext4 /dev/javavg/javalv
若格式化xfs文件系統,在后續的擴容或縮容會受到一定的影響

[root@linuxprobe /]# mkfs.ext4 /dev/javavg/javalv mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 57600 inodes, 230400 blocks 11520 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=236978176 8 block groups 32768 blocks per group, 32768 fragments per group 7200 inodes per group Superblock backups stored on blocks:32768, 98304, 163840, 229376Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done [root@localhost ~]# mkfs.ext4 /dev/vg1/lv1 mke2fs 1.42.9 (28-Dec-2013) 文件系統標簽= OS type: Linux 塊大小=1024 (log=0) 分塊大小=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 25688 inodes, 102400 blocks 5120 blocks (5.00%) reserved for the super user 第一個數據塊=1 Maximum filesystem blocks=33685504 13 block groups 8192 blocks per group, 8192 fragments per group 1976 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729Allocating group tables: 完成 正在寫入inode表: 完成 Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成

4.3.2查看邏輯卷

lvdisplay和lvs命令

[root@linuxprobe /]# lvdisplay /dev/javavg/javalv--- Logical volume ---LV Path /dev/javavg/javalvLV Name javalvVG Name javavgLV UUID ZebZis-KjJi-2GUx-3e5Q-f2Gl-L0Tp-JVVZ1dLV Write Access read/writeLV Creation host, time linuxprobe.com, 2020-06-07 16:36:05 +0800LV Status available# open 0LV Size 900.00 MiBCurrent LE 225Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2[root@linuxprobe /]# lvsLV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convertjavalv javavg -wi-a----- 900.00mroot rhel_linuxprobe -wi-ao---- 17.51gswap rhel_linuxprobe -wi-ao---- 2.00g

4.3.3刪除邏輯卷

刪除邏輯卷的時候需要執行邏輯卷路徑
lvremove /dev/javavg/javalv

[root@linuxprobe /]# lvremove /dev/javavg/javalv Do you really want to remove active logical volume javalv? [y/n]: yLogical volume "javalv" successfully removed [root@linuxprobe /]# lvsLV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convertroot rhel_linuxprobe -wi-ao---- 17.51gswap rhel_linuxprobe -wi-ao---- 2.00g

4.4掛載邏輯卷

mount命令,掛載磁盤

  • 格式:mount /dev/javavg/javalv /java/ 掛載到 /java/ 目錄下
[root@linuxprobe /]# mount /dev/javavg/javalv /java [root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/mapper/javavg-javalv 93M 1.6M 85M 2% /java

這里會發現,明明mount的是/dev/javavg/javalv 這個文件,顯示的卻是/dev/mapper/javavg-javalv這個文件,下面會看到它們指向的是同一個文件 /dm-2 文件

[root@linuxprobe /]# ls -l /dev/javavg/javalv lrwxrwxrwx. 1 root root 7 Jun 7 16:49 /dev/javavg/javalv -> ../dm-2 [root@linuxprobe /]# ls -l /dev/mapper/javavg-javalv lrwxrwxrwx. 1 root root 7 Jun 7 16:49 /dev/mapper/javavg-javalv -> ../dm-2

永久掛載

雖然按照上面的方法執行mount命令后就能立即使用文件系統了,但是系統在重啟后掛載就會失效,也就是說我們需要每次開機后都手動掛載一下。如果想讓硬件設備和目錄永久地進行自動關聯,就必須把掛載信息按照指定的填寫格式"設備文件,掛載目錄,文件類型,權限選項,是否備份,是否自檢"(各字段的意義見表)寫入到/etc/fstab文件中。這個文件包含著掛載所需要的諸多信息項目,一點配置好之后就能一勞永逸了。
如果想將文件系統為ext4的邏輯卷在開機后自動掛載所在目錄上,并保持默認權限且無需開機自檢,就需要在/etc/fstab文件中寫入如下信息,這樣在系統重新啟動后也會掛載成功。

4.5在掛在點創建文件夾并創建文件

[root@linuxprobe /]# cd java [root@linuxprobe java]# mkdir -p test [root@linuxprobe java]# cd test [root@linuxprobe test]# echo "hello world" >> test1.txt [root@linuxprobe test]# cat test1.txt hello world [root@linuxprobe test]#

4.5 查看一個或多個文件占用了多大的硬盤空間

[root@linuxprobe test]# du -sh /java 17K /java [root@linuxprobe test]# du -sh /java/test/test1.txt 2.0K /java/test/test1.txt

4.6 查看邏輯卷剩余大小

df -h

[root@linuxprobe test]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/mapper/javavg-javalv 93M 1.6M 85M 2% /java

4.7 取消掛載,并且擴容邏輯卷

4.7.1 取消掛載

[root@linuxprobe ~]# umount /java [root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64

4.8 重新設置邏輯卷大小

4.8.1 邏輯卷的擴容

  • umout /java 取消掛載
  • lvextend -L 900M /dev/javavg/javalv 擴容至900M
  • e2fsck -f /dev/javavg/javalv 檢查磁盤完整性
  • resize2fs /dev/javavg/javalv 重置磁盤容量
  • !mount 重新掛載
[root@linuxprobe /]# lvsLV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convertjavalv javavg -wi-ao---- 100.00mroot rhel_linuxprobe -wi-ao---- 17.51gswap rhel_linuxprobe -wi-ao---- 2.00g [root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/mapper/javavg-javalv 93M 1.6M 85M 2% /java [root@linuxprobe /]# umount /java [root@linuxprobe /]# lvextend -L 900M /dev/javavg/javalvExtending logical volume javalv to 900.00 MiBLogical volume javalv successfully resized [root@linuxprobe /]# e2fsck -f /dev/javavg/javalv e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/javavg/javalv: 13/25688 files (7.7% non-contiguous), 8899/102400 blocks [root@linuxprobe /]# resize2fs /dev/javavg/javalv resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/javavg/javalv to 921600 (1k) blocks. The filesystem on /dev/javavg/javalv is now 921600 blocks long.[root@linuxprobe /]# !mount mount /dev/javavg/javalv /java [root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/mapper/javavg-javalv 869M 2.5M 817M 1% /java

4.8.2 邏輯卷的縮小

  • umout /java 取消掛載
  • e2fsck -f /dev/javavg/javalv 檢查磁盤完整性
  • resize2fs /dev/javavg/javalv 100M 重置磁盤容量
  • lvreduce -L 100M /dev/javavg/javalv 縮小至100M
  • !mount 重新掛載
[root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/mapper/javavg-javalv 869M 2.5M 817M 1% /java [root@linuxprobe /]# [root@linuxprobe /]# [root@linuxprobe /]# [root@linuxprobe /]# clear [root@linuxprobe /]# umount /java [root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 [root@linuxprobe /]# e2fsck -f /dev/javavg/javalv e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/javavg/javalv: 13/223288 files (7.7% non-contiguous), 34831/921600 blocks [root@linuxprobe /]# resize2fs /dev/javavg/javalv 100M resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/javavg/javalv to 102400 (1k) blocks. The filesystem on /dev/javavg/javalv is now 102400 blocks long.[root@linuxprobe /]# lvreduce -L 100M /dev/javavg/javalvWARNING: Reducing active logical volume to 100.00 MiBTHIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce javalv? [y/n]: yReducing logical volume javalv to 100.00 MiBLogical volume javalv successfully resized [root@linuxprobe /]# !mount mount /dev/javavg/javalv /java [root@linuxprobe /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel_linuxprobe-root 18G 6.2G 12G 35% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 92K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64 /dev/mapper/javavg-javalv 93M 1.6M 85M 2% /java

4.9 重新設置卷組的大小

4.9.1 卷組的擴容

  • 先準備好分區
  • 格式化分區
  • 把該分區制作成物理卷
  • vgextend 卷組名稱 物理卷名稱 — vgextend vg1 /dev/sdb5 將物理卷添加到卷組中(擴容卷組)
    先擴容卷組,再擴容邏輯卷

4.10 xfs文件系統擴容

xfs文件系統擴容
xfs文件系統不支持縮容,只能擴容

在xfs文件系統擴容的時候,不需要卸載,可直接擴容

xfs文件系統擴容,幾大步驟:

首先卸載,格式化成xfs文件系統,然后再次掛載
設置邏輯卷的大小,lvresize -L 300M /dev/vg1/lv1
xfs文件系統執行這條命令執行xfs_growfs /dev/vg1/lv1,便可看到擴容成功

[root@hf-01 ~]# !umount 先取消掛載 umount /mnt/ [root@hf-01 ~]# mkfs.xfs -f /dev/vg1/lv1 格式化成xfs文件系統 meta-data=/dev/vg1/lv1 isize=256 agcount=4, agsize=6400 blks= sectsz=512 attr=2, projid32bit=1= crc=0 data = bsize=4096 blocks=25600, imaxpct=25= sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=853, version=2= sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@hf-01 ~]# !mount 再次掛載 mount /dev/vg1/lv1 /mnt/ [root@hf-01 ~]# ls /mnt/ 這里會看到之前的文件目錄不存在了 [root@hf-01 ~]# touch /mnt/233.txt [root@hf-01 ~]# echo "aaa" > !$ echo "aaa" > /mnt/233.txt [root@hf-01 ~]# cat !$ cat /mnt/233.txt aaa [root@hf-01 ~]# lvs 查看邏輯卷大小LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertlv1 vg1 -wi-ao---- 100.00m [root@hf-01 ~]# lvresize -L 300M /dev/vg1/lv1 擴容到300M(這里不需要先卸載,直接擴容)Size of logical volume vg1/lv1 changed from 100.00 MiB (25 extents) to 300.00 MiB (75 extents).Logical volume vg1/lv1 successfully resized. [root@hf-01 ~]# lvs 會發現邏輯卷擴容到300MLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertlv1 vg1 -wi-ao---- 300.00m [root@hf-01 ~]# df -h 但是查看的時候,看看到還是100M(還需執行命令) 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 2.4G 16G 14% / devtmpfs 489M 0 489M 0% /dev tmpfs 494M 0 494M 0% /dev/shm tmpfs 494M 6.7M 487M 2% /run tmpfs 494M 0 494M 0% /sys/fs/cgroup /dev/sda1 197M 75M 123M 38% /boot /dev/mapper/vg1-lv1 97M 5.2M 92M 6% /mnt [root@hf-01 ~]# xfs_growfs /dev/vg1/lv1 執行這條運行,xfs文件系統才是成功擴容 meta-data=/dev/mapper/vg1-lv1 isize=256 agcount=4, agsize=6400 blks= sectsz=512 attr=2, projid32bit=1= crc=0 data = bsize=4096 blocks=25600, imaxpct=25= sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=853, version=2= sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 25600 to 76800 [root@hf-01 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 2.4G 16G 14% / devtmpfs 489M 0 489M 0% /dev tmpfs 494M 0 494M 0% /dev/shm tmpfs 494M 6.7M 487M 2% /run tmpfs 494M 0 494M 0% /sys/fs/cgroup /dev/sda1 197M 75M 123M 38% /boot /dev/mapper/vg1-lv1 297M 5.5M 292M 2% /mnt

4.11 實驗問題

  • 邏輯卷的擴容和縮容操作都需要先取消邏輯卷與目錄的掛載關聯;擴容操作是先擴容后檢查文件系統完整性,而縮容操作為了保證數據的安全,需要先檢查文件系統完整性再縮容。
  • LVM的刪除順序是一次移除邏輯卷,卷組,物理卷的
  • 在做實驗的時候,寫入一行配置到/etc/fstab中去,在做完 lvm實驗之后,reboot重啟之后,會發現進入不了系統(如下圖類似的界面)

    本來應該是顯示中文,但是在vm終端下,中文不支持,所以看到幾個小方塊,就是讓我們輸入root用戶密碼,
    在生產環境出現類似問題,往往是磁盤掛載出現問題,不能正常掛載到掛載點
    輸入root密碼,就可進入界面(和正常登錄系統類似)
    進入vi /etc/fstab中刪除/dev/sdb這一行(快捷鍵dd),然后保存退出
    再次重啟,會恢復正常

總結

以上是生活随笔為你收集整理的linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。