Linux磁盘扩容脚本

通过LVM模式进行磁盘扩容

例子,将一个新磁盘通过LVM模式挂载到/data上,并将根目录下的普通目录/opt重新使用新磁盘按照LVM模式挂载

# ================================
# Step 1. 确认磁盘
# ================================
lsblk
# 假设新磁盘是/dev/sdb

# ================================
# Step 2. 创建 LVM
# ================================
echo ">>> 创建 PV..."
pvcreate /dev/sdb

echo ">>> 创建 VG: vg_dataE..."
vgcreate vg_data /dev/sdb

echo ">>> 创建 LV for /opt: 200G..."
lvcreate -L 200G -n lv_opt vg_data

echo ">>> 创建 LV for /data: 300G..."
lvcreate -L 300G -n lv_data vg_data

# ================================
# Step 3. 格式化
# ================================
mkfs.xfs /dev/vg_data/lv_opt
mkfs.xfs /dev/vg_data/lv_data

# ================================
# Step 4. 迁移 /opt 数据
# ================================
mkdir -p /mnt/opt_new
mount /dev/vg_data/lv_opt /mnt/opt_new

echo ">>> 拷贝 /opt 数据..."
rsync -avx /opt/ /mnt/opt_new/

mv /opt /opt.bak
# 创建新的/opt
mkdir /opt
umount /mnt/opt_new
# 创建 /data
mkdir -p /data

# ================================
# Step 5. 挂载分区
# ================================

echo ">>> 更新 fstab..."
cp /etc/fstab /etc/fstab.bak
echo "/dev/vg_data/lv_opt   /opt   xfs   defaults   0 0" >> /etc/fstab
echo "/dev/vg_data/lv_data  /data1   xfs   defaults   0 0" >> /etc/fstab

echo ">>> 挂载全部..."
mount -a

后续扩容/opt只需执行如下代码:

lvextend -L +50G /dev/vg_data/lv_opt
xfs_growfs /opt

根目录磁盘空间被占满导致系统无法启动解决

1、首先给服务器添加新的磁盘

这里使用vmware示范

2、使用新磁盘给根目录扩容

方式一、添加新分区挂载到根目录的子目录下(无需删除分区)

本质是选取一个占用空间较大的目录,把这个目录挂载到新的磁盘上,从而恢复根目录的空间
通过bios进入系统,选择从CD/DVD启动,启动时执行如下操作:

  • 选择"Troubleshooting"
  • 选择"Rescue a CentOS system"
  • 选择"Continue"(以读写模式挂载)
  • 选择"Start shell"
    查看磁盘分区情况
lsblk 
fdisk -l

查看磁盘容量使用情况

df -h

步骤1:扩展虚拟磁盘并创建新分区


# 1. 扩展虚拟磁盘(VMware界面操作,同方案A步骤1)
# 2. 启动到救援模式(同方案A步骤2)
# 3. 创建新分区
fdisk /dev/sda
# 在fdisk中:
n  # 新建分区
p  # 主分区
4  # 分区号(因为sda3已存在)
# 使用默认起始扇区
# 使用默认结束扇区(用完所有空间)
w  # 保存

步骤2:格式化和挂载新分区

# 1. 刷新分区表
partprobe /dev/sda
# 2. 格式化新分区
# 检查原来的文件系统类型
blkid /dev/sda3
# 如果是XFS,使用:
xfs_growfs /dev/sda3
# 新挂载的磁盘文件系统和原来的文件系统类型保持一致
mkfs.ext4 /dev/sda4  # 或 mkfs.xfs /dev/sda4
# 3. 临时挂载查看原根目录内容
mkdir /mnt/oldroot
mount /dev/sda3 /mnt/oldroot

# 4. 迁移部分目录到新分区
# 比如迁移 /home 或 /var
mkdir /mnt/newhome
mount /dev/sda4 /mnt/newhome
# 复制数据(保留权限)
rsync -av /mnt/oldroot/home/ /mnt/newhome/
# 5. 备份原目录并创建新挂载
mv /mnt/oldroot/home /mnt/oldroot/home.backup
mkdir /mnt/oldroot/home

步骤3:配置自动挂载

# 查看新分区UUID
blkid /dev/sda4
# 编辑fstab
echo "UUID=[新分区UUID] /home ext4 defaults 0 2" >> /mnt/oldroot/etc/fstab
# 卸载
umount /mnt/newhome
umount /mnt/oldroot
# 重启
reboot

重启之后/home目录将被单独挂载都新的磁盘上

方式二、删除并重建分区

注意: 删除分区不会丢失数据,只要不格式化!
步骤1:查看磁盘分区情况

# 查看磁盘和分区信息
fdisk -l /dev/sda
lsblk
df -h
# 示例输出可能如下:
# /dev/sda1  /boot
# /dev/sda2  [swap]
# /dev/sda3  /     ← 我们要扩展的这个

步骤2:删除并重建分区(关键步骤)

# 1. 备份分区表(非常重要!)
sfdisk -d /dev/sda > /root/sda_partition_backup.txt
# 2. 使用parted工具(比fdisk更友好)
parted /dev/sda
# 3. 在parted交互界面中操作
print  # 查看当前分区表
# 记录/dev/sda3的起始位置(Start)
# 4. 删除sda3分区(数据不会丢失)
rm 3
# 5. 重新创建分区
# 使用相同的起始位置,更大的结束位置
mkpart primary ext4 [起始位置] 100%
# 示例:如果起始位置是12345678sector
# mkpart primary ext4 12345678s 100%
# 6. 设置分区类型(如果需要)
set 3 boot on  # 如果是启动分区
# 7. 退出
quit

步骤3:扩展文件系统

# 刷新分区表
partprobe /dev/sda
# 检查分区
fdisk -l /dev/sda
# 根据文件系统类型选择扩展命令
# 如果是ext4文件系统(最常见)
e2fsck -f /dev/sda3  # 强制检查文件系统
resize2fs /dev/sda3  # 扩展ext4文件系统到分区大小
# 如果是XFS文件系统
xfs_repair /dev/sda3  # 先修复检查
xfs_growfs /dev/sda3  # 扩展XFS文件系统

# 检查结果
df -h /

步骤4:验证并重启

# 验证文件系统
fsck /dev/sda3
# 退出救援环境
exit
# 重启系统
reboot
# 记得进入BIOS改回硬盘启动

恢复分区表

# 如果操作失误,恢复分区表
sfdisk /dev/sda < /root/sda_partition_backup.txt
posted @ 2026-08-26 01:01  我爱这世间美貌女子  阅读(9)  评论(0)    收藏  举报