您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在Linux中使用LVM管理命令,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在 Linux 操作系統(tǒng)中, 設備文件 是一種特殊類型的文件。這些文件絕大多數(shù)位于 /dev 目錄下,用來表示 Linux 主機檢測到的某個具體的硬件設備。
比如 /dev/sda 文件通常用來指代系統(tǒng)中的第一塊硬盤。
Linux 操作系統(tǒng)及其應用與服務則通過這些設備文件與對應的硬件設備進行交互。
對于常見的磁盤(ATA、SATA、SCSI、SAS、SSD 等)和優(yōu)盤等塊存儲設備,其設備文件主要以 sd* 的形式命名。如 sda 表示第一塊硬盤, sdb2 表示第二塊硬盤的第二個分區(qū),以此類推。
因此,可直接使用 ls -l /dev/sd* 命令查看系統(tǒng)中的磁盤設備:
$ 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
即當前系統(tǒng)中只連接了一塊硬盤( /dev/sda ),且該硬盤只有一個分區(qū)( /dev/sda1 )。
二、分區(qū)
分區(qū)可以理解為將一整塊硬盤劃分為一個或多個相互獨立的存儲區(qū)域。
比如可以將系統(tǒng)的第一塊硬盤劃分為 3 個分區(qū),分別為 sda1、sda2、sda3 。sda1 用于掛載根目錄( / ),sda2 掛載 /var ,sda3 掛載 /home 目錄。則即使 /var 目錄下的日志文件等占用了 sda2 全部的存儲空間,也不會影響其他兩個分區(qū)的使用。
可以使用 fdisk -l 命令查看系統(tǒng)中的磁盤和分區(qū)信息:
$ 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
創(chuàng)建磁盤分區(qū)
fdisk 命令還可以用來對硬盤進行分區(qū)操作,包括創(chuàng)建新分區(qū)、刪除已有的分區(qū)、創(chuàng)建分區(qū)表等。
我這里通過 VirtualBox 軟件為虛擬機中的 Linux 系統(tǒng)添加了一塊空白的虛擬硬盤。使用 fdisk -l 命令查看系統(tǒng)檢測到的硬盤設備:
$ 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
此時系統(tǒng)中多了一塊不包含任何分區(qū)的新硬盤 /dev/sdb 。
使用 fdisk /dev/sdb 命令對新硬盤進行分區(qū)操作:
$ 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 可以用來輸出當前硬盤的分區(qū)信息,輸入 n 創(chuàng)建新的分區(qū),輸入 d 刪除已有的分區(qū)。
在對分區(qū)進行任何操作之后,最后都需要使用 w 將之前的所有更改寫入硬盤。
這里先按下 n 開始新分區(qū)的創(chuàng)建,根據(jù)提示選擇分區(qū)類型( p 表示主分區(qū), e 表示擴展分區(qū)),進一步選擇分區(qū)編號和第一個扇區(qū)的位置(一般默認即可),最后輸入新分區(qū)中最后一個扇區(qū)的位置(也可以直接指定分區(qū)大?。?,格式為 +/-sectors 或 +/-size 。如輸入 +3G 則表示創(chuàng)建大小為 3 GB 的新分區(qū)。具體步驟如下:
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.
再用同樣的步驟將磁盤的剩余空間劃分為另一個分區(qū)。此時查看分區(qū)信息,原本空白的 5GB 新硬盤 sdb 已經(jīng)被劃分為兩個分區(qū) 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 命令將新的分區(qū)信息寫入到磁盤中。類似于編輯文件時的保存并退出。
三、文件系統(tǒng)
可以將磁盤等存儲設備看作一個小型的圖書館,存放在其中的書籍即硬盤中的數(shù)據(jù),而分區(qū)的作用類似于對書籍分門類存放的書架,形成相對獨立的區(qū)域。
但是書架上的書籍并不是隨意放置的,每本書都需要根據(jù)一定的規(guī)則和順序有規(guī)律地擺放,有時還要記錄下擺放的具體位置。這些書籍的擺放規(guī)則即對應于分區(qū)上的 文件系統(tǒng) 。
文件系統(tǒng)是對存儲設備的空間進行組織和分配,負責文件存取并對存入的文件進行保護和檢索的系統(tǒng)。對操作系統(tǒng)而言,文件的讀寫不會直接作用于硬盤扇區(qū),而是通過文件系統(tǒng)以特定的規(guī)則處理和組織文件數(shù)據(jù)。
常見的文件系統(tǒng)如 Windows 中的 NTFS 和 Linux 系統(tǒng)中 Ext4 等。
在 Windows 系統(tǒng)中,通常所說的“分區(qū)”操作即包含了創(chuàng)建分區(qū)并建立文件系統(tǒng)的過程。而在 Linux 系統(tǒng)中,這兩步操作則需要兩個獨立的命令完成。
可以使用 mkfs.ext4 /dev/sdb1 命令,在之前新加硬盤的第一個分區(qū)上創(chuàng)建 Ext4 格式的文件系統(tǒng)。
$ 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
交換分區(qū)
Linux 系統(tǒng)中的 swap 分區(qū)可以看作位于硬盤上的“內存設備”。Linux 會將內存中一部分不需要立即使用的數(shù)據(jù)臨時交換至硬盤上的 swap 分區(qū),以緩解內存不足等情況。
我的 Linux 虛擬機安裝時并沒有分配 swap 分區(qū),這里通過 mkswap 命令將 2G 大小的 sdb2 分區(qū)劃分為 swap 空間:
$ sudo mkswap /dev/sdb2 Setting up swapspace version 1, size = 2 GiB (2146430976 bytes) no label, UUID=47006330-810c-4321-8d73-d52a5f70bc88
然后使用 swapon 命令立即啟用前面創(chuàng)建的 swap 分區(qū):
$ 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
分區(qū)掛載
在 Windows 系統(tǒng)中,一般插入一個已經(jīng)分好區(qū)的硬盤或優(yōu)盤之后,會自動為添加的一個或多個分區(qū)分配 盤符 (如 D:、E:、F: 等),之后就可以直接通過盤符在新分區(qū)上讀取或寫入文件了。
Linux 系統(tǒng)中沒有盤符的概念,它的文件層次是一個從根目錄( / )開始的樹狀結構(目錄),一直向下延申,每一個分支都是一條具體的路徑,指向某個特定的文件。比如 /usr 、 /root 、 /var 、 /var/log 等。
目錄可以說是獨立于硬件存儲設備的抽象的邏輯結構,用于指定文件系統(tǒng)層次中的某個具體位置。而磁盤分區(qū)與目錄結構的對應關系,則需要通過 掛載 來指定。
一般在安裝系統(tǒng)時,可以將 sda1 分區(qū)掛載到根目錄下,則該目錄下的所有文件之后都將保存在 sda1 上。如果后面又添加了一塊新的數(shù)據(jù)盤 sdb,該硬盤只有一個分區(qū) sdb1。為了將某些文件保存在 sdb1 分區(qū)上,可以在目錄樹中新建一個空白分支(比如 /mnt/data )并將 sdb1 掛載在該分支下。之后 /mnt/data 目錄下創(chuàng)建的任何子目錄和文件等數(shù)據(jù)都會保存在 sdb1 上。
具體命令如下:
$ sudo mkdir -p /mnt/data $ sudo mount /dev/sdb1 /mnt/data
使用 df -h 命令查看文件系統(tǒng)占用的磁盤空間的具體情況:
$ 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
可以看到新添加的分區(qū) /dev/sdb1 已經(jīng)掛載到 /mnt/data 目錄下了。
或者也可以使用 lsblk 命令查看塊存儲設備(即磁盤和分區(qū))的容量和掛載點:
$ 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
需要注意的是,手動掛載的分區(qū)在系統(tǒng)重啟以后會自動卸載。如果想像根目錄那樣,每次系統(tǒng)啟動時自動掛載分區(qū),可以修改 /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 掛載分區(qū)往往更保險一點,可以通過 blkid 命令查看磁盤分區(qū)的 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)的磁盤分區(qū)方案,分區(qū)的位置、大小和數(shù)量一般都是固定的,從而導致擴展當前分區(qū)和添加新分區(qū)等操作變得困難。
此時若添加額外的硬盤和分區(qū),則需要在目錄樹中創(chuàng)建新的分支作為掛載點,文件數(shù)據(jù)分散到多個復雜的位置上,不便于合并、備份和管理數(shù)據(jù)。
LVM 允許將單個或多個分區(qū)合并為一個邏輯卷組,且其中包含的邏輯卷可以 動態(tài) 地添加、改變大小或刪除。
LVM 系統(tǒng)最底層為物理卷(pv),即磁盤、分區(qū)和 RAID 陣列等。物理卷可以用來創(chuàng)建邏輯卷組(vg),而邏輯卷組又可以包含任意數(shù)量的邏輯卷(lv),邏輯卷從功能上即對應于物理磁盤上的分區(qū)。
創(chuàng)建卷組和邏輯卷
可以使用 pvcreate 命令將某個存儲設備(磁盤或分區(qū)等)標記為物理卷。
這里我通過 VirtualBox 添加了另一塊大小為 5G 的空白的虛擬硬盤,系統(tǒng)檢測到該設備為 /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
創(chuàng)建物理卷:
$ 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 命令在物理卷的基礎上創(chuàng)建邏輯卷組:
$ 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 命令在卷組中創(chuàng)建邏輯卷:
$ sudo lvcreate --name data --size 2G data-volume Logical volume "data" created.
訪問邏輯卷可以通過 /dev/mapper/<vgname>-<lvname> 或者 /dev/<vgname>/<lvname> 形式的路徑,即剛剛創(chuàng)建的 data 邏輯卷可以通過 /dev/data-volume/data 指定。
在該邏輯卷上創(chuàng)建 Ext4 文件系統(tǒng):
$ 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
此時該邏輯卷即可掛載到某個目錄分支下像普通物理分區(qū)一樣正常使用了。
操作卷組和邏輯卷
可以使用 lvextend 命令動態(tài)地擴展邏輯卷的存儲空間:
$ 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 指定在擴展邏輯卷大小的同時擴充文件系統(tǒng)的大?。ㄎ募到y(tǒng)默認不會隨邏輯卷的空間變化而自動擴展)。
或者也可以直接指定擴展后的大小,如:
$ 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 選項,因此文件系統(tǒng)不會隨著邏輯卷自動擴展大小,可以通過 resize2fs 命令手動擴展文件系統(tǒng):
$ sudo resize2fs /dev/data-volume/data
假設一段時間以后,邏輯卷 /dev/data-volume/data 的空間即將被數(shù)據(jù)填滿,可以嘗試添加另一塊硬盤 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 命令創(chuàng)建物理卷:
$ 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 命令將該物理卷添加到之前創(chuàng)建的卷組 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 ),總大小變?yōu)?10G,閑置空間為 5G(即剛剛添加的物理卷)。
最后使用 lvresize 命令擴展邏輯卷大小,使其占據(jù)兩個物理卷的全部存儲空間:
$ 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)。卷組可以由多個物理卷(磁盤或分區(qū)等)構成,空間不夠時也可以隨時添加新的物理卷進行擴展。
而卷組上的邏輯卷(lv)類似于磁盤分區(qū),可以掛載到目錄作為存儲空間。但是物理分區(qū)的位置和大小固定,而邏輯卷則可以在卷組的基礎上動態(tài)的改變大小,甚至跨越多個物理磁盤和分區(qū),使得管理起來更加方便和靈活。
常用 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操作系統(tǒng),是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng),使用Linux能運行主要的Unix工具軟件、應用程序和網(wǎng)絡協(xié)議。
關于如何在Linux中使用LVM管理命令就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。