Linux LVM文件系统调整笔记 01 LVM调整缩减和扩容 1.1 问题描述
/
根目录空间占用率已经达到了100%;首先考虑到用传统resize2fs
方式调整分区:
1 2 3 4 $ resize2fs -p /dev/mapper/centos-home 50G resize2fs 1.42.9 (28-Dec-2013) resize2fs: Bad magic number in super-block while trying to open /dev/mapper/centos-home Couldn't find valid filesystem superblock.
报错原因是因为文件系统是xfs
(fdisk -l查看),不再支持resize2fs
1.2 问题解决思路
确认分区文件系统类型是否为lvm
查看到/home
分区有大量闲置空间,决定将home
的空间分配给”/“
解决步骤
备份/home
目录中的文件
卸载/home
目录
删除/home lv
将/home
的空间添加到/根目录
,剩余20GB不添加到/根目录
目录中剩余空间分配给/home
重新分配/home
格式化/home
备份文件还原
完成调整
会用到的命令
1 2 3 4 5 6 7 8 9 $ df -h $ lsblk $ fdisk -l $ lvremove $ lvcreate $ lvdisplay $ vgdisplay $ pvdisplay $ xfs_growfs
1.3 操作过程 1.3.1 分析
查看分区详情,看到sda2为lvm逻辑卷,所以可以通过将home的空间转移到根分区
1 2 3 4 5 6 7 8 9 10 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 300G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 299.5G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 9.8G 0 lvm [SWAP] └─centos-home 253:2 0 239.6G 0 lvm /home sr0 11:0 1 1024M 0 rom
1.3.2 备份/home
分区 1 2 3 4 # 在/tmp目录中创建home目录,用于备份home目录中的文件 $ mkdir /tmp/home# 备份home目录中的文件 $ cp -r /home/* /tmp/home
1.3.3 卸载/home
分区
使用umount
命令取消/home
分区挂载。
1 2 3 4 5 6 7 $ umount /home umount: /home: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) $ fuser -m -v -i -k /home
1.3.4 删除home的逻辑卷(lv),将home的空间腾出来到卷组(vg) 1 2 3 $ lvremove /dev/mapper/centos-home Do you really want to remove active logical volume home? [y/n]: y Logical volume "home" successfully removed
1.3.5 重新调整/的大小 1 2 3 4 # 调整到250G $ lvextend -L 250G /dev/mapper/centos-root Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 250.00 GiB (64000 extents). Logical volume root successfully resized.
1.3.6 xfs_growfs刷新 1 2 3 4 5 6 7 8 9 10 11 $ xfs_growfs /dev/mapper/centos-root meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=3276800 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=13107200, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=6400, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 13107200 to 65536000
1.3.7 将剩下的空间重新划分到home分区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ lvcreate -l +100%free -n home centos Logical volume "home" created. $ mkfs.xfs /dev/centos/home meta-data=/dev/centos/home isize=256 agcount=4, agsize=2601472 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=10405888, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0log =internal log bsize=4096 blocks=5081, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
1.3.8 挂载/home分区 1 $ mount /dev/mapper/centos-home /home
1.3.9 调整完成
df -h
将/home备份进行还原
1 cp -r /tmp/home/* /home/
02 LVM调整扩容 2.1 前言
安装Splunk后发现在web页面中提示”可用磁盘空间小于5000M
“,splunk 安装路径在/opt/下,只要扩展root lvm即可。操作系统由VMware Workstation Pro
创建,如果需要扩容只需要给该虚拟机添加硬盘即可扩展空间,需要在关机状态下扩展。
2.2 扩展前磁盘情况 1 2 3 4 5 6 7 8 $ df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 10G 4.1G 5.9G 42% / devtmpfs 908M 0 908M 0% /dev tmpfs 914M 0 914M 0% /dev/shm tmpfs 914M 8.6M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 96M 402M 20% /boot
2.3 调整操作 2.3.1 在sdb磁盘上创建LVM分区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 $ fdisk /dev/sdb 命令(输入 m 获取帮助):n Partition type : p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (20971520-41943039,默认为 20971520): 将使用默认值 20971520 Last 扇区, +扇区 or +size{K,M,G} (20971520-41943039,默认为 41943039): 将使用默认值 41943039 分区 3 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:100 GB, 21474836480 * 512 字节,41943040 个扇区 Units = 扇区 of 1 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0008970f 设备 Boot Start End Blocks Id System /dev/sdb1 2048 41943039 41943039 8e Linux LVM 命令(输入 m 获取帮助):t 分区号 (1-4,默认 1):1 Hex 代码(输入 L 列出所有代码):8e 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:100 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0008970f 设备 Boot Start End Blocks Id System /dev/sdb1 2048 41943039 41943039 8e Linux LVM 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)
发现没有sdb设备文件,进行内核重读!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 9.5G 0 part ├─rhel-root 253:0 0 8.5G 0 lvm / └─rhel-swap 253:1 0 1G 0 lvm [SWAP] $ partprobe $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 9.5G 0 part │ ├─rhel-root 253:0 0 8.5G 0 lvm / │ └─rhel-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:0 0 100.8G 0 disk └─sdb1 8:1 0 100.8G 0 part
2.3.2 扩展vg空间
将/dev/sdb1
分区添加到rhel VG
1 2 3 4 5 $ vgextend rhel /dev/sdb1 WARNING: dos signature detected on /dev/sdb1 at offset 510. Wipe it? [y/n] y Wiping dos signature on /dev/sdb1. Physical volume "/dev/sdb1" successfully created Volume group "rhel" successfully extended
2.3.3 查看vg信息 1 2 3 4 [root@localhost /]# vgs VG #PV #LV #SN Attr VSize VFree rhel 2 2 0 wz--n- 19.50g 10.00g [root@localhost /]#
2.3.4 扩展lv空间 1 2 3 4 5 6 7 8 9 10 11 12 13 $ lvextend -L +100G /dev/rhel/root Extending logical volume root to 108.51 GiB Insufficient free space: 2560 extents needed, but only 2559 available# 发现添加10G空间会报错,只能添加到18.51G。难道sdb1空间没有100GB吗?只有80G?以后再研究吧 $ lvextend -L +98G /dev/rhel/root # 退而求其次 添加98G空间 Extending logical volume root to 108.51 GiB Logical volume root successfully resized # 可以使用-l参数 将剩余的空间100%添加给/dev/rhel/root LV $ lvextend -l +100%FREE /dev/rhel/root
2.3.5 查看lv信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ lvs # 查看磁盘情况,总容量没有发生变化 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert root rhel -wi-ao---- 108.51g swap rhel -wi-ao---- 1.00g $ df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 8.5G 4.1G 4.5G 48% / devtmpfs 908M 0 908M 0% /dev tmpfs 914M 0 914M 0% /dev/shm tmpfs 914M 8.6M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 96M 402M 20% /boot
使用xfs_growfs /dev/rhel/root 命令使系统重新读取大小
参考:https://www.cnblogs.com/liutao97/p/6775093.html
1 2 3 4 5 6 7 8 9 10 11 $ xfs_growfs /dev/rhel/root meta-data=/dev/mapper/rhel-root isize=256 agcount=4, agsize=557568 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 data = bsize=4096 blocks=2230272, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2230272 to 4327424
2.4 最终效果
现在就好了
1 2 3 4 5 6 7 8 $ df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel-root 108G 4.1G 104G 25% / devtmpfs 908M 0 908M 0% /dev tmpfs 914M 0 914M 0% /dev/shm tmpfs 914M 8.6M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 96M 402M 20% /boot
03 新增LVM逻辑卷 3.1 前言
给虚拟机添加一块100GB硬盘,挂载到/data
目录用于保存docker
容器数据。为了后续方便对/data
目录进行扩容。使用lvm
系统文件进行管理。
3.2 新增前分区信息
新增分区前分区信息
1 2 3 4 5 6 7 8 9 $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 4.6G 13G 28% / /dev/sda1 1014M 223M 792M 22% /boot tmpfs 378M 0 378M 0% /run/user/0
3.3 变更调整操作 3.3.1 在/dev/sdb硬盘上创建lvm
文件系统并格式分区
在/dev/sdb
硬盘上创建lvm
文件系统格式分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 $ fdisk /dev/sdb 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (1024-41943039,默认为 41943039): 将使用默认值 41943039 Last 扇区, +扇区 or +size{K,M,G} (1024-41943039,默认为 41943039): 将使用默认值 41943039 分区 1 已设置为 Linux 类型,大小设为 100 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:100.5 GB, 21474836480 * 512 字节,41943040 个扇区 Units = 扇区 of 1 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0008970f 设备 Boot Start End Blocks Id System /dev/sdb1 * 2048 1026047 10485760 8e Linux LVM 命令(输入 m 获取帮助):t 分区号 (1,默认 1):1 Hex 代码(输入 L 列出所有代码):8e 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:100.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0008970f 设备 Boot Start End Blocks Id System /dev/sdb1 * 2048 1026047 10485760 8e Linux LVM 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
查看磁盘信息
1 2 3 4 5 6 7 8 9 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part # /sdb1分区创建成功
3.3.2 创建物理卷(PV)
给/dev/sdb1分区创建物理卷
1 2 $ pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. # 创建成功
查看pv创建情况,
1 2 3 4 $ pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <19.00g 0 /dev/sdb1 lvm2 --- <100.00g <100.00g
3.3.3 创建物理卷组(VG)
在刚才创建好的PV(物理卷)基础上创建VG(物理卷组)
1 2 $ vgcreate docker /dev/sdb1 Volume group "docker" successfully created
查看物理卷组(VG)创建情况
1 2 3 4 $ vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0 docker 1 0 0 wz--n- <100.00g <100.00g
3.3.4 创建逻辑卷(LV)
-l 100%Free: 创建可使用率100%的逻辑卷(LV)。 -n 指定lv的名称:-n docker。
1 2 $ lvcreate -l 100%Free -n data docker Logical volume "data" created.
查看逻辑卷(LV)创建情况
1 2 3 4 5 $ lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17.00g swap centos -wi-ao---- 2.00g data docker -wi-a----- <100.00g
3.3.5 格式化逻辑卷(LV)
挂载前格式化/dev/docker/data
逻辑卷,使用xfs格式。
1 2 3 4 5 6 7 8 9 10 $ mkfs.xfs /dev/docker/data meta-data=/dev/docker/data isize=512 agcount=4, agsize=6553344 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=26213376, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=12799, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
3.3.6 挂载逻辑卷到(LV)到/data目录 1 $ mount /dev/mapper/docker-data /data
查看挂载情况
1 2 3 4 5 6 7 8 9 10 $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 4.6G 13G 27% / /dev/sda1 1014M 223M 792M 22% /boot tmpfs 378M 0 378M 0% /run/user/0 /dev/mapper/docker-data 100G 33M 100G 1% /data # 挂载完成
3.3.7 创建开机自动挂载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ vim /etc/fstab $ cat /etc/fstab # # Created by anaconda on Sun Oct 20 05:25:35 2019 # # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=a95eac58-77cf-4b6f-a7dd-78cef0e915e9 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/mapper/docker-data /data xfs defaults 0 0# 新增挂载配置