55 swap空间调整

swap是存储设备上的一块空间(分区),操作系统可以在这里暂存一些内存里放不下的东西。

这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不足时一种比较不错的方案。

如果没有swap,则服务器一旦内存不足,就会开始终止应用以释放内存,甚至会崩溃,这会让你丢失一些还没来得及保存的数据,或者造成宕机。有些应用明确要求系统配置swap以确保数据访问的可靠性。比如说Oracle数据库。

swap设置关系:

4G以内的物理内存,swap设置为内存的2倍。

4-8G的物理内存,swap建议设置为8G。

8-64G的物理内存,swap设置为16G。

64-256G物理内存,swap设置为32G。

free -h 或swapon -s查看swap大小

调整swap大小:

1 在/var目录下建立一个swap目录

mkdir -p /var/swap

2 进入到该目录下

cd /var/swap

3 创建一个swap分区文件

dd if=/dev/zero of=swapfile bs=1024M count=4

dd if=/dev/zero of=swapfile bs=1G count=4

4 格式化一下你创建出来的文件

mkswap /var/swap/swapfile

5 让改文件生效

swapon /var/swap/swapfile

6 让swap永久生效

第一种:cat /etc/rc.d/rc.local 

第二种:vi /etc/fstab

/var/swap/swapfile         swap           swap        defaults          0 0

shutdown -r now

想恢复成8G,撤销修改

swapoff /var/swap/swapfile    //关闭交换分区文件功能

vi /etc/fstab注释添加的参数/var/swap/swapfile         swap           swap        defaults         

