当前位置: 首页 > news >正文

Centos非LVM根分区容量不足后扩容,对调硬盘挂载/

Centos非LVM根分区容量不足后扩容,对调硬盘挂载/

引言:为什么需要扩容非LVM根分区?在服务器运维中,CentOS系统根分区(/)容量不足是常见问题。非LVM(Logical Volume Manager)分区由于没有逻辑卷的灵活性,扩容方式受限。本教程将介绍一种高级技巧:通过“对调硬盘挂载”来扩容,即暂时挂载新硬盘到临时目录,复制根分区数据,然后修改挂载点,最终实现根分区扩容。这种方法适用于无法在线扩容的物理分区场景。## 基础概念:分区与挂载### 1. 分区类型-非LVM分区:直接使用物理分区(如/dev/sda1),不支持动态调整大小。-挂载点:目录与分区的关联点,如/挂载根分区。### 2. 问题场景假设根分区(/dev/sda1)只有20GB,但应用数据增长到25GB,无法在线扩容。我们将使用一块新硬盘(如/dev/sdb1)临时挂载,复制数据后对调挂载点。## 步骤一:准备新硬盘与临时挂载### 1. 检查当前分区情况首先确认根分区设备:bashdf -h /# 输出示例:# Filesystem Size Used Avail Use% Mounted on# /dev/sda1 20G 25G -5G 125% /### 2. 添加新硬盘并分区假设新硬盘为/dev/sdb,创建分区:bashfdisk /dev/sdb # 创建新分区,如/dev/sdb1,大小50GBmkfs.ext4 /dev/sdb1 # 格式化### 3. 临时挂载新硬盘创建临时目录并挂载:bashmkdir /mnt/tempmount /dev/sdb1 /mnt/temp## 步骤二:复制根分区数据(关键操作)### 1. 使用rsync复制数据复制根分区所有文件到新硬盘,保留权限:bashrsync -aAXv / /mnt/temp/ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/mnt/temp参数说明:--a:归档模式(保留权限、时间戳等)--A:保留ACL--X:保留扩展属性--v:显示进度### 2. 验证复制完整性检查文件数量或使用校验工具:bashdiff -r /bin /mnt/temp/bin # 快速检查关键目录## 步骤三:对调挂载点(核心部分)### 1. 进入救援模式重启系统,进入单用户模式或使用Live CD,确保根分区未挂载:bash# 在GRUB菜单按e,添加 single 到内核参数行### 2. 重新挂载与设置在救援模式下执行:bash# 卸载原根分区(假设当前挂载点是/mnt/sysimage)umount /mnt/sysimage# 挂载新硬盘到临时路径mount /dev/sdb1 /mnt/temp# 挂载原硬盘到另一个目录mount /dev/sda1 /mnt/old# 复制GRUB配置(如果需要)cp -a /mnt/temp/boot /mnt/old/boot # 保留原引导文件### 3. 修改fstab文件编辑新硬盘上的fstab:bashvim /mnt/temp/etc/fstab# 将根分区从/dev/sda1改为/dev/sdb1# 示例:# /dev/sdb1 / ext4 defaults 0 0### 4. 更新GRUB配置(可选)如果使用UEFI或需要更新引导:bashgrub2-mkconfig -o /boot/grub2/grub.cfg # 在救援环境执行### 5. 重启验证重启系统后,检查根分区:bashdf -h /# 输出应为/dev/sdb1,容量50GB## 高级用法:自动化脚本示例### 代码示例1:自动复制与挂载脚本python#!/usr/bin/env python3"""CentOS根分区扩容脚本 - 非LVM对调法功能:自动复制根分区数据到新硬盘,并修改fstab注意:需在救援模式运行,谨慎使用!"""import osimport subprocessimport sysdef create_mount_point(path): """创建挂载点目录""" if not os.path.exists(path): os.makedirs(path) print(f"创建目录: {path}") else: print(f"目录已存在: {path}")def copy_root_data(src, dst): """使用rsync复制根分区数据""" # 排除不需要复制的目录 exclude_dirs = ['/proc', '/sys', '/dev', '/tmp', '/mnt'] exclude_args = ' '.join([f"--exclude={d}" for d in exclude_dirs]) cmd = f"rsync -aAXv {src}/ {dst}/ {exclude_args}" result = subprocess.run(cmd, shell=True, capture_output=True, text=True) if result.returncode == 0: print("数据复制成功!") else: print(f"复制失败: {result.stderr}") sys.exit(1)def modify_fstab(new_root_dev, fstab_path): """修改fstab文件中的根分区设备""" with open(fstab_path, 'r') as f: lines = f.readlines() new_lines = [] for line in lines: # 替换根分区设备 if line.strip().startswith('/dev/sda1') and ' / ' in line: new_line = line.replace('/dev/sda1', new_root_dev) new_lines.append(new_line) print(f"替换: {line.strip()} -> {new_line.strip()}") else: new_lines.append(line) with open(fstab_path, 'w') as f: f.writelines(new_lines) print("fstab已更新")if __name__ == "__main__": # 配置:新硬盘设备与临时挂载路径 NEW_DEVICE = "/dev/sdb1" TEMP_MOUNT = "/mnt/temp" # 1. 挂载新硬盘 create_mount_point(TEMP_MOUNT) subprocess.run(f"mount {NEW_DEVICE} {TEMP_MOUNT}", shell=True, check=True) # 2. 复制根分区数据 copy_root_data("/", TEMP_MOUNT) # 3. 修改fstab fstab_path = os.path.join(TEMP_MOUNT, "etc/fstab") modify_fstab(NEW_DEVICE, fstab_path) print("扩容准备完成!请重启进入救援模式完成对调。")### 代码示例2:验证脚本 - 检查复制一致性python#!/usr/bin/env python3"""验证根分区复制一致性脚本比较关键文件的MD5值"""import hashlibimport osimport sysdef calculate_md5(file_path): """计算文件MD5哈希值""" hash_md5 = hashlib.md5() try: with open(file_path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest() except (PermissionError, FileNotFoundError) as e: print(f"跳过文件 {file_path}: {e}") return Nonedef compare_directories(src, dst, file_list): """比较两个目录中的文件MD5""" errors = 0 for rel_path in file_list: src_path = os.path.join(src, rel_path.lstrip('/')) dst_path = os.path.join(dst, rel_path.lstrip('/')) if os.path.isfile(src_path) and os.path.isfile(dst_path): src_md5 = calculate_md5(src_path) dst_md5 = calculate_md5(dst_path) if src_md5 != dst_md5: print(f"不匹配: {rel_path}") print(f" 源文件: {src_md5}") print(f" 目标: {dst_md5}") errors += 1 else: print(f"文件缺失: {rel_path}") errors += 1 if errors == 0: print("所有文件一致!") else: print(f"发现 {errors} 个不一致文件") sys.exit(1)if __name__ == "__main__": # 检查关键系统文件 critical_files = [ "/etc/passwd", "/etc/shadow", "/etc/fstab", "/etc/hostname", "/boot/grub2/grub.cfg", "/bin/bash", "/sbin/init" ] # 假设源是当前根,目标是/mnt/temp compare_directories("/", "/mnt/temp", critical_files)## 注意事项与故障排除1.数据安全:操作前务必备份重要数据,尤其是数据库文件。2.权限问题:rsync复制时需确保用户有足够权限(建议root)。3.SELinux上下文:复制后可能需要恢复SELinux标签:bash restorecon -Rv /mnt/temp4.引导问题:如果系统无法启动,使用Live CD重新安装GRUB:bash grub2-install /dev/sda## 总结本文详细介绍了在CentOS系统中对非LVM根分区进行扩容的“对调硬盘挂载”方法。通过临时挂载新硬盘、复制根分区数据、修改挂载点配置,最终实现根分区扩容。这种方法虽然需要手动操作,但适用于任何非LVM分区场景,且无需重新安装系统。关键步骤包括:1. 准备新硬盘并格式化2. 使用rsync完整复制根分区数据3. 在救援模式下修改fstab和GRUB配置4. 验证数据一致性提供的Python脚本可以自动化部分操作,但建议初学者先手动执行以确保理解。掌握这种技巧后,你可以灵活应对各种磁盘空间不足的场景,提升运维效率。记住:操作前备份、操作中谨慎、操作后验证,这是系统管理的基本原则。

