您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在Linux中使用LVM管理命令,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在 Linux 操作系統中, 設備文件 是一種特殊類型的文件。這些文件絕大多數位于 /dev 目錄下,用來表示 Linux 主機檢測到的某個具體的硬件設備。
比如 /dev/sda 文件通常用來指代系統中的第一塊硬盤。
Linux 操作系統及其應用與服務則通過這些設備文件與對應的硬件設備進行交互。
對于常見的磁盤(ATA、SATA、SCSI、SAS、SSD 等)和優盤等塊存儲設備,其設備文件主要以 sd* 的形式命名。如 sda 表示第一塊硬盤, sdb2 表示第二塊硬盤的第二個分區,以此類推。
因此,可直接使用 ls -l /dev/sd* 命令查看系統中的磁盤設備:
$ ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 8月 7 00:47 /dev/sda brw-rw---- 1 root disk 8, 1 8月 7 00:47 /dev/sda1
即當前系統中只連接了一塊硬盤( /dev/sda ),且該硬盤只有一個分區( /dev/sda1 )。
二、分區
分區可以理解為將一整塊硬盤劃分為一個或多個相互獨立的存儲區域。
比如可以將系統的第一塊硬盤劃分為 3 個分區,分別為 sda1、sda2、sda3 。sda1 用于掛載根目錄( / ),sda2 掛載 /var ,sda3 掛載 /home 目錄。則即使 /var 目錄下的日志文件等占用了 sda2 全部的存儲空間,也不會影響其他兩個分區的使用。
可以使用 fdisk -l 命令查看系統中的磁盤和分區信息:
$ sudo fdisk -l Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x20985120 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 20964824 20962777 10G 83 Linux
創建磁盤分區
fdisk 命令還可以用來對硬盤進行分區操作,包括創建新分區、刪除已有的分區、創建分區表等。
我這里通過 VirtualBox 軟件為虛擬機中的 Linux 系統添加了一塊空白的虛擬硬盤。使用 fdisk -l 命令查看系統檢測到的硬盤設備:
$ sudo fdisk -l Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x20985120 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 20964824 20962777 10G 83 Linux Disk /dev/sdb: 5 GiB, 5368709120 bytes, 10485760 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
此時系統中多了一塊不包含任何分區的新硬盤 /dev/sdb 。
使用 fdisk /dev/sdb 命令對新硬盤進行分區操作:
$ sudo fdisk /dev/sdb Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xce119026. Command (m for help): m Help: DOS (MBR) a toggle a bootable flag b edit nested BSD disklabel c toggle the dos compatibility flag Generic d delete a partition F list free unpartitioned space l list known partition types n add a new partition p print the partition table t change a partition type v verify the partition table i print information about a partition Misc m print this menu u change display/entry units x extra functionality (experts only) Script I load disk layout from sfdisk script file O dump disk layout to sfdisk script file Save & Exit w write table to disk and exit q quit without saving changes Create a new label g create a new empty GPT partition table G create a new empty SGI (IRIX) partition table o create a new empty DOS partition table s create a new empty Sun partition table
進入 fdisk 程序界面之后,按下 m 鍵并回車,即可打印幫助信息,獲取該界面下支持的交互式命令。
比如輸入 p 可以用來輸出當前硬盤的分區信息,輸入 n 創建新的分區,輸入 d 刪除已有的分區。
在對分區進行任何操作之后,最后都需要使用 w 將之前的所有更改寫入硬盤。
這里先按下 n 開始新分區的創建,根據提示選擇分區類型( p 表示主分區, e 表示擴展分區),進一步選擇分區編號和第一個扇區的位置(一般默認即可),最后輸入新分區中最后一個扇區的位置(也可以直接指定分區大小),格式為 +/-sectors 或 +/-size 。如輸入 +3G 則表示創建大小為 3 GB 的新分區。具體步驟如下:
Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-10485759, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-10485759, default 10485759): +3G Created a new partition 1 of type 'Linux' and of size 3 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (6293504-10485759, default 6293504): Last sector, +/-sectors or +/-size{K,M,G,T,P} (6293504-10485759, default 10485759): Created a new partition 2 of type 'Linux' and of size 2 GiB.
再用同樣的步驟將磁盤的剩余空間劃分為另一個分區。此時查看分區信息,原本空白的 5GB 新硬盤 sdb 已經被劃分為兩個分區 sdb1 和 sdb2 :
Command (m for help): p Disk /dev/sdb: 5 GiB, 5368709120 bytes, 10485760 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xce119026 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 6293503 6291456 3G 83 Linux /dev/sdb2 6293504 10485759 4192256 2G 83 Linux
需要注意的是,如果此時按下 q 按鍵直接退出 fdisk 程序,則之前所做的全部操作都不會被保存。
如確認前面對硬盤的操作沒有問題,應使用 w 命令將新的分區信息寫入到磁盤中。類似于編輯文件時的保存并退出。
三、文件系統
可以將磁盤等存儲設備看作一個小型的圖書館,存放在其中的書籍即硬盤中的數據,而分區的作用類似于對書籍分門類存放的書架,形成相對獨立的區域。
但是書架上的書籍并不是隨意放置的,每本書都需要根據一定的規則和順序有規律地擺放,有時還要記錄下擺放的具體位置。這些書籍的擺放規則即對應于分區上的 文件系統 。
文件系統是對存儲設備的空間進行組織和分配,負責文件存取并對存入的文件進行保護和檢索的系統。對操作系統而言,文件的讀寫不會直接作用于硬盤扇區,而是通過文件系統以特定的規則處理和組織文件數據。
常見的文件系統如 Windows 中的 NTFS 和 Linux 系統中 Ext4 等。
在 Windows 系統中,通常所說的“分區”操作即包含了創建分區并建立文件系統的過程。而在 Linux 系統中,這兩步操作則需要兩個獨立的命令完成。
可以使用 mkfs.ext4 /dev/sdb1 命令,在之前新加硬盤的第一個分區上創建 Ext4 格式的文件系統。
$ sudo mkfs.ext4 /dev/sdb1 mke2fs 1.44.6 (5-Mar-2019) Creating filesystem with 786432 4k blocks and 196608 inodes Filesystem UUID: d5e21599-12e9-44da-ae51-124d89fe5eda Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
交換分區
Linux 系統中的 swap 分區可以看作位于硬盤上的“內存設備”。Linux 會將內存中一部分不需要立即使用的數據臨時交換至硬盤上的 swap 分區,以緩解內存不足等情況。
我的 Linux 虛擬機安裝時并沒有分配 swap 分區,這里通過 mkswap 命令將 2G 大小的 sdb2 分區劃分為 swap 空間:
$ sudo mkswap /dev/sdb2 Setting up swapspace version 1, size = 2 GiB (2146430976 bytes) no label, UUID=47006330-810c-4321-8d73-d52a5f70bc88
然后使用 swapon 命令立即啟用前面創建的 swap 分區:
$ sudo swapon /dev/sdb2 $ free -h total used free shared buff/cache available Mem: 983Mi 223Mi 168Mi 4.0Mi 590Mi 597Mi Swap: 2.0Gi 0B 2.0Gi
分區掛載
在 Windows 系統中,一般插入一個已經分好區的硬盤或優盤之后,會自動為添加的一個或多個分區分配 盤符 (如 D:、E:、F: 等),之后就可以直接通過盤符在新分區上讀取或寫入文件了。
Linux 系統中沒有盤符的概念,它的文件層次是一個從根目錄( / )開始的樹狀結構(目錄),一直向下延申,每一個分支都是一條具體的路徑,指向某個特定的文件。比如 /usr 、 /root 、 /var 、 /var/log 等。
目錄可以說是獨立于硬件存儲設備的抽象的邏輯結構,用于指定文件系統層次中的某個具體位置。而磁盤分區與目錄結構的對應關系,則需要通過 掛載 來指定。
一般在安裝系統時,可以將 sda1 分區掛載到根目錄下,則該目錄下的所有文件之后都將保存在 sda1 上。如果后面又添加了一塊新的數據盤 sdb,該硬盤只有一個分區 sdb1。為了將某些文件保存在 sdb1 分區上,可以在目錄樹中新建一個空白分支(比如 /mnt/data )并將 sdb1 掛載在該分支下。之后 /mnt/data 目錄下創建的任何子目錄和文件等數據都會保存在 sdb1 上。
具體命令如下:
$ sudo mkdir -p /mnt/data $ sudo mount /dev/sdb1 /mnt/data
使用 df -h 命令查看文件系統占用的磁盤空間的具體情況:
$ df -h Filesystem Size Used Avail Use% Mounted on udev 456M 0 456M 0% /dev tmpfs 99M 1.1M 98M 2% /run /dev/sda1 9.8G 5.2G 4.2G 56% / tmpfs 492M 0 492M 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 492M 0 492M 0% /sys/fs/cgroup tmpfs 99M 0 99M 0% /run/user/117 tmpfs 99M 0 99M 0% /run/user/1000 /dev/sdb1 2.9G 9.0M 2.8G 1% /mnt/data
可以看到新添加的分區 /dev/sdb1 已經掛載到 /mnt/data 目錄下了。
或者也可以使用 lsblk 命令查看塊存儲設備(即磁盤和分區)的容量和掛載點:
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part / sdb 8:16 0 5G 0 disk ├─sdb1 8:17 0 3G 0 part /mnt/data └─sdb2 8:18 0 2G 0 part [SWAP] sr0 11:0 1 1024M 0 rom
需要注意的是,手動掛載的分區在系統重啟以后會自動卸載。如果想像根目錄那樣,每次系統啟動時自動掛載分區,可以修改 /etc/fstab 配置文件,示例內容如下:
# <file system> <mount point> <type> <options> <dump> <pass> UUID=f3435713-b2cd-4196-b07b-2ffb116a028d / ext4 defaults 0 1 /dev/sdb1 /mnt/data ext4 defaults 0 1 /dev/sdb2 none swap sw 0 0
PS:相對于 /dev/sda1 這種形式,使用 UUID 掛載分區往往更保險一點,可以通過 blkid 命令查看磁盤分區的 UUID:
$ sudo blkid /dev/sda1: UUID="f3435713-b2cd-4196-b07b-2ffb116a028d" TYPE="ext4" PARTUUID="20985120-01" /dev/sdb1: UUID="d5e21599-12e9-44da-ae51-124d89fe5eda" TYPE="ext4" PARTUUID="ce119026-01" /dev/sdb2: UUID="47006330-810c-4321-8d73-d52a5f70bc88" TYPE="swap" PARTUUID="ce119026-02"
四、LVM(邏輯卷管理)
對于不包含 邏輯卷管理 (LVM)的磁盤分區方案,分區的位置、大小和數量一般都是固定的,從而導致擴展當前分區和添加新分區等操作變得困難。
此時若添加額外的硬盤和分區,則需要在目錄樹中創建新的分支作為掛載點,文件數據分散到多個復雜的位置上,不便于合并、備份和管理數據。
LVM 允許將單個或多個分區合并為一個邏輯卷組,且其中包含的邏輯卷可以 動態 地添加、改變大小或刪除。
LVM 系統最底層為物理卷(pv),即磁盤、分區和 RAID 陣列等。物理卷可以用來創建邏輯卷組(vg),而邏輯卷組又可以包含任意數量的邏輯卷(lv),邏輯卷從功能上即對應于物理磁盤上的分區。
創建卷組和邏輯卷
可以使用 pvcreate 命令將某個存儲設備(磁盤或分區等)標記為物理卷。
這里我通過 VirtualBox 添加了另一塊大小為 5G 的空白的虛擬硬盤,系統檢測到該設備為 /dev/sdc :
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part / sdb 8:16 0 5G 0 disk ├─sdb1 8:17 0 3G 0 part /mnt/data └─sdb2 8:18 0 2G 0 part [SWAP] sdc 8:32 0 5G 0 disk sr0 11:0 1 1024M 0 rom
創建物理卷:
$ sudo pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created.
通過 pvs 命令列出所有的物理卷:
$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdc lvm2 --- 5.00g 5.00g
通過 vgcreate 命令在物理卷的基礎上創建邏輯卷組:
$ sudo vgcreate data-volume /dev/sdc Volume group "data-volume" successfully created
使用 vgs 命令列出當前所有的邏輯卷組:
$ sudo vgs VG #PV #LV #SN Attr VSize VFree data-volume 1 0 0 wz--n- <5.00g <5.00g
使用 lvcreate 命令在卷組中創建邏輯卷:
$ sudo lvcreate --name data --size 2G data-volume Logical volume "data" created.
訪問邏輯卷可以通過 /dev/mapper/<vgname>-<lvname> 或者 /dev/<vgname>/<lvname> 形式的路徑,即剛剛創建的 data 邏輯卷可以通過 /dev/data-volume/data 指定。
在該邏輯卷上創建 Ext4 文件系統:
$ sudo mkfs.ext4 /dev/data-volume/data mke2fs 1.44.6 (5-Mar-2019) Creating filesystem with 524288 4k blocks and 131072 inodes Filesystem UUID: 0f24cdd8-62e0-42fd-bc38-aa3bce91e099 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
此時該邏輯卷即可掛載到某個目錄分支下像普通物理分區一樣正常使用了。
操作卷組和邏輯卷
可以使用 lvextend 命令動態地擴展邏輯卷的存儲空間:
$ sudo lvextend --size +2G --resizefs /dev/data-volume/data fsck from util-linux 2.33.1 /dev/mapper/data--volume-data: clean, 11/131072 files, 26156/524288 blocks Size of logical volume data-volume/data changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume data-volume/data successfully resized. resize2fs 1.44.6 (5-Mar-2019) Resizing the filesystem on /dev/mapper/data--volume-data to 1048576 (4k) blocks. The filesystem on /dev/mapper/data--volume-data is now 1048576 (4k) blocks long.
其中 --size +2G 用于指定增加 2G 空間, --resizefs 指定在擴展邏輯卷大小的同時擴充文件系統的大小(文件系統默認不會隨邏輯卷的空間變化而自動擴展)。
或者也可以直接指定擴展后的大小,如:
$ sudo lvextend --size 4G --resizefs /dev/data-volume/data
其他常用的命令比如通過 lvresize 命令擴展邏輯卷,使其占用當前卷組中剩余的全部空間:
$ sudo lvresize -l +100%free /dev/data-volume/data Size of logical volume data-volume/data changed from <3.00 GiB (767 extents) to <5.00 GiB (1279 extents). Logical volume data-volume/data successfully resized.
因為上面的命令沒有加上 --resizefs 或者 -r 選項,因此文件系統不會隨著邏輯卷自動擴展大小,可以通過 resize2fs 命令手動擴展文件系統:
$ sudo resize2fs /dev/data-volume/data
假設一段時間以后,邏輯卷 /dev/data-volume/data 的空間即將被數據填滿,可以嘗試添加另一塊硬盤 sdd :
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part / sdb 8:16 0 5G 0 disk ├─sdb1 8:17 0 3G 0 part /mnt/data └─sdb2 8:18 0 2G 0 part [SWAP] sdc 8:32 0 5G 0 disk └─data--volume-data 253:0 0 5G 0 lvm sdd 8:48 0 5G 0 disk sr0 11:0 1 1024M 0 rom
使用 pvcreate 命令創建物理卷:
$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdc data-volume lvm2 a-- <5.00g 0 /dev/sdd lvm2 --- 5.00g 5.00g
使用 vgextend 命令將該物理卷添加到之前創建的卷組 data-volume 中:
$ sudo vgextend data-volume /dev/sdd Volume group "data-volume" successfully extended $ sudo vgs VG #PV #LV #SN Attr VSize VFree data-volume 2 1 0 wz--n- 9.99g <5.00g
此時的 data-volume 卷組包含了兩個物理卷( /dev/sdc 和 /dev/sdd )和一個邏輯卷( /dev/data-volume/data ),總大小變為 10G,閑置空間為 5G(即剛剛添加的物理卷)。
最后使用 lvresize 命令擴展邏輯卷大小,使其占據兩個物理卷的全部存儲空間:
$ sudo lvresize -l +100%free -r /dev/data-volume/data fsck from util-linux 2.33.1 /dev/mapper/data--volume-data: clean, 11/196608 files, 30268/785408 blocks Size of logical volume data-volume/data changed from <5.00 GiB (1279 extents) to 9.99 GiB (2558 extents). Logical volume data-volume/data successfully resized. resize2fs 1.44.6 (5-Mar-2019) Resizing the filesystem on /dev/mapper/data--volume-data to 2619392 (4k) blocks. The filesystem on /dev/mapper/data--volume-data is now 2619392 (4k) blocks long.
此時邏輯卷 /dev/data-volume/data 的大小擴展為 10G,即占用了整個卷組 data-volume(包含兩個 5G 的物理卷)的全部空間。
總結:LVM 卷組(vg)的作用類似于物理磁盤,用于承載邏輯卷(lv)。卷組可以由多個物理卷(磁盤或分區等)構成,空間不夠時也可以隨時添加新的物理卷進行擴展。
而卷組上的邏輯卷(lv)類似于磁盤分區,可以掛載到目錄作為存儲空間。但是物理分區的位置和大小固定,而邏輯卷則可以在卷組的基礎上動態的改變大小,甚至跨越多個物理磁盤和分區,使得管理起來更加方便和靈活。
常用 LVM 命令列表:
Command | Used For |
---|---|
pvcreate | Labeling devices for use with LVM |
pvremove | Removing the LVM label from a physical volume |
pvdisplay / pvs | Displaying information on the specified device or all physical volumes on the system |
vgcreate | Creating a new volume group |
vgremove | Removing (deleting) a volume group |
vgextend | Adding physical volumes to a volume group |
vgreduce | Removing physical volumes from a volume group |
vgdisplay / vgs | Displaying information about the specified group or all volume groups on the system |
lvcreate | Creating a new logical volume |
lvremove | Removing (deleting) a logical volume |
lvextend | Increasing the size of a logical volume |
lvreduce | Decreasing the size of a logical volume |
lvdisplay / lvs | Displaying all logical volumes on the system or in a specified volume group |
Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。
關于如何在Linux中使用LVM管理命令就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。