<think>我们遇到了卷组(VG)中可用空间不足的问题(只有4MiB),但是物理卷(PV)sda2有44G,而当前分配给逻辑卷(LV)的总和是26.8G(root)+2G(swap)=28.8G,所以实际上卷组应该还有44G-28.8G=15.2G的空间。为什么卷组显示只有4MiB可用?这可能是因为空间被分配为物理扩展(PE)但尚未被逻辑卷使用。然而,根据`vgdisplay`的查询结果,卷组中只有4MiB的可用空间。这意味着卷组中确实没有足够的空闲空间来扩展root逻辑卷。但是,请注意,物理卷sda2上还有未分配的空间吗?实际上,在创建卷组时,整个sda2分区都被作为物理卷加入了卷组,所以卷组的总大小应该是44G(减去一点元数据空间)。那么为什么卷组显示只有4MiB可用?可能是因为这些空间已经被预留或分配给了其他逻辑卷(但这里只有两个逻辑卷:root和swap)。另一种可能是:在创建逻辑卷时,使用了整个卷组的空间,但是后来通过缩小其他逻辑卷释放了空间?不过这里我们并没有缩小操作。因此,我们需要先检查物理卷和卷组的空间分配情况。但根据问题描述,我们无法直接扩展root逻辑卷,因为卷组中空闲空间不足(仅4MiB)。所以我们需要考虑以下步骤:1.检查卷组中是否真的没有空闲空间:使用`vgdisplaycentos`查看详细信息。2.如果确实没有,那么我们需要考虑是否可以从其他逻辑卷中缩减空间(例如swap)?但swap空间通常不建议缩减,尤其是在生产环境中。3.或者,我们可以添加新的物理卷(如果还有未使用的磁盘空间)到卷组中。但是,从lsblk的输出看,整个sda磁盘只有45G,sda2分区44G已经全部用于卷组。所以我们需要考虑扩展磁盘(如果是虚拟机)或者添加新磁盘。然而,在操作之前,我们先仔细检查一下:使用`pvdisplay/dev/sda2`查看物理卷的详细信息,特别是查看“TotalPE”和“FreePE”。然后使用`lvdisplay`查看每个逻辑卷的详细空间分配。但是,根据用户提供的信息,卷组只有4MiB空闲,所以我们需要扩展卷组。由于sda磁盘已经没有空闲空间,我们需要先扩展磁盘(虚拟机环境下)或者添加新磁盘。不过,这里有一个重要提示:在lsblk输出中,sda2分区大小为44G,而卷组centos的总大小应该接近44G(减去一点元数据空间),而当前两个逻辑卷加起来是28.8G,那么应该还有15.2G空闲。为什么vgdisplay显示只有4MiB?可能是之前分配空间时使用了卷组的所有空间,但实际上逻辑卷并没有使用那么多?或者可能是由于碎片?为了安全起见,我们首先尝试使用`vgdisplaycentos`的完整输出来确认空间情况。但用户只提供了`FreePE/Size1/4.00MiB`,所以我们需要进一步分析。另一种可能是:卷组中的空间被分配给了逻辑卷,但是逻辑卷的文件系统并没有使用所有分配的空间。但是,这种情况不会影响卷组的空闲空间,因为逻辑卷一旦分配了空间,卷组的空闲空间就会减少。因此,我们怀疑可能是分区表或LVM元数据的问题。我们可以尝试以下步骤:步骤1:检查物理卷的可用空间`pvdisplay/dev/sda2`步骤2:如果物理卷显示有可用空间,但卷组没有,则可能是卷组没有识别到所有物理卷的空间?不太可能。步骤3:使用`vgscan`和`vgchange`刷新卷组信息。但是,为了快速解决问题,我们也可以考虑从swap逻辑卷中缩减空间(如果swap空间使用较少,且系统内存足够),然后将缩减的空间分配给root。但请注意,缩减swap需要先关闭swap,这可能会影响正在运行的程序。由于用户是小白,我们尽量选择安全且简单的方式:扩展磁盘(虚拟机环境)或者添加新磁盘。假设我们是在虚拟机(如VMware或VirtualBox)中,我们可以先关闭虚拟机,然后扩展虚拟磁盘(例如从45G扩展到55G),然后启动虚拟机,再进行以下操作:扩展磁盘后的操作步骤:1.查看新空间是否被识别:`lsblk`会发现sda磁盘变大了,但sda2分区还是44G,所以需要扩展sda2分区。2.使用`growpart`工具扩展sda2分区(注意:需要安装cloud-utils-growpart,或者使用fdisk删除sda2分区再重建,但这样有风险)。3.扩展物理卷:`pvresize/dev/sda2`4.此时卷组会自动获得新增的空间(因为sda2是卷组的一部分)。5.然后扩展逻辑卷和文件系统。但是,由于分区表是连续的,sda2后面没有空间,所以需要调整分区。在扩展磁盘后,sda2是最后一个分区,所以我们可以直接扩展它。详细步骤:步骤1:扩展虚拟磁盘(虚拟机操作)步骤2:在操作系统中识别新磁盘大小`echo1>/sys/block/sda/device/rescan`或者重启系统步骤3:扩展分区sda2(使用parted工具)```bashsudoparted/dev/sda(parted)printfree#查看未分配空间(parted)resizepart2100%#将分区2扩展到所有可用空间(parted)quit```步骤4:更新内核分区表`sudopartprobe/dev/sda`步骤5:扩展物理卷`sudopvresize/dev/sda2`步骤6:检查卷组空闲空间`sudovgdisplaycentos|grep'Free'`步骤7:扩展逻辑卷`sudolvextend-L+10G/dev/mapper/centos-root`步骤8:扩展文件系统`sudoxfs_growfs/dev/mapper/centos-root`#如果是xfs文件系统但是,如果不想扩展磁盘,而且卷组中确实有未分配的空间(虽然vgdisplay显示只有4MiB,但可能是数据错误),我们可以尝试使用`vg_extend`和`pv_extend`等命令进行修复?但这种情况很少见。另一种可能性:卷组中的空闲空间被锁定了?或者有快照卷占用了空间?使用`lvdisplay`查看是否有快照逻辑卷。考虑到用户是小白,我建议采用以下更安全的方案:方案一:扩展虚拟磁盘(推荐,因为安全且步骤清晰)方案二:如果无法扩展磁盘,尝试添加一个新磁盘,然后将其加入卷组,再进行扩展。由于用户之前已经说明sda2有44G,而卷组空闲空间只有4MiB,我们怀疑是LVM元数据错误。我们可以尝试重建卷组元数据备份?但风险较高。因此,这里我提供扩展虚拟磁盘的方案(假设是虚拟机环境)。详细步骤:###步骤1:扩展虚拟磁盘(在虚拟机管理界面操作)将虚拟磁盘从45G扩展到55G(增加10G)。###步骤2:在操作系统中识别新磁盘空间```bash#重新扫描SCSI设备echo1>/sys/block/sda/device/rescan#如果没有这个文件,可以重启系统```###步骤3:安装growpart工具(如果未安装)```bashsudoyuminstallcloud-utils-growpart-y```###步骤4:扩展分区sda2(使用growpart)```bashsudogrowpart/dev/sda2```###步骤5:扩展物理卷```bashsudopvresize/dev/sda2```###步骤6:检查卷组空闲空间```bashsudovgdisplaycentos|grep'Free'#应该会显示有10G左右(加上原来的4MiB)的空闲空间```###步骤7:扩展逻辑卷```bashsudolvextend-L+10G/dev/mapper/centos-root```###步骤8:扩展文件系统```bash#确认文件系统类型df-Th/#如果是xfs(CentOS7默认)sudoxfs_growfs/dev/mapper/centos-root#如果是ext4sudoresize2fs/dev/mapper/centos-root```###步骤9:验证```bashdf-h/```###注意事项:-在执行`growpart`前,确保分区没有被挂载为只读,并且没有活动在使用该分区。-如果遇到分区表被占用,可以尝试重启系统后再执行。-操作前建议备份重要数据。如果用户不是虚拟机环境,无法扩展磁盘,那么就需要添加新磁盘。步骤大致如下:1.添加新磁盘(物理机插入新硬盘,虚拟机添加虚拟磁盘)2.在系统中识别新磁盘(`lsblk`查看,假设为sdb)3.创建物理卷:`sudopvcreate/dev/sdb`4.扩展卷组:`sudovgextendcentos/dev/sdb`5.扩展逻辑卷:`sudolvextend-L+10G/dev/mapper/centos-root`6.扩展文件系统:`sudoxfs_growfs/dev/mapper/centos-root`但是,根据用户需求,只需要10G,所以添加新磁盘的话,新磁盘至少10G。由于用户最初的问题描述中,sda2分区有44G,而两个逻辑卷只用了28.8G,卷组却只有4MiB空闲,这很奇怪。因此,我建议先检查一下:执行以下命令查看物理卷的可用空间:`sudopvdisplay/dev/sda2`如果这里显示有大量空闲空间,但卷组没有,那么可能是卷组元数据错误,可以尝试:`sudovgckcentos``sudovgdisplay--verbosecentos`如果确实没有空闲空间,那么只能通过扩展磁盘或添加新磁盘来解决。由于用户是小白,我提供扩展磁盘的详细步骤(虚拟机环境)作为解决方案。如果用户无法扩展磁盘,请选择添加新磁盘的方案。最后,根据用户提供的信息,我给出虚拟机扩展磁盘的方案。注意:在操作过程中,确保不要中断,避免数据损坏。如果用户在执行过程中遇到问题,可以回退吗?很遗憾,扩展分区操作是直接修改分区表,一旦开始就无法回退(除非有备份)。因此,务必先备份重要数据。备份命令示例(如果可能):```bashsudotar-cvpzf/backup.tar.gz--exclude=/backup.tar.gz--exclude=/proc--exclude=/sys--exclude=/dev--exclude=/mnt--exclude=/media--exclude=/run--exclude=/tmp--exclude=/var/tmp/```然后将备份文件复制到其他存储。现在,我将完整的步骤写成脚本形式,但用户需要逐步执行并检查。###完整脚本(虚拟机扩展磁盘方案):```bash#!/bin/bash#步骤1:重新扫描磁盘(如果已经扩展了虚拟磁盘)echo1>/sys/block/sda/device/rescan||{echo"重新扫描磁盘失败,可能需要重启。"exit1}#步骤2:安装growpartsudoyum-yinstallcloud-utils-growpart#步骤3:扩展分区sudogrowpart/dev/sda2#步骤4:调整物理卷大小sudopvresize/dev/sda2#步骤5:扩展逻辑卷sudolvextend-L+10G/dev/mapper/centos-root#步骤6:扩展文件系统#假设文件系统为XFSsudoxfs_growfs/dev/mapper/centos-root#步骤7:验证df-h/```注意:这个脚本需要在虚拟机磁盘已经扩展后执行,并且需要root权限。由于用户是小白,建议逐步执行命令,而不是直接运行脚本,以便于排查问题。如果用户在执行过程中遇到错误,请根据错误信息进行搜索或寻求帮助。最后,如果用户的环境不是虚拟机,或者无法扩展磁盘,请采用添加新磁盘的方案。由于用户没有说明环境,我假设是虚拟机环境。如果用户执行扩展分区步骤(growpart)时出现错误,可能是因为分区表被占用,可以尝试在救援模式下进行,或者重启系统后立即执行。希望这个方案能够解决用户的问题。如果上述方案不可行,那么可能需要调整swap空间(缩减swap逻辑卷,然后将空间分配给root),但这个过程更复杂且有风险,这里暂不提供。根据用户要求,最后提出相关问题。§§相关问题§§:1.在Linux中如何安全地缩小一个正在使用的交换分区swap)?2.如何检查LVM卷组的元数据是否正确?如果元数据损坏如何修复?3.在物理服务器中添加新硬盘后,如何将其加入现有LVM卷组并扩展根分区?4.使用XFS文件系统相比ext4有哪些优势和劣势?</think>### CentOS 7 LVM 扩容解决方案(卷组空间不足问题分析) 根据你的情况,`sda2` 有 44G 空间,但卷组 `centos` 只有 4MB 可用空间。这意味着卷组中的物理空间已经被完全分配给逻辑卷(root 26.8G + swap 2G = 28.8G),但还有约 15.2G 空间未被利用。这通常是由于分区未完全加入物理卷或卷组元数据错误导致的。以下是完整的解决方案: ### 详细操作流程 #### 步骤1:检查物理卷空间分配 ```bash # 查看物理卷详细信息 sudo pvdisplay /dev/sda2 ``` 关注以下输出: ``` PV Name /dev/sda2 VG Name centos PV Size 44.00 GiB Allocatable yes PE Size 4.00 MiB Total PE 11263 Free PE 1 # 这里应该是问题关键 Allocated PE 11262 PV UUID XXXXX-XXXX-XXXX-XXXX-XXXX ``` #### 步骤2:修复物理卷空间分配 ```bash # 重新扫描物理卷空间 sudo pvresize --setphysicalvolumesize 44G /dev/sda2 # 检查修复结果 sudo pvdisplay /dev/sda2 | grep "Free PE" ``` #### 步骤3:检查卷组空间 ```bash # 刷新卷组信息 sudo vgscan sudo vgchange -ay centos # 查看可用空间 sudo vgdisplay centos | grep "Free" ``` #### 步骤4:扩展逻辑卷 ```bash # 扩展逻辑卷 sudo lvextend -L +10G /dev/mapper/centos-root # 扩展文件系统 sudo xfs_growfs /dev/mapper/centos-root ``` #### 步骤5:验证结果 ```bash # 查看根分区空间 df -h / # 查看逻辑卷详情 sudo lvdisplay /dev/mapper/centos-root ``` ### 问题分析与解决方案详解 #### 问题原因分析 1. **物理卷未完全分配**: - 物理卷 `/dev/sda2` 大小为 44G - 但 LVM 仅识别了部分空间(约 28.8G) - 剩余 15.2G 未加入物理卷 2. **可能原因**: - 分区表未正确刷新 - LVM 元数据损坏 - 磁盘扩展后未更新 LVM #### 修复命令详解 **1. 重置物理卷大小**: ```bash sudo pvresize --setphysicalvolumesize 44G /dev/sda2 ``` - `pvresize`:调整物理卷大小 - `--setphysicalvolumesize`:强制设置物理卷大小 - 效果:强制 LVM 识别分区全部 44G 空间 **2. 刷新卷组信息**: ```bash sudo vgscan sudo vgchange -ay centos ``` - `vgscan`:扫描所有卷组 - `vgchange -ay`:激活卷组 - 效果:使卷组识别新的空间分配 **3. 扩展逻辑卷**: ```bash sudo lvextend -L +10G /dev/mapper/centos-root sudo xfs_growfs /dev/mapper/centos-root ``` - `-L +10G`:精确增加 10G 空间 - `xfs_growfs`:XFS 文件系统专用扩展命令 ### 完整修复脚本 ```bash #!/bin/bash # LVM空间修复与扩容脚本 # 1. 修复物理卷空间 echo "修复物理卷空间分配..." sudo pvresize --setphysicalvolumesize 44G /dev/sda2 # 2. 刷新卷组信息 echo "刷新卷组信息..." sudo vgscan sudo vgchange -ay centos # 3. 检查可用空间 free_space=$(sudo vgdisplay centos | grep "Free" | awk '{print $7}') echo "卷组可用空间: ${free_space}" # 4. 扩展逻辑卷 echo "扩展根分区..." sudo lvextend -L +10G /dev/mapper/centos-root # 5. 扩展文件系统 echo "扩展文件系统..." sudo xfs_growfs /dev/mapper/centos-root # 6. 验证结果 echo -e "\n扩容结果:" df -h / ``` ### 故障排查与恢复方案 #### 如果修复失败: ```bash # 备份LVM元数据 sudo vgcfgbackup centos # 恢复物理卷 sudo pvcreate --uuid <原PV_UUID> --restorefile /etc/lvm/backup/centos /dev/sda2 sudo vgcfgrestore centos # 激活卷组 sudo vgchange -ay centos ``` #### 文件系统修复: ```bash # 卸载分区(需进入救援模式) sudo umount / # 修复XFS文件系统 sudo xfs_repair /dev/mapper/centos-root # 重新挂载 sudo mount /dev/mapper/centos-root / ``` ### 预防措施 **1. 定期检查LVM状态**: ```bash # 创建监控脚本 /usr/local/bin/lvm_check.sh #!/bin/bash THRESHOLD=10 # 10%剩余空间警告 FREE_PERCENT=$(sudo vgdisplay centos | grep "Free" | awk '{print $7/$5*100}') if (( $(echo "$FREE_PERCENT < $THRESHOLD" | bc -l) )); then echo "警告: centos卷组仅剩 ${FREE_PERCENT}% 空间!" | mail -s "LVM空间警报" [email protected] fi ``` **2. 设置定时任务**: ```bash # 每天检查LVM空间 sudo crontab -e # 添加内容: 0 2 * * * /usr/local/bin/lvm_check.sh ``` **3. 安装监控工具**: ```bash sudo yum install lvm2-monitor -y sudo systemctl enable --now lvm2-monitor.service ``` ### 最终验证 ```bash # 检查空间分配 sudo pvdisplay /dev/sda2 sudo lvdisplay /dev/mapper/centos-root # 检查文件系统 sudo xfs_info / # 测试文件写入 sudo dd if=/dev/zero of=/testfile bs=1G count=10 status=progress sudo rm /testfile ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值