Linux数据盘扩容时,磁盘挂载后,无法正常卸载的解决方法

本文详细介绍了在阿里云Linux环境下,如何安全地将数据盘从100G扩容到150G的全过程。包括解决卸载磁盘时遇到的问题,如设备繁忙错误,以及如何使用fuser命令来释放设备占用,最终成功完成数据盘扩容。

因业务需要需要将阿里云的一台云主机 100G数据盘扩容到150G。
扩容数据盘需要先将之前挂载的磁盘卸载掉。

有时候会遇到Linux磁盘挂载后,无法正常卸载的情况。

查看磁盘挂载情况

# df -h
文件系统	      		容量  已用  可用 已用%% 挂载点
...
/dev/vdb            99G   48G   47G  51% /data

运行 umount 命令卸载指定,提示

# umount /dev/vdb
umount: /data: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

-f 强制卸载 /data,提示

# umount -f /data
umount2: 设备或资源忙
umount: /data: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount2: 设备或资源忙

只能使用 上面命令行提示 fuser 或者 lsof命令 杀死所有访问该设备的进程,完事在卸载磁盘。

# fuser -cu /data
# fuser -ck /data

命令参数说明
-c 查看所有挂载该设备的进程
-u 查看正在操作该设备的用户名
-k 杀死所有访问该设备的进程
注意:这将杀死访问该设备的进程,如果有其他设备也在用这个进程,记得卸载后重启该服务进程避免影响正常业务

再次执行 umount /data。此时,卸载成功。


简单介绍下阿里云 扩容数据盘_Linux

阿里云官方文档,扩容数据盘_Linux

文档说明已经很明晰了,通常来说按着步骤操作就行,当然须要看下 前提条件注意事项

前提条件
  • 实例处于 运行中 (Running) 或 已停止(Stopped) 状态。
  • 数据盘的状态为 待挂载 或 使用中。
  • 数据盘已做分区。
  • 建议在扩容数据盘之前手动创建快照,以备份数据。
注意事项
  • 扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。

  • 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。

  • 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。

  • 磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。

再注意。注意。。注意。。。

阿里云通常扩容数据盘不会导致数据丢失,但是万一,万一呢, 所以 在扩容数据盘之前手动创建快照,备份数据才是关键。1个小时也没多少钱 100G 1分钱的样子吧。 磁盘扩容完,没问题,快照直接删掉就行。


最后,说明一点,阿里云文档 步骤 2. 登录实例扩容文件系统 中,
使用 fdisk命令删除原来的分区并创建新分区。
操作的是 /dev/vdb1文件系统。

本人服务器的文件系统 默认是 /dev/vdb所以就不需要fdisk方式了,卸载掉数据盘后,直接执行
检查文件系统,并变更文件系统大小。

# e2fsck -f /dev/vdb # 检查文件系统
# resize2fs /dev/vdb # 变更文件系统大小

然后直接将扩容完成的文件系统挂载到原来的挂载点(本人是挂在到 /data)

# mount /dev/vdb /data

运行命令 df -h,如果出现扩容后的文件系统信息,说明挂载成功。

