WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

本文介绍了在为服务器磁盘进行扩容操作时遇到的错误及其解决步骤。通过关闭SWAP分区、修改fstab文件并重启服务器等方法最终解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:为服务器磁盘扩容时,分区提示如下错误信息
这里写图片描述

解决办法:
1、查看磁盘分区情况

[root@hotdata ~]# fdisk -l

Disk /dev/vda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00078f9c

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           1        2611    20970496   83  Linux

Disk /dev/vdb: 322.1 GB, 322122547200 bytes
16 heads, 63 sectors/track, 624152 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb8c71e5c

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       16643     8388040+  82  Linux swap / Solaris
/dev/vdb2           16644      208050    96469128   83  Linux  

2、可以看到/dev/vdb有两个分区,一个用于SWAP,一个是存储数据的。
问题肯定是出在SWAP了,使用命令关闭swap,重新fdisk后还是提示一样的错误

swapoff  /dev/vdb1      

3、进入/etc/fstab 注释掉挂载的磁盘,reboot,重新fdisk
这里写图片描述

4、reboot 重启后,重新fdisk即可

参考资料:
1、磁盘分区格式化
Linux 格式化和挂载数据盘

<think>首先,用户的问题是关于Linux磁盘分区操作中遇到的错误:"WARNING: Re-reading the partition table failed with error 16: 设备或资源忙"。用户提供了几个引用来源,这些引用描述了相同的问题,并提到了一些解决方案。我需要基于这些信息,给出结构清晰、可靠的回答。 关键错误信息: - 当使用`fdisk`或其他工具修改分区表后,保存更改时出现错误。 - 错误提示:设备或资源忙,内核仍然使用旧的分区表。 - 解决方案建议包括:重启系统、运行`partprobe`或`kpartx`命令。 从引用中提取的解决方案: - 引用[1]提到三个方法:运行`partprobe`、`kpartx`或重启系统。 - 引用[2]、[3]、[4]也类似地提到这些选项。 我的回答需要: - 结构清晰,逐步解决问题。 - 确保回答真实可靠。 - 使用中文回答。 - 对于数学表达式,使用$...$或$$...$$格式(但在这个问题中,可能不涉及数学,所以可能不需要)。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 回答结构: 1. **理解问题**:简要解释错误的原因。 2. **解决方案**:逐步给出解决方法。 3. **详细步骤**:为每个方法提供具体命令和解释。 4. **预防措施**:如何避免类似问题。 5. **相关问题**:生成相关的问题列表。 错误原因: - 当分区表被修改时,内核需要重新读取新分区表。但如果设备(如磁盘)正在被使用(例如,某个分区被挂载),内核无法立即重新读取,导致错误16(设备或资源忙)。 解决方案: - 方法1:运行`partprobe`命令来通知内核重新读取分区表。 - 方法2:运行`kpartx`命令(特别是对于某些设备如LVM或multipath)。 - 方法3:重启系统。 - 方法4:确保没有进程在使用该设备(卸载分区)。 在回答中引用来源: - 在提到解决方案时,自然地添加引用标识。例如,"可以通过运行partprobe命令来解决[^1]。" 生成相关问题: - 基于这个主题,生成2-3个相关问题,放在回答末尾。 最终回答框架: - 开头:确认问题。 - 主体:分步骤解释解决方案。 - 结尾:生成相关问题。</think>### Linux磁盘分区错误“设备或资源忙”的解决方法 在Linux系统中,当您使用`fdisk`或其他工具修改磁盘分区表后,保存更改时可能会遇到错误提示:“WARNING: Re-reading the partition table failed with error 16: 设备或资源忙”。这个错误表明内核无法立即重新读取新分区表,因为磁盘设备(如`/dev/sda`)或其分区正被系统进程占用(例如,某个分区已挂载或正在使用中)。内核会继续使用旧分区表,直到新表被成功加载。这可能导致新分区无法识别或格式化失败[^1][^2][^3][^4]。 以下是一个结构化的解决指南,基于可靠实践逐步操作。请确保您有root权限(使用`sudo`或`su`),并在操作前备份重要数据,以防意外数据丢失。 #### 步骤1: 确认错误原因和当前状态 - **检查磁盘占用情况**:运行`lsof`或`fuser`命令查看是否有进程正在使用该磁盘或分区。例如,替换`/dev/sda`为您的实际设备名: ```bash sudo lsof /dev/sda # 列出占用进程 sudo fuser -v /dev/sda # 显示占用进程的详细信息 ``` 如果输出显示有进程(如`mount`或`systemd`),则表示设备正忙。卸载相关分区可能解决[^3][^4]。 - **查看分区表状态**:使用`parted`命令验证分区表是否已修改但未生效: ```bash sudo parted -l ``` 如果输出仍显示旧分区布局,则需强制内核重新读取。 #### 步骤2: 尝试三种解决方案(按推荐顺序) 根据错误提示,内核提供了三个方法:运行`partprobe`、`kpartx`或重启系统。优先选择前两种方法,以避免系统重启。 1. **方法1: 运行`partprobe`命令(推荐首选)** `partprobe`是Linux工具,用于通知内核重新扫描分区表而不重启。 - 执行命令: ```bash sudo partprobe /dev/sda # 替换/dev/sda为您的设备名 ``` - **效果**:内核立即加载新分区表。完成后,运行`lsblk`或`fdisk -l`检查新分区是否可见。 - **注意事项**:如果命令无输出,表示成功;如果报错,说明设备仍被占用,需先卸载分区或尝试方法2[^1][^4]。 2. **方法2: 运行`kpartx`命令(适用于复杂设备如LVM或multipath)** `kpartx`常用于处理多路径设备或LVM分区。 - 执行命令: ```bash sudo kpartx -u /dev/sda # 更新设备映射 sudo kpartx -a /dev/sda # 添加新分区映射 ``` - **效果**:强制内核识别新分区布局。之后,运行`partprobe`或检查`/dev/`目录确认新分区(如`/dev/sda1`)。 - **注意事项**:此方法适用于高级存储配置。如果设备是标准磁盘,方法1通常足够[^2][^3]。 3. **方法3: 重启系统(最后手段)** 如果以上命令失败,或您无法卸载占用进程,重启系统是最可靠的方式。 - 执行: ```bash sudo reboot ``` - **效果**:启动时内核自动加载新分区表。重启后,使用`df -h`或`blkid`验证新分区。 - **注意事项**:重启可能中断服务,仅作为备选方案[^1][^2]。 #### 步骤3: 后续操作和验证 - **格式化新分区**:分区表生效后,格式化新分区(如使用`mkfs`): ```bash sudo mkfs.ext4 /dev/sda1 # 替换为新分区名 ``` - **预防措施**: - 在修改分区表前,卸载所有相关分区:`sudo umount /dev/sda1`。 - 使用`parted`或`gdisk`代替`fdisk`,某些工具处理分区表更友好。 - 定期检查系统日志:`dmesg | grep sda`,可提前发现设备冲突。 #### 常见问题解答 - **为什么会出现此错误?** 当分区表被修改时,内核需重新读取。但如果磁盘被挂载、进程占用(如文件系统扫描),内核会拒绝操作,导致错误16[^3][^4]。 - **是否所有Linux发行版都适用?** 是的,上述方法适用于大多数发行版(如Ubuntu、CentOS、RHEL)。工具如`partprobe`和`kpartx`通常预装。 通过以上步骤,问题通常可解决。如果仍失败,可能是硬件问题(如磁盘故障),建议检查磁盘健康状态:`sudo smartctl -a /dev/sda`。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值