http://www.jsqmd.com/news/1264265/

相关文章:

  • 全网最全面的 DeepEval从入门到精通教程 - DeepEval简介
  • 天津选购质量好的滚珠丝杆不锈钢滚珠丝杆生产厂家参考指引 - 热点品牌推荐
  • 技术控制图的流程稳定性监测
  • 2026浙江景区垃圾桶生产厂家日常运维场景记录 - 起跑123
  • 2026 年新发布:果洛州靠谱的车间护栏生产商哪个好,想不到!这套设计,让车间安全成本骤降30% - 企业推荐官【认证官方】
  • 存(或通过智能指针等机制自动管理)。 、C++ 内存分区 内存区域 存储内容 生命周期 管理方式 栈 (Stack) 函数参数、局部 ...
  • [具身智能-653]:地平线 .bin 与 .hbm 模型文件完整对比 + 技术发展背景说明
  • 2026年天津性价比高的洁净晶圆真空晶圆品牌厂商选购参考 - 热点品牌推荐
  • 2026调研半导体喷砂机行业靠谱厂家的实地见闻分享 - 起跑123
  • 2026日常烘焙场景下空气炸锅纸哪家好相关体验梳理 - 起跑123
  • 【信息科学与工程学】【数据中心】第三十三篇 云数据中心综合解决方案探讨10
  • 3大AI图像修复场景:从模糊到高清的终极解决方案
  • 基于YOLOv3的智能考场监控系统设计与优化
  • 2026年秦皇岛哪里回收包包价格高?(185-3117-2838)海港区民族路94号赵掌柜高价回收香奈儿包包 - 优企甄选
  • 深度解析黑苹果系统架构设计:OpenCore引导原理与实战配置指南
  • 2026年如何联系专业的干铺地暖企业?广昇地暖全面指南 - 装修教育财税推荐2026
  • 晋州汽车保护膜门店选购指南 石家庄周边车主实用参考 - 热点品牌推荐
  • 2026年杭州经济纠纷律师选对=省心 张博等5位律师用真实案例说话 - 本地品牌推荐
  • 3种实战方案:从基础到专业的Hackintosh显示效果调校指南
  • 2026年北京刑事律师服务优选指南与深度解析 - 装修教育财税推荐2026
  • 2026菏泽GEO优化公司相关服务方向推荐 - 起跑123
  • [具身智能-654]:X5可以加载bin模型文件吗?
  • 2026年大庆亲子照馆如何选 本地用户实用选店指南 - 热点品牌推荐
  • Java4
  • 上海企业通勤班车租赁怎么选?8 家实测对比,安驭明智出行凭合规车队领跑推荐榜,上海企业通勤班车租赁、上海员工班车租车 - 优企甄选
  • 汇川软床家具公司产品科普 遵义本地用户实用选购指南 - 热点品牌推荐
  • League Akari:英雄联盟玩家的终极本地化智能助手,告别延迟与隐私担忧
  • 2026年6月浙江PE虹吸电熔选购 靠谱厂家参考指南 - 起跑123
  • MATLAB实战(22):认知雷达自适应感知仿真
  • 2026走访浙江多工位零件成型机相关厂商纪实 - 起跑123