### 磁盘分区扩容方法 #### 方法一:使用fdisk进行分区扩容 1. 创建分区:使用`fdisk`命令磁盘进行分区操作,例如`fdisk /dev/sda`,在进入命令环境中,按`n`键创建新分区,一路按回车采用默认设置,最后按`w`键保存分区表,按`q`键退出[^1]。 ```bash fdisk /dev/sda ``` 2. 创建物理卷:使用`pvcreate`命令创建物理卷,`sda3`需根据第一步中创建的分区名称进行替换,如`pvcreate /dev/sda3`[^1]。 ```bash pvcreate /dev/sda3 ``` 3. 将磁盘扩展到卷组:使用`vgextend`命令将新的物理卷扩展到指定卷组,`sda3`根据第一步中创建的分区名称进行替换,例如`vgextend centos /dev/sda3`[^1]。 ```bash vgextend centos /dev/sda3 ``` 4. 扩展逻辑分区:使用`lvextend`命令扩展逻辑分区,可根据自身情况选择扩容到`centos - root`还是`centos - home`逻辑分区,`100%`表示将所有的磁盘空间扩容到指定分区,也可以根据需要调整比例,支持指定大小如`10G`等(指定固定值参数`-l`需要修改为`-L`),例如`lvextend -l+100%FREE /dev/mapper/centos - root`[^1]。 ```bash lvextend -l+100%FREE /dev/mapper/centos - root ``` 5. 使扩展生效:使用`xfs_growfs`命令使扩展生效,根据扩容的分区进行选择使用,如`xfs_growfs /dev/mapper/centos - root`[^1]。 ```bash xfs_growfs /dev/mapper/centos - root ``` 6. 查看:使用`df -H`命令查看磁盘空间使用情况[^1]。 ```bash df -H ``` #### 方法二:用parted命令调整大小 1. 查看磁盘情况:使用`parted /dev/sda print free`命令查看磁盘情况[^1]。 ```bash parted /dev/sda print free ``` 2. 分配剩余的可用空间:使用`parted /dev/sda resizepart 2 100%`命令分配剩余的可用空间,其中`2`为分区号,`100%`表示使用全部剩余空间[^1]。 ```bash parted /dev/sda resizepart 2 100% ``` 3. 刷新物理卷:使用`pvresize /dev/sda2`命令刷新物理卷[^1]。 ```bash pvresize /dev/sda2 ``` 4. 扩展逻辑分区:使用`lvextend`命令扩展逻辑分区(具体命令可参考方法一中的扩展逻辑分区部分)。 5. 使扩展生效:使用`xfs_growfs`命令使扩展生效(具体命令可参考方法一中的使扩展生效部分)。 6. 查看:使用`df -H`命令查看磁盘空间使用情况(具体命令可参考方法一中的查看部分)。 #### 方法三:扩展现有sda磁盘(适用于虚拟机/云平台) 需先在虚拟化平台扩展磁盘,再刷新磁盘容量(扫描新空间),使用`echo 1 > /sys/block/sda/device/rescan`命令刷新磁盘容量,例如将`home`分区分出`10G`到`root`分区可使用此方法[^2]。 ```bash echo 1 > /sys/block/sda/device/rescan ``` #### 方法四:添加新盘进行扩容 1. 查看新添加的硬盘:使用`lsblk -f`命令查看新添加的硬盘,如查看新添加的硬盘`sdb`[^3]。 ```bash lsblk -f ``` 2. 执行分区:使用`fdisk /dev/sdb`命令对新硬盘进行分区操作,具体步骤为输入`m`查看帮助,输入`n`新增分区,输入`p`选择`primary`主分区,分区号、起始扇区、结束扇区都默认(三次回车),设置分区格式输入`t`,分区号默认(回车),`Hex`代码为`8e`(`8e`代表`Linux LVM`分区类型),输入`w`写入分区表,等待分区完成[^3]。 ```bash fdisk /dev/sdb ``` 3. 格式化分区:使用`mkfs.xfs /dev/sdb1`命令格式化分区[^3]。 ```bash mkfs.xfs /dev/sdb1 ``` 4. 创建pv:使用`pvcreate /dev/sdb1`命令创建物理卷[^3]。 ```bash pvcreate /dev/sdb1 ``` 5. 扩展vg:使用`vgextend rootvg(卷组名) /dev/sdb1(新pv名)`命令将新的物理卷扩展到指定卷组[^3]。 ```bash vgextend rootvg /dev/sdb1 ``` 6. 扩展lv:使用`lvextend -L 60G /dev/rootvg/optlv`命令扩展逻辑卷,再使用`xfs_growfs /dev/rootvg/optlv`命令使扩展生效[^3]。 ```bash lvextend -L 60G /dev/rootvg/optlv xfs_growfs /dev/rootvg/optlv ``` ### 磁盘分区卸载方法 1. 确保该分区没有被使用:可以使用`lsof`命令查看哪些文件正在使用该分区,例如查看`/dev/sda1`分区的使用情况: ```bash lsof /dev/sda1 ``` 如果有进程正在使用该分区,需要先停止这些进程。 2. 卸载分区:使用`umount`命令卸载分区,例如卸载`/dev/sda1`分区挂载在`/mnt`目录下的挂载点: ```bash umount /mnt ``` 如果卸载失败,可能是有隐藏的进程仍在使用该分区,可以尝试使用`fuser -km /mnt`命令强制终止使用该分区的进程(此操作有一定风险,可能会导致数据丢失),然后再次尝试卸载
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值