Linux下非逻辑卷扩容之创建逻辑卷pvcreate是否会损坏原数据测试

Linux下非逻辑卷扩容之创建逻辑卷pvcreate是否会损坏原数据测试导语我们都知道使用 lv 逻辑卷可以方便的扩容 但是当原盘不是逻辑卷且其上有数据的时候 如何扩容呢 因为扩容只能是磁盘 type 为逻辑卷 lvm 才可以 那么将有数据的盘直接 pvcreate 为虚拟卷 lvm 以后 是否对数据有损害 我们今天就来测试一下 添加硬盘虚拟机添加一个 5G 的磁盘作为实验用查看当前分区情况 lsblk 可以看到新加的 5G 磁盘 sdb 已经可以用了 root C8 196 lsblkNAMEMAJ MINRMSIZEROT

导语

添加硬盘

  • 虚拟机添加一个5G的磁盘作为实验用
    添加磁盘

查看当前分区情况

lsblk

  • 可以看到新加的5G磁盘sdb已经可以用了
[root@C8-196 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 199G 0 part ├─cl-root 253:0 0 70G 0 lvm / ├─cl-swap 253:1 0 2G 0 lvm [SWAP] └─cl-home 253:2 0 127G 0 lvm /home sdb 8:16 0 5G 0 disk 

使用传统方式分区

fdisk /dev/sdb

  • 创建一个主分区
[root@C8-196 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.32.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 0x53b270c9. 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-, default 2048): Last sector, +sectors or +size{ 
   K,M,G,T,P} (2048-, default ): Created a new partition 1 of type 'Linux' and of size 5 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. 
  • 再次查看分区情况,sdb被分成了一个主分区,TYPE为part,大小为5G
[root@C8-196 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 199G 0 part ├─cl-root 253:0 0 70G 0 lvm / ├─cl-swap 253:1 0 2G 0 lvm [SWAP] └─cl-home 253:2 0 127G 0 lvm /home sdb 8:16 0 5G 0 disk └─sdb1 8:17 0 5G 0 part 

在新创建的分区上创建文件系统

  • 使用xfs格式化sdb1
[root@C8-196 ~]# mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize= blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 

创建挂载点并挂载新建分区

  • 在根下创建目录data并挂载新分区到这个目录上
[root@C8-196 ~]# mkdir -v /data&& mount /dev/sdb1 /data&&df -Th mkdir: created directory '/data' Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 876M 0 876M 0% /dev tmpfs tmpfs 896M 0 896M 0% /dev/shm tmpfs tmpfs 896M 17M 879M 2% /run tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup /dev/mapper/cl-root xfs 70G 2.3G 68G 4% / /dev/mapper/cl-home xfs 127G 939M 126G 1% /home /dev/sda1 xfs 1014M 197M 818M 20% /boot tmpfs tmpfs 180M 0 180M 0% /run/user/0 /dev/sdb1 xfs 5.0G 68M 5.0G 2% /data 

创建测试文件在新建磁盘分区上

  • 写100个文件到磁盘上做数据测试
    for i in {1..100};do $(time dd if=/dev/zero of=/data/testw$i.db bs=4k count=10000);done&&ll /data&&df -Th

[root@C8-196 ~]# for i in {1..100};do $(time dd if=/dev/zero of=/data/testw$i.db bs=4k count=10000);done&&ll /data&&df -Th 10000+0 records in 10000+0 records out  bytes (41 MB, 39 MiB) copied, 0.0 s, 2.5 GB/s  中间的省略…… real 0m0.016s user 0m0.002s sys 0m0.014s 10000+0 records in 10000+0 records out  bytes (41 MB, 39 MiB) copied, 0.0 s, 2.7 GB/s real 0m0.017s user 0m0.001s sys 0m0.015s total   磁盘中已经有写入的文件了 -rw-r--r-- 1 root root  Mar 2 21:15 testw100.db -rw-r--r-- 1 root root  Mar 2 21:15 testw10.db -rw-r--r-- 1 root root  Mar 2 21:15 testw11.db  …… 中间的省略 -rw-r--r-- 1 root root  Mar 2 21:15 testw99.db -rw-r--r-- 1 root root  Mar 2 21:15 testw9.db  分区已经占了78%了 Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 876M 0 876M 0% /dev tmpfs tmpfs 896M 0 896M 0% /dev/shm tmpfs tmpfs 896M 17M 879M 2% /run tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup /dev/mapper/cl-root xfs 70G 2.3G 68G 4% / /dev/mapper/cl-home xfs 127G 939M 126G 1% /home /dev/sda1 xfs 1014M 197M 818M 20% /boot tmpfs tmpfs 180M 0 180M 0% /run/user/0 /dev/sdb1 xfs 5.0G 3.9G 1.2G 78% /data 

直接对有数据的分区做pvcreate

  • 很显然,处于安全考虑,已经mount的分区不能直接pvcreate
[root@C8-196 ~]#  [root@C8-196 ~]# type pvcreate  pvcreate is /usr/sbin/pvcreate [root@C8-196 ~]# pvcreate /dev/sdb1 Can't open /dev/sdb1 exclusively. Mounted filesystem? Can't open /dev/sdb1 exclusively. Mounted filesystem? 

umount以后再次pvcreate

  • umount掉以后做pvcreate居然成功了,虽然提示了有xfs文件系统在分区上
[root@C8-196 ~]# umount /dev/sdb1 [root@C8-196 ~]# pvcreate /dev/sdb1 WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y Wiping xfs signature on /dev/sdb1. Physical volume "/dev/sdb1" successfully created. 
  • 但是感觉pvcreate已经摧毁了已有的文件系统

创建逻辑卷

[root@C8-196 ~]# vgcreate vg_data /dev/sdb1 Volume group "vg_data" successfully created [root@C8-196 ~]# lvcreate -l 100%FREE -n data_lv vg_data Logical volume "data_lv" created. [root@C8-196 ~]# pvs&&vgs&&lvs PV VG Fmt Attr PSize PFree /dev/sda2 cl lvm2 a-- <199.00g 0 /dev/sdb1 vg_data lvm2 a-- <5.00g 0 VG #PV #LV #SN Attr VSize VFree cl 1 3 0 wz--n- <199.00g 0 vg_data 1 1 0 wz--n- <5.00g 0 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home cl -wi-ao---- 126.96g root cl -wi-ao---- 70.00g swap cl -wi-ao---- 2.03g data_lv vg_data -wi-a----- <5.00g 

再次尝试挂载/dev/sdb1

  • 很显然已经挂载不上了
[root@C8-196 ~]# mount /dev/sdb1 /data mount: /data: unknown filesystem type 'LVM2_member'. 

尝试直接挂载新创建的lvm逻辑卷

  • 很显然,没有文件系统是挂在不上的
[root@C8-196 ~]# ll /dev/mapper/vg_data-data_lv  lrwxrwxrwx 1 root root 7 Mar 2 21:28 /dev/mapper/vg_data-data_lv -> ../dm-3 [root@C8-196 ~]# ll /dev/vg_data/ total 0 lrwxrwxrwx 1 root root 7 Mar 2 21:28 data_lv -> ../dm-3 [root@C8-196 ~]# mount /dev/mapper/vg_data-data_lv /data mount: /data: wrong fs type, bad option, bad superblock on /dev/mapper/vg_data-data_lv, missing codepage or helper program, or other error. [root@C8-196 ~]# mount /dev/vg_data/data_lv /data mount: /data: wrong fs type, bad option, bad superblock on /dev/mapper/vg_data-data_lv, missing codepage or helper program, or other error. 

在新逻辑卷上创建文件系统

  • 使用xfs格式化新创建的逻辑卷,格式化嘛,你懂的
[root@C8-196 ~]# mkfs.xfs /dev/mapper/vg_data-data_lv  meta-data=/dev/mapper/vg_data-data_lv isize=512 agcount=4, agsize= blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 

挂载逻辑卷到曾经的data目录

mount /dev/mapper/vg_data-data_lv /data

[root@C8-196 ~]# mount /dev/mapper/vg_data-data_lv /data [root@C8-196 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 876M 0 876M 0% /dev tmpfs tmpfs 896M 0 896M 0% /dev/shm tmpfs tmpfs 896M 17M 879M 2% /run tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup /dev/mapper/cl-root xfs 70G 2.3G 68G 4% / /dev/mapper/cl-home xfs 127G 939M 126G 1% /home /dev/sda1 xfs 1014M 197M 818M 20% /boot tmpfs tmpfs 180M 0 180M 0% /run/user/0 /dev/mapper/vg_data-data_lv xfs 5.0G 68M 5.0G 2% /data 

查看目录下是否有文件

  • 见证奇迹的时刻到了!
/dev/mapper/vg_data-data_lv xfs 5.0G 68M 5.0G 2% /data [root@C8-196 ~]# ll /data total 0 
  • 很显然,毛线都没有了。
  • 这目录下要是有生产数据,你就可以走人了!
  • 又是一种删库跑路的新方法!

结论

  • 使用pvcreate对已经挂载的分区不能直接创建pv
  • 使用pvcreate对有数据且已解挂载的分区可以直接创建pv,会提示文件系统存在

使用pvcreate对有数据的分区创建pv会摧毁文件系统,文件就~

使用pvcreate对有数据的分区创建pv会摧毁文件系统,文件就~

使用pvcreate对有数据的分区创建pv会摧毁文件系统,文件就~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211689.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:50
下一篇 2026年3月18日 下午9:50


相关推荐

  • OpenClaw能做啥?OpenClaw(Clawdbot)2026年8分钟超简单部署步骤教程

    OpenClaw能做啥?OpenClaw(Clawdbot)2026年8分钟超简单部署步骤教程

    2026年3月13日
    2
  • OHEM介绍

    OHEM介绍在two-stage检测算法中,RPN阶段会生成大量的检测框,由于很多时候一张图片可能只会有少量几个目标,也就是说绝大部分框是没有目标的,为了减少计算就需要进行sample,一般来说fasterrcnn的sample机制是算框和label的IOU,大于0.7认为是正样本,小于0.3是负样本。但是单纯的random_sample选出来的框不一定是最容易错的框。那么ohem就是较好的一种正负样本策略

    2022年5月30日
    105
  • python执行bash命令

    python执行bash命令1 执行 bash 命令 importosos system ls al 2 执行 bash 脚本 os system sh test sh

    2026年3月19日
    3
  • 汇编指令B与BL_AB500编程中B指令使用

    汇编指令B与BL_AB500编程中B指令使用1.b与bl指令的作用是什么?   b与bl指令的作用:实现程序跳转,也就是调用子程序。2.b与bl指令的区别是什么?   b与bl指令的区别:b指令:简单的程序跳转,跳转到到目标标号处执行。                                 bl指令:带链接程序跳转,也就是要带返回地址。在发生跳转前,将当前PC-4保存到R14中。             …

    2022年10月21日
    5
  • SSH命令及使用说明

    SSH命令及使用说明

    2021年6月16日
    107
  • OSI参考模型——物理层详解

    OSI参考模型——物理层详解一 物理层的基本功能物理层是 OSI 参考模型的最低层 它利用传输介质为通信的主机之间建立 管理和释放物理连接 实现比特流的透明传输 传输单位是比特 保证比特流通过传输介质的正确传输 1 与数据链路的关系物理层屏蔽了物理层采用的传输介质 通信设备和通信技术的差异性 指定不同类型的物理协议 使得数据链路只需要考虑如何使用物理层的服务 而不用考虑物理层采用了那种传输介质 2 物理层的协议类型计算机网路

    2025年8月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号