LVM学习记录


以下内容主要来自于系统运维|Lnux LVM简明教程

简介

逻辑卷管理LVM是用来管理磁盘的一个工具。传统分区使用固定大小分区,重新调整大小十分麻烦,而LVM就是解决这个问题的。

LVM使用分层结构,如下图所示。

lvm的结构

这其中就涉及到我们后面需要操作的三个核心组件,物理卷,卷组,逻辑卷。

首先,实际的物理磁盘及其划分的分区被成为物理卷(PV),一个或多个物理卷可以用来创建卷组(VG)。基于卷组可以创建逻辑卷(LV)。在一个卷组中可以创建多个逻辑卷。文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。

LVM的基本操作

准备磁盘分区

通过使用fdisk,创建磁盘分区。我们需要创建3个1G分区,注意,并不要求分区的大小一致。同样,分区需要使用‘8e’类型来使他们可用于LVM。

image-20230228203832204

重复上面的操作来创建其他两个分区。分区创建完成后,我们应该有类似如下的输出:

image-20230228203852946

其中/dev/sdb1, /dev/sdb2等就是我们所说的磁盘分区。

准备物理卷(PV)

通过pvcreate可以在磁盘分区上创建物理卷。

pvcreate /dev/sdb1
pvcreate /dev/sdb2
pvcreate /dev/sdb3

使用pvdisplay命令可以检查查看当前机器上的物理卷情况。

image-20230228200547018在我自己的主机上的显示情况如下。

image-20230228195319297

使用pvremove可以删除物理卷

pvremove /dev/sdb1

准备卷组(VG)

使用vgcreate进行卷组的创建。

下列命令用来创建名为’volume-group1’的卷组,使用/dev/sdb1, /dev/sdb2 和 /dev/sdb3创建。

vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3

使用vgdisplay来查看主机上的卷组

image-20230228200533379

在我自己的主机上如下所示。

image-20230228195636340

从众我们可以看到卷组的使用量/总量。物理卷给卷组提供空间,只要这个卷组中还有可用空间,我们就可以随意创建逻辑卷。

vgs命令也可以查看卷组的信息,但是比较简略。

image-20230228202204131

使用vgremove删除卷组。

vgremove volume-group1

创建逻辑卷(LV)

使用lvcreate进行裸机卷的创建。下面是创建一个名为1v1大小为100MB的逻辑卷。

lvcreate -L 100M -n 1v1 volume-group1

逻辑卷可以使用lvdisplay命令查看。

image-20230228200516138

我自己的机器上显示效果如下。

image-20230228200100937

我们可以格式化和挂载逻辑卷。

# mkfs.ext4 /dev/volume-group1/lv1
# mkdir /lvm-mount
# mount /dev/volume-group1/lv1 /lvm-mount/ 

使用lvremove可以删除逻辑卷。

# umount /lvm-mount/
# lvremove /dev/volume-group1/lv1 

拓展一个LVM卷

逻辑卷的大小是可以调整的。在调整逻辑卷大小之后,也要对文件系统调整大小进行匹配。这个额外的步骤各不相同,取决于创建文件系统的类型。

首先需要卸载掉1v1卷。

umount /lvm-mount/

然后设置卷的大小为200M

lvresize -L 200M /dev/volume-group1/1v1

也可以用lvextend命令来进行了扩容

lvextend -l +100%FREE /dev/VolGroup00/lv_root

将当前卷组中所有的空闲空间都拓展到lv_root这个逻辑卷中。

接下来检查磁盘错误

e2fsck -f /dev/volume-group1/1v1

运行一下命令拓展文件系统

resize2fs /dev/volume-group1/1v1

然后检查一下lv的状态来验证。

image-20230228201156682

缩减一个LVM卷

和上面差不多的步骤。需要注意的是减少后逻辑卷的大小值如果小于存储数据的大小,存储在后面的数据会丢失。

umount /dev/volume-group1/lv1 # 卸载掉卷。
e2fsck -f /dev/volume-group1/lv1  # 检测磁盘错误。
resize2fs /dev/volume-group1/lv1 100M # 缩小文件系统,更新ext4信息。
lvresize -L 100M /dev/volume-group1/lv1 #减少逻辑卷大小

最后验证调整后的逻辑卷大小。

image-20230228201506275

拓展一个卷组

将一个物理卷添加到卷组。主要用于将一个新挂载的磁盘加入到LVM中。

检查现在的卷组状态。

image-20230228201607136

创建一个2GB分区sdc1,类型为LVM(8e)

image-20230228201643623

再创建物理卷并拓展卷组。

pvcreate /dev/sdc1
vgextend volume-group1 /dev/sdc1

使用vgdisplay来验证。

image-20230228201755935

只要是8e类型的磁盘分区都可以用来拓展卷组。

lvm用法实践

centos中将home分区合并到/分区

  1. 备份home分区的文件并卸载home分区

    tar cvf /tmp/home.tar /home
    umount /home
  1. 取消home分区的开机挂载,把/etc/fstab里面的/dev/mapper/centos-home这一行注释掉。

  2. 删除与home分区有关的进程

    fuser -m -v -i -k /home 
  1. 删除/home所在的lv

    lvremove /dev/mapper/centos-home
  1. 拓展/root所在的lv,将剩下全部可用大小都分配给root

    lvextend -l +100%FREE /dev/mapper/centos-root
    # 下面的命令应该用哪一个?
    xfs_growfs /dev/mapper/centos-root 
    resize2fs /dev/mapper/centos-root 
  1. 把原来备份的home目录中的东西放到/home文件夹中。

