Linux下非逻辑卷扩容之创建逻辑卷pvcreate是否会损坏原数据测试
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下非逻辑卷扩容之创建逻辑卷pvcreate是否会损坏原数据测试相关的知识,希望对你有一定的参考价值。
导语
我们都知道使用lv逻辑卷可以方便的扩容。
但是当原盘不是逻辑卷且其上有数据的时候,如何扩容呢?
因为扩容只能是磁盘type为逻辑卷lvm才可以。
那么将有数据的盘直接pvcreate为虚拟卷lvm以后,是否对数据有损害?
我们今天就来测试一下。
添加硬盘
- 虚拟机添加一个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-10485759, default 2048):
Last sector, +sectors or +sizeK,M,G,T,P (2048-10485759, default 10485759):
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=327616 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1310464, 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
40960000 bytes (41 MB, 39 MiB) copied, 0.0162844 s, 2.5 GB/s
## 中间的省略……
real 0m0.016s
user 0m0.002s
sys 0m0.014s
10000+0 records in
10000+0 records out
40960000 bytes (41 MB, 39 MiB) copied, 0.0153671 s, 2.7 GB/s
real 0m0.017s
user 0m0.001s
sys 0m0.015s
total 4000000
## 磁盘中已经有写入的文件了
-rw-r--r-- 1 root root 40960000 Mar 2 21:15 testw100.db
-rw-r--r-- 1 root root 40960000 Mar 2 21:15 testw10.db
-rw-r--r-- 1 root root 40960000 Mar 2 21:15 testw11.db
## …… 中间的省略
-rw-r--r-- 1 root root 40960000 Mar 2 21:15 testw99.db
-rw-r--r-- 1 root root 40960000 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=327424 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1309696, 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会摧毁文件系统,文件就无啦~
以上是关于Linux下非逻辑卷扩容之创建逻辑卷pvcreate是否会损坏原数据测试的主要内容,如果未能解决你的问题,请参考以下文章