linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结
物理設備的命名規(guī)則
在Linux系統(tǒng)中一切都是文件,硬件設備也不例外。既然是文件,就必須有文件名稱。系統(tǒng)內核中的udev設備管理器會自動把硬件名稱規(guī)范起來,目的是讓用戶通過設備文件的名字可以猜出設備大致的屬性以及分區(qū)信息等;這對于陌生的設備來說特別方便。另外,udev設備管理器的服務會一直以守護進程的形式運行并偵聽內核發(fā)出的信號來管理/dev目錄下的設備文件。Linux系統(tǒng)中常見的硬件設備的文件名稱如下所示。
常見的硬件設備及其文件名稱
| 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 |
分區(qū)
由于現(xiàn)在的IDE設備已經(jīng)很少見了,所以一般的硬盤設備都會是以“/dev/sd”開頭的。而一臺主機上可以有多塊硬盤,因此系統(tǒng)采用a~p來代表16塊不同的硬盤(默認從a開始分配),而且硬盤的分區(qū)編號也很有講究:
主分區(qū)或擴展分區(qū)的編號從1開始,到4結束;
邏輯分區(qū)從編號5開始。
國內很多Linux培訓講師以及很多知名Linux圖書在講到設備和分區(qū)名稱時,總會講錯兩個知識點。第一個知識點是設備名稱的理解錯誤。很多培訓講師和Linux技術圖書中會提到,比如/dev/sda表示主板上第一個插槽上的存儲設備,學員或讀者在實踐操作的時候會發(fā)現(xiàn)果然如此,因此也就對這條理論知識更加深信不疑。但真相不是這樣的,/dev目錄中sda設備之所以是a,并不是由插槽決定的,而是由系統(tǒng)內核的識別順序來決定的,而恰巧很多主板的插槽順序就是系統(tǒng)內核的識別順序,因此才會被命名為/dev/sda。大家以后在使用iSCSI網(wǎng)絡存儲設備時就會發(fā)現(xiàn),明明主板上第二個插槽是空著的,但系統(tǒng)卻能識別到/dev/sdb這個設備就是這個道理。
第二個知識點是對分區(qū)名稱的理解錯誤。很多Linux培訓講師會告訴學員,分區(qū)的編號代表分區(qū)的個數(shù)。比如sda3表示這是設備上的第三個分區(qū),而學員在做實驗的時候確實也會得出這樣的結果,但是這個理論知識是錯誤的,因為分區(qū)的數(shù)字編碼不一定是強制順延下來的,也有可能是手工指定的。因此sda3只能表示是編號為3的分區(qū),而不能判斷sda設備上已經(jīng)存在了3個分區(qū)。
在填了這兩個“坑”之后,再來分析一下/dev/sda5這個設備文件名稱包含哪些信息,如圖6-2所示。
首先,/dev/目錄中保存的應當是硬件設備文件;其次,sd表示是存儲設備;然后,a表示系統(tǒng)中同類接口中第一個被識別到的設備,最后,5表示這個設備是一個邏輯分區(qū)。一言以蔽之,“/dev/sda5”表示的就是“這是系統(tǒng)中第一塊被識別到的硬件設備中分區(qū)編號為5的邏輯分區(qū)的設備文件”。考慮到我們的很多讀者完全沒有Linux基礎,不太容易理解前面所說的主分區(qū)、擴展分區(qū)和邏輯分區(qū)的概念,因此接下來簡單科普一下硬盤相關的知識。
正是因為計算機有了硬盤設備,我們才可以在玩游戲的過程中或游戲通關之后隨時存檔,而不用每次重頭開始。硬盤設備是由大量的扇區(qū)組成的,每個扇區(qū)的容量為512字節(jié)。其中第一個扇區(qū)最重要,它里面保存著主引導記錄與分區(qū)表信息。就第一個扇區(qū)來講,主引導記錄需要占用446字節(jié),分區(qū)表為64字節(jié),結束符占用2字節(jié);其中分區(qū)表中每記錄一個分區(qū)信息就需要16字節(jié),這樣一來最多只有4個分區(qū)信息可以寫到第一個扇區(qū)中,這4個分區(qū)就是4個主分區(qū)。第一個扇區(qū)中的數(shù)據(jù)信息如圖6-3所示。
現(xiàn)在,問題來了—第一個扇區(qū)最多只能創(chuàng)建出4個分區(qū)?于是為了解決分區(qū)個數(shù)不夠的問題,可以將第一個扇區(qū)的分區(qū)表中16字節(jié)(原本要寫入主分區(qū)信息)的空間(稱之為擴展分區(qū))拿出來指向另外一個分區(qū)。也就是說,擴展分區(qū)其實并不是一個真正的分區(qū),而更像是一個占用16字節(jié)分區(qū)表空間的指針—一個指向另外一個分區(qū)的指針。這樣一來,用戶一般會選擇使用3個主分區(qū)加1個擴展分區(qū)的方法,然后在擴展分區(qū)中創(chuàng)建出數(shù)個邏輯分區(qū),從而來滿足多分區(qū)(大于4個)的需求。當然,就目前來講大家只要明白為什么主分區(qū)不能超過4個就足夠了。主分區(qū)、擴展分區(qū)、邏輯分區(qū)可以像圖6-4那樣來規(guī)劃。
所謂擴展分區(qū),嚴格地講它不是一個實際意義的分區(qū),它僅僅是一個指向下一個分區(qū)的指針,這種指針結構將形成一個單向鏈表。
文件系統(tǒng)介紹
用戶在硬件存儲設備中執(zhí)行的文件建立、寫入、讀取、修改、轉存與控制等操作都是依靠文件系統(tǒng)來完成的。文件系統(tǒng)的作用是合理規(guī)劃硬盤,以保證用戶正常的使用需求。Linux系統(tǒng)支持數(shù)十種的文件系統(tǒng),而最常見的文件系統(tǒng)如下所示。
Ext3:是一款日志文件系統(tǒng),能夠在系統(tǒng)異常宕機時避免文件系統(tǒng)資料丟失,并能自動修復數(shù)據(jù)的不一致與錯誤。然而,當硬盤容量較大時,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個磁盤的每個寫入動作的細節(jié)都預先記錄下來,以便在發(fā)生異常宕機后能回溯追蹤到被中斷的部分,然后嘗試進行修復。
Ext4:Ext3的改進版本,作為RHEL 6系統(tǒng)中的默認文件管理系統(tǒng),它支持的存儲容量高達1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4文件系統(tǒng)能夠批量分配block塊,從而極大地提高了讀寫效率。
XFS:是一種高性能的日志文件系統(tǒng),而且是RHEL 7中默認的文件管理系統(tǒng),它的優(yōu)勢在發(fā)生意外宕機后尤其明顯,即可以快速地恢復可能被破壞的文件,而且強大的日志功能只用花費極低的計算和存儲性能。并且它最大可支持的存儲容量為18EB,這幾乎滿足了所有需求。
就像拿到了一張未裁切的完整紙張那樣,我們首先要進行裁切以方便使用,然后在裁切后的紙張上畫格以便能書寫工整。在拿到了一塊新的硬盤存儲設備后,也需要先分區(qū),然后再格式化文件系統(tǒng),最后才能掛載并正常使用。硬盤的分區(qū)操作取決于您的需求和硬盤大小;您也可以選擇不進行分區(qū),但是必須對硬盤進行格式化處理。接下來劉遄老師再向大家簡單地科普一下硬盤在格式化后發(fā)生的事情。再次強調,不用刻意去記住,只要能看懂就行了。
日常在硬盤需要保存的數(shù)據(jù)實在太多了,因此Linux系統(tǒng)中有一個名為super block的“硬盤地圖”。Linux并不是把文件內容直接寫入到這個“硬盤地圖”里面,而是在里面記錄著整個文件系統(tǒng)的信息。因為如果把所有的文件內容都寫入到這里面,它的體積將變得非常大,而且文件內容的查詢與寫入速度也會變得很慢。Linux只是把每個文件的權限與屬性記錄在inode中,而且每個文件占用一個獨立的inode表格,該表格的大小默認為128字節(jié),里面記錄著如下信息:
該文件的訪問權限(read、write、execute);
該文件的所有者與所屬組(owner、group);
該文件的大小(size);
該文件的創(chuàng)建或內容修改時間(ctime);
該文件的最后一次訪問時間(atime);
該文件的修改時間(mtime);
文件的特殊權限(SUID、SGID、SBIT);
該文件的真實數(shù)據(jù)地址(point)。
而文件的實際內容則保存在block塊中(大小可以是1KB、2KB或4KB),一個inode的默認大小僅為128B(Ext3),記錄一個block則消耗4B。當文件的inode被寫滿后,Linux系統(tǒng)會自動分配出一個block塊,專門用于像inode那樣記錄其他block塊的信息,這樣把各個block塊的內容串到一起,就能夠讓用戶讀到完整的文件內容了。對于存儲文件內容的block塊,有下面兩種常見情況(以4KB的block大小為例進行說明)。
情況1:文件很小(1KB),但依然會占用一個block,因此會潛在地浪費3KB。
情況2:文件很大(5KB),那么會占用兩個block(5KB-4KB后剩下的1KB也要占用一個block)。
計算機系統(tǒng)在發(fā)展過程中產(chǎn)生了眾多的文件系統(tǒng),為了使用戶在讀取或寫入文件時不用關心底層的硬盤結構,Linux內核中的軟件層為用戶程序提供了一個VFS(Virtual File System,虛擬文件系統(tǒng))接口,這樣用戶實際上在操作文件時就是統(tǒng)一對這個虛擬文件系統(tǒng)進行操作了。圖6-5所示為VFS的架構示意圖。從中可見,實際文件系統(tǒng)在VFS下隱藏了自己的特性和細節(jié),這樣用戶在日常使用時會覺得“文件系統(tǒng)都是一樣的”,也就可以隨意使用各種命令在任何文件系統(tǒng)中進行各種操作了(比如使用cp命令來復制文件)。
1. fdisk命令
在Linux系統(tǒng)中,管理硬盤設備最常用的方法就當屬fdisk命令了。fdisk命令用于管理磁盤分區(qū),格式為“fdisk [磁盤名稱]”,它提供了集添加、刪除、轉換分區(qū)等功能于一身的“一站式分區(qū)服務”。不過與前面講解的直接寫到命令后面的參數(shù)不同,這條命令的參數(shù)是交互式的,因此在管理硬盤設備時特別方便,可以根據(jù)需求動態(tài)調整。
| m | 查看全部可用的參數(shù) |
| n | 添加新的分區(qū) |
| d | 刪除某個分區(qū)信息 |
| l | 列出所有可用的分區(qū)類型 |
| t | 改變某個分區(qū)的類型 |
| p | 查看分區(qū)表信息 |
| w | 保存并退出 |
| q | 不保存直接退出 |
1.1:fdisk -l 查看磁盤分區(qū)信息
先查看下是否有磁盤沒有分區(qū)
詳細信息解釋
1.2: 新增分區(qū)
1.2.1:新增分區(qū)解釋
第1步:我們首先使用fdisk命令來嘗試管理/dev/sdb硬盤設備。在看到提示信息后輸入?yún)?shù)p來查看硬盤設備內已有的分區(qū)信息,其中包括了硬盤的容量大小、扇區(qū)個數(shù)等信息:
第2步:輸入?yún)?shù)n嘗試添加新的分區(qū)。系統(tǒng)會要求您是選擇繼續(xù)輸入?yún)?shù)p來創(chuàng)建主分區(qū),還是輸入?yún)?shù)e來創(chuàng)建擴展分區(qū)。這里輸入?yún)?shù)p來創(chuàng)建一個主分區(qū):
第3步:在確認創(chuàng)建一個主分區(qū)后,系統(tǒng)要求您先輸入主分區(qū)的編號。主分區(qū)的編號范圍是1~4,因此這里輸入默認的1就可以了。接下來系統(tǒng)會提示定義起始的扇區(qū)位置,這不需要改動,我們敲擊回車鍵保留默認設置即可,系統(tǒng)會自動計算出最靠前的空閑扇區(qū)的位置。最后,系統(tǒng)會要求定義分區(qū)的結束扇區(qū)位置,這其實就是要去定義整個分區(qū)的大小是多少。我們不用去計算扇區(qū)的個數(shù),只需要輸入+1G即可創(chuàng)建出一個容量為1GB的硬盤分區(qū)。
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步:再次使用參數(shù)p來查看硬盤設備中的分區(qū)信息。果然就能看到一個名稱為/dev/sdb1、起始扇區(qū)位置為2048、結束扇區(qū)位置為4196351的主分區(qū)了。這時候千萬不要直接關閉窗口,而應該敲擊參數(shù)w后回車,這樣分區(qū)信息才是真正的寫入成功啦。
第5步:在上述步驟執(zhí)行完畢之后,Linux系統(tǒng)會自動把這個硬盤主分區(qū)抽象成/dev/sdb1設備文件。我們可以使用file命令查看該文件的屬性,但是劉遄老師在講課和工作中發(fā)現(xiàn),有些時候系統(tǒng)并沒有自動把分區(qū)信息同步給Linux內核,而且這種情況似乎還比較常見(但不能算作是嚴重的bug)。我們可以輸入partprobe命令手動將分區(qū)信息同步到內核,而且一般推薦連續(xù)兩次執(zhí)行該命令,效果會更好。如果使用這個命令都無法解決問題,那么就重啟計算機吧,這個殺手锏百試百靈,一定會有用的。
詳細信息描述
[root@localhost ~]# fdisk /dev/sdb 歡迎使用 fdisk (util-linux 2.23.2)。更改將停留在內存中,直到您決定將更改寫入磁盤。 使用寫入命令前請三思。命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:10.7 GB, 10737418240 字節(jié),20971520 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié) 磁盤標簽類型: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 分區(qū)號 (1-4,默認 1): 起始 扇區(qū) (2048-20971519,默認為 2048): 將使用默認值 2048 Last 扇區(qū), +扇區(qū) or +size{K,M,G} (2048-20971519,默認為 20971519):+1G 分區(qū) 1 已設置為 Linux 類型,大小設為 1 GiB命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:10.7 GB, 10737418240 字節(jié),20971520 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié) 磁盤標簽類型:dos 磁盤標識符:0x3ca78df9設備 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux命令(輸入 m 獲取幫助):t 已選擇分區(qū) 1 Hex 代碼(輸入 L 列出所有代碼):8e 已將分區(qū)“Linux”的類型更改為“Linux LVM”命令(輸入 m 獲取幫助):p磁盤 /dev/sdb:10.7 GB, 10737418240 字節(jié),20971520 個扇區(qū) Units = 扇區(qū) of 1 * 512 = 512 bytes 扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié) I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié) 磁盤標簽類型:dos 磁盤標識符:0x3ca78df9設備 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM1.2: 修改分區(qū)類型為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:刪除分區(qū)
2. 格式化分區(qū)
如果硬件存儲設備沒有進行格式化,則Linux系統(tǒng)無法得知怎么在其上寫入數(shù)據(jù)。因此,在對存儲設備進行分區(qū)后還需要進行格式化操作。在Linux系統(tǒng)中用于格式化操作的命令是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命令很貼心地把常用的文件系統(tǒng)名稱用后綴的方式保存成了多個命令文件,用起來也非常簡單—mkfs.文件類型名稱。例如要格式分區(qū)為XFS的文件系統(tǒng),則命令應為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: done3.掛載和取消掛載
什么是掛載
我們在用慣了Windows系統(tǒng)后總覺得一切都是理所當然的,平時把U盤插入到電腦后也從來沒有考慮過Windows系統(tǒng)做了哪些事情,才使得我們可以訪問這個U盤的。接下來我們會逐一學習在Linux系統(tǒng)中掛載和卸載存儲設備的方法,以便大家更好地了解Linux系統(tǒng)添加硬件設備的工作原理和流程。前面講到,在拿到一塊全新的硬盤存儲設備后要先分區(qū),然后格式化,最后才能掛載并正常使用。“分區(qū)”和“格式化”大家以前經(jīng)常聽到,但“掛載”又是什么呢?在這里給您一個最簡單、最貼切的解釋—當用戶需要使用硬盤設備或分區(qū)中的數(shù)據(jù)時,需要先將其與一個已存在的目錄文件進行關聯(lián),而這個關聯(lián)動作就是“掛載”。
mount命令用于掛載文件系統(tǒng),格式為“mount 文件系統(tǒng) 掛載目錄”。mount命令中可用的參數(shù)及作用如表6-3所示。掛載是在使用硬件設備前所執(zhí)行的最后一步操作。只需使用mount命令把硬盤設備或分區(qū)與一個目錄文件進行關聯(lián),然后就能在這個目錄中看到硬件設備中的數(shù)據(jù)了。對于比較新的Linux系統(tǒng)來講,一般不需要使用-t參數(shù)來指定文件系統(tǒng)的類型,Linux系統(tǒng)會自動進行判斷。而mount 中的-a參數(shù)則厲害了,它會在執(zhí)行后自動檢查/etc/fstab文件中有無疏漏被掛載的設備文件,如果有,則進行自動掛載操作。
| -a | 掛載所有在/etc/fstab中定義的文件系統(tǒng) |
| -t | 指定文件系統(tǒng)的類型 |
3.1創(chuàng)建掛載點,并進行掛載
終于完成了存儲設備的分區(qū)和格式化操作,接下來就是要來掛載并使用存儲設備了。與之相關的步驟也非常簡單:首先是創(chuàng)建一個用于掛載設備的掛載點目錄;然后使用mount命令將存儲設備與掛載點進行關聯(lián);最后使用df -h命令來查看掛載狀態(tài)和硬盤使用量信息。
[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% /java3.2取消掛載
卸載掛載點
$ umount /dev/hda1
$ umount /java
參數(shù)可以是設備文件或安裝點
3.3 讓掛在永久有效
雖然按照上面的方法執(zhí)行mount命令后就能立即使用文件系統(tǒng)了,但系統(tǒng)在重啟后掛載就會失效,也就是說我們需要每次開機后都手動掛載一下。這肯定不是我們想要的效果,如果想讓硬件設備和目錄永久地進行自動關聯(lián),就必須把掛載信息按照指定的填寫格式“設備文件 掛載目錄 格式類型 權限選項 是否備份 是否自檢”(各字段的意義見表6-4)寫入到/etc/fstab文件中。這個文件中包含著掛載所需的諸多信息項目,一旦配置好之后就能一勞永逸了。
用于掛載信息的指定填寫格式中,各字段所表示的意義
| 設備文件 | 一般為設備的路徑+設備名稱,也可以寫唯一識別碼(UUID,Universally Unique Identifier) |
| 掛載目錄 | 指定要掛載到的目錄,需在掛載前創(chuàng)建好 |
| 格式類型 | 指定文件系統(tǒng)的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此為光盤設備)等 |
| 權限選項 | 若設置為defaults,則默認權限為:rw, suid, dev, exec, auto, nouser, async |
| 是否備份 | 若為1則開機后使用dump進行磁盤備份,為0則不備份 |
| 是否自檢 | 若為1則開機后自動進行磁盤自檢,為0則不自檢 |
如果想將文件系統(tǒng)為ext4的硬件設備/dev/sdb2在開機后自動掛載到/backup目錄上,并保持默認權限且無需開機自檢,就需要在/etc/fstab文件中寫入下面的信息,這樣在系統(tǒng)重啟后也會成功掛載。
[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 04.LVM邏輯卷管理器的使用
前面學習的硬盤設備管理技術雖然能夠有效地提高硬盤設備的讀寫速度以及數(shù)據(jù)的安全性,但是在硬盤分好區(qū)或者部署為RAID磁盤陣列之后,再想修改硬盤分區(qū)大小就不容易了。換句話說,當用戶想要隨著實際需求的變化調整硬盤分區(qū)的大小時,會受到硬盤“靈活性”的限制。這時就需要用到另外一項非常普及的硬盤設備資源管理技術了—LVM(邏輯卷管理器)。LVM可以允許用戶對硬盤資源進行動態(tài)調整。
邏輯卷管理器是Linux系統(tǒng)用于對硬盤分區(qū)進行管理的一種機制,理論性較強,其創(chuàng)建初衷是為了解決硬盤設備在創(chuàng)建分區(qū)后不易修改分區(qū)大小的缺陷。盡管對傳統(tǒng)的硬盤分區(qū)進行強制擴容或縮容從理論上來講是可行的,但是卻可能造成數(shù)據(jù)的丟失。而LVM技術是在硬盤分區(qū)和文件系統(tǒng)之間添加了一個邏輯層,它提供了一個抽象的卷組,可以把多塊硬盤進行卷組合并。這樣一來,用戶不必關心物理硬盤設備的底層架構和布局,就可以實現(xiàn)對硬盤分區(qū)的動態(tài)調整。LVM的技術架構如圖所示。
- 物理存儲介質(The physical media)
這里指系統(tǒng)的存儲設備:硬盤,如:/dev/hda、/dev/sda等等,是存儲系統(tǒng)最低層的存儲單元。 - 物理卷(physicalvolume)
物理卷就是指硬盤分區(qū)或從邏輯上與磁盤分區(qū)具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區(qū)、磁盤等)比較,卻包含有與LVM相關的管理參數(shù)。 - 卷組(Volume Group)
LVM卷組類似于非LVM系統(tǒng)中的物理硬盤,其由物理卷組成。可以在卷組上創(chuàng)建一個或多個“LVM分區(qū)”(邏輯卷),LVM卷組由一個或多個物理卷組成。 - 邏輯卷(logicalvolume)
LVM的邏輯卷類似于非LVM系統(tǒng)中的硬盤分區(qū),在邏輯卷之上可以建立文件系統(tǒng)(比如/home或者/usr等)。 - PV(physical volume,PV)
物理卷,它的文件格式不是ext4這些,而是具有LVM管理功能的LVM格式 - VG(Volume Group,VG)
卷組,卷組是在PV物理卷的基礎上創(chuàng)建的,卷組是由一個或多個物理卷組成的,卷組可以在物理卷PV的基礎上擴展和縮小。 - LV(logical volume,LV)
邏輯卷,在VG的基礎上創(chuàng)建,可以進行格式化、可以創(chuàng)建文件系統(tǒng)、可以被掛載。對于用戶相當于一個磁盤分區(qū),不過實際上是在VG上邏輯出來的,可以在VG的基礎上實現(xiàn)擴展和縮小,擴展的邊界是不能超過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])的倍數(shù)。
物理卷處于LVM中的最底層,可以將其理解為物理硬盤、硬盤分區(qū)或者RAID磁盤陣列,這都可以。卷組建立在物理卷之上,一個卷組可以包含多個物理卷,而且在卷組創(chuàng)建之后也可以繼續(xù)向其中添加新的物理卷。邏輯卷是用卷組中空閑的資源建立的,并且邏輯卷在建立后可以動態(tài)地擴展或縮小空間。這就是LVM的核心理念。
一般而言,在生產(chǎn)環(huán)境中無法精確地評估每個硬盤分區(qū)在日后的使用情況,因此會導致原先分配的硬盤分區(qū)不夠用。比如,伴隨著業(yè)務量的增加,用于存放交易記錄的數(shù)據(jù)庫目錄的體積也隨之增加;因為分析并記錄用戶的行為從而導致日志目錄的體積不斷變大,這些都會導致原有的硬盤分區(qū)在使用上捉襟見肘。而且,還存在對較大的硬盤分區(qū)進行精簡縮容的情況。
我們可以通過部署LVM來解決上述問題。部署LVM時,需要逐個配置物理卷、卷組和邏輯卷。常用的部署命令如表7-2所示。
| 掃描 | pvscan | vgscan | lvscan |
| 建立 | pvcreate | vgcreate | lvcreate |
| 顯示 | pvdisplay | vgdisplay | lvdisplay |
| 刪除 | pvremove | vgremove | lvremove |
| 擴展 | vgextend | lvextend | |
| 縮小 | vgreduce | lvreduce |
4.1物理卷的使用
4.1.1創(chuàng)建物理卷
讓新sdb的主分區(qū)1支持LVM技術。
若是創(chuàng)建物理卷失敗,有可能磁盤掛載了(umount /mnt)
4.1.2刪除物理卷
[root@linuxprobe /]# pvremove /dev/sdb1Labels on physical volume "/dev/sdb1" successfully wiped4.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-6Qu69I4.2卷組
4.2.1創(chuàng)建卷組
- vgcreate 命令,創(chuàng)建卷組
- 格式:vgcreate vg1 /dev/sdb1 /dev/sdb2 兩個物理卷創(chuàng)建一個卷組“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-CEzc0T4.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-CEzc0T4.2.3刪除卷組
刪除邏輯卷的時候可以只寫卷組的名稱,不需要設備的絕對路徑
刪除名字為storage的卷組
4.3邏輯卷
4.3.1創(chuàng)卷邏輯卷
lvcreate命令,創(chuàng)建邏輯卷
- -L 參數(shù),指定邏輯卷的大小
- -n 參數(shù),指定邏輯卷的名稱,并劃分出來
4.3.2格式化邏輯卷
mkfs.ext4 /dev/javavg/javalv
若格式化xfs文件系統(tǒng),在后續(xù)的擴容或縮容會受到一定的影響
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.00g4.3.3刪除邏輯卷
刪除邏輯卷的時候需要執(zhí)行邏輯卷路徑
lvremove /dev/javavg/javalv
4.4掛載邏輯卷
mount命令,掛載磁盤
- 格式:mount /dev/javavg/javalv /java/ 掛載到 /java/ 目錄下
這里會發(fā)現(xiàn),明明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永久掛載
雖然按照上面的方法執(zhí)行mount命令后就能立即使用文件系統(tǒng)了,但是系統(tǒng)在重啟后掛載就會失效,也就是說我們需要每次開機后都手動掛載一下。如果想讓硬件設備和目錄永久地進行自動關聯(lián),就必須把掛載信息按照指定的填寫格式"設備文件,掛載目錄,文件類型,權限選項,是否備份,是否自檢"(各字段的意義見表)寫入到/etc/fstab文件中。這個文件包含著掛載所需要的諸多信息項目,一點配置好之后就能一勞永逸了。
如果想將文件系統(tǒng)為ext4的邏輯卷在開機后自動掛載所在目錄上,并保持默認權限且無需開機自檢,就需要在/etc/fstab文件中寫入如下信息,這樣在系統(tǒng)重新啟動后也會掛載成功。
4.5在掛在點創(chuàng)建文件夾并創(chuàng)建文件
[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.txt4.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% /java4.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_644.8 重新設置邏輯卷大小
4.8.1 邏輯卷的擴容
- umout /java 取消掛載
- lvextend -L 900M /dev/javavg/javalv 擴容至900M
- e2fsck -f /dev/javavg/javalv 檢查磁盤完整性
- resize2fs /dev/javavg/javalv 重置磁盤容量
- !mount 重新掛載
4.8.2 邏輯卷的縮小
- umout /java 取消掛載
- e2fsck -f /dev/javavg/javalv 檢查磁盤完整性
- resize2fs /dev/javavg/javalv 100M 重置磁盤容量
- lvreduce -L 100M /dev/javavg/javalv 縮小至100M
- !mount 重新掛載
4.9 重新設置卷組的大小
4.9.1 卷組的擴容
- 先準備好分區(qū)
- 格式化分區(qū)
- 把該分區(qū)制作成物理卷
- vgextend 卷組名稱 物理卷名稱 — vgextend vg1 /dev/sdb5 將物理卷添加到卷組中(擴容卷組)
先擴容卷組,再擴容邏輯卷
4.10 xfs文件系統(tǒng)擴容
xfs文件系統(tǒng)擴容
xfs文件系統(tǒng)不支持縮容,只能擴容
在xfs文件系統(tǒng)擴容的時候,不需要卸載,可直接擴容
xfs文件系統(tǒng)擴容,幾大步驟:
首先卸載,格式化成xfs文件系統(tǒng),然后再次掛載
設置邏輯卷的大小,lvresize -L 300M /dev/vg1/lv1
xfs文件系統(tǒng)執(zhí)行這條命令執(zhí)行xfs_growfs /dev/vg1/lv1,便可看到擴容成功
4.11 實驗問題
- 邏輯卷的擴容和縮容操作都需要先取消邏輯卷與目錄的掛載關聯(lián);擴容操作是先擴容后檢查文件系統(tǒng)完整性,而縮容操作為了保證數(shù)據(jù)的安全,需要先檢查文件系統(tǒng)完整性再縮容。
- LVM的刪除順序是一次移除邏輯卷,卷組,物理卷的
- 在做實驗的時候,寫入一行配置到/etc/fstab中去,在做完 lvm實驗之后,reboot重啟之后,會發(fā)現(xiàn)進入不了系統(tǒng)(如下圖類似的界面)
本來應該是顯示中文,但是在vm終端下,中文不支持,所以看到幾個小方塊,就是讓我們輸入root用戶密碼,
在生產(chǎn)環(huán)境出現(xiàn)類似問題,往往是磁盤掛載出現(xiàn)問題,不能正常掛載到掛載點
輸入root密碼,就可進入界面(和正常登錄系統(tǒng)類似)
進入vi /etc/fstab中刪除/dev/sdb這一行(快捷鍵dd),然后保存退出
再次重啟,會恢復正常
總結
以上是生活随笔為你收集整理的linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬件设计——有源/无源滤波
- 下一篇: java timsort_JDK(二)J