为ubuntu的lvm分区添加一块新的硬盘

  1. 格式化新的硬盘/dev/sda。分区需要使用‘8e’类型来使他们可用于LVM。

    sudo fdisk /dev/sda
    
    Welcome to fdisk (util-linux 2.34).
    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 0x10f72008.
    
    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-1953525167, default 2048):
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525167, default 1953525167):
    
    Created a new partition 1 of type 'Linux' and of size 931.5 GiB.
    
    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): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
  1. 在分区上创建逻辑卷。

    sudo pvcreate /dev/sda1
      Physical volume "/dev/sda1" successfully created.
  1. 将物理卷添加到逻辑卷中。先查看卷名称再扩容。

    # rui @ rdma221 in ~ [8:16:37]
    $ sudo vgdisplay
      --- Volume group ---
      VG Name               ubuntu-vg
      System ID
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  2
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               <891.70 GiB
      PE Size               4.00 MiB
      Total PE              228275
      Alloc PE / Size       228275 / <891.70 GiB
      Free  PE / Size       0 / 0
      VG UUID               2oBXft-mP9w-vgg3-AF1e-ouqS-nVGP-WR0Jdf
    # rui @ rdma221 in ~ [8:17:03]
    $ sudo vgextend  ubuntu-vg /dev/sda1
      Volume group "ubuntu-vg" successfully extended
    
  1. 扩容逻辑卷。先查看逻辑卷名称再扩容。

    # rui @ rdma221 in ~ [8:21:24] C:130
    $ sudo lvdisplay
      --- Logical volume ---
      LV Path                /dev/ubuntu-vg/ubuntu-lv
      LV Name                ubuntu-lv
      VG Name                ubuntu-vg
      LV UUID                ATijFo-gKff-sAf8-r2Xa-md8C-WqJE-ihhiqJ
      LV Write Access        read/write
      LV Creation host, time ubuntu-server, 2022-11-22 13:56:21 +0000
      LV Status              available
      # open                 1
      LV Size                <891.70 GiB
      Current LE             228275
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:0
    
    

rui @ rdma221 in ~ [8:21:27]

$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <891.70 GiB (228275 extents) to 1.78 TiB (466741 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.




5. 扩容文件系统。

   ```bash
   # rui @ rdma221 in ~ [8:22:06]
   $ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
   resize2fs 1.45.5 (07-Jan-2020)
   Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
   old_desc_blocks = 112, new_desc_blocks = 228
   The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 477942784 (4k) blocks long.
  1. 扩容完成。

    # rui @ rdma221 in ~ [8:23:12]
    $ df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    udev                               126G     0  126G   0% /dev
    tmpfs                               26G  2.8M   26G   1% /run
    /dev/mapper/ubuntu--vg-ubuntu--lv  1.8T  475G  1.3T  28% /
    tmpfs                              126G     0  126G   0% /dev/shm
    tmpfs                              5.0M  4.0K  5.0M   1% /run/lock
    tmpfs                              126G     0  126G   0% /sys/fs/cgroup
    /dev/nvme0n1p2                     1.5G  210M  1.2G  16% /boot
    /dev/nvme0n1p1                     1.1G  6.1M  1.1G   1% /boot/efi
    /dev/loop0                          64M   64M     0 100% /snap/core20/1852
    /dev/loop1                          92M   92M     0 100% /snap/lxd/23991
    /dev/loop2                          54M   54M     0 100% /snap/snapd/18933
    /dev/loop3                          50M   50M     0 100% /snap/snapd/18596
    /dev/loop4                          64M   64M     0 100% /snap/core20/1879
    /dev/loop5                          92M   92M     0 100% /snap/lxd/24061
    tmpfs                               26G     0   26G   0% /run/user/6666
    
    # rui @ rdma221 in ~ [8:23:15]
    $ lsblk
    NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0                       7:0    0  63.3M  1 loop /snap/core20/1852
    loop1                       7:1    0  91.8M  1 loop /snap/lxd/23991
    loop2                       7:2    0  53.2M  1 loop /snap/snapd/18933
    loop3                       7:3    0  49.9M  1 loop /snap/snapd/18596
    loop4                       7:4    0  63.3M  1 loop /snap/core20/1879
    loop5                       7:5    0  91.9M  1 loop /snap/lxd/24061
    sda                         8:0    0 931.5G  0 disk
    └─sda1                      8:1    0 931.5G  0 part
      └─ubuntu--vg-ubuntu--lv 253:0    0   1.8T  0 lvm  /
    nvme0n1                   259:0    0 894.3G  0 disk
    ├─nvme0n1p1               259:1    0   1.1G  0 part /boot/efi
    ├─nvme0n1p2               259:2    0   1.5G  0 part /boot
    └─nvme0n1p3               259:3    0 891.7G  0 part
      └─ubuntu--vg-ubuntu--lv 253:0    0   1.8T  0 lvm  /
    pmem0                     259:4    0 496.1G  0 disk

评论
评论
 上一篇
git的一些学习记录 git的一些学习记录
Git 操作 git远程与本地的操作 git重新设置远程仓库地址 git remote rm origin git remote add origin 你的新远程仓库地址 git删除远程分支 git push origin --dele
2023-02-20 Zhang Rui
下一篇 
adb使用学习 adb使用学习
无线连接在开发者选项里打开无线调试,点击使用配对码配对设备获取ip端口号和配对码。 控制台里运行 adb pair 192.168.2.37:42551常用命令查看文件 adb shell ls / 电脑发文件到手机 adb push
2022-12-24 Zhang Rui
  目录