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

浙公网安备 33010602011771号