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

本文介绍了解决在重新分区硬盘时遇到的设备资源繁忙错误的方法,通过使用parted工具中的partprobe命令来修改内核分区表,从而在不重启系统的情况下识别新增分区。

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

在 mkfs.ext4 /dev/sda2 格式化硬盘空间时,可能出现这样的错误。

had this situation at office where I was told to re-partition an already existing partition. The situation was to get the below schema

/dev/sdb1 1 3040 24418768+ 83 Linux

/dev/sdb2 3041 6080 24418800 83 Linux
/dev/sdb3 6081 30515 196274137+ 83 Linux

to

/dev/sdb1 1 3040 24418768+ 83 Linux
/dev/sdb2 3041 6080 24418800 83 Linux
/dev/sdb3 6081 30515 196274137+ 5 Extended
/dev/sdb5 6081 18239 97667136 83 Linux
/dev/sdb6 18240 30515 98606938+ 83 Linux

Alright, now the partition /dev/sdb2 was in use and cannot be unmounted. So what happens when you finish the partitioning with fdisk ?

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

This happends, if you are using/mounted any partitions of the HDD which you just re-partitioned. Normally we do reboot the machine to get this right. But this is not always the easy way out, when you have something running on the machine/multiple users are on the machine working etc. So there comes the “parted” for rescue.

The package “parted” provides a tool called “partprobe“. This will do the magic for you, you just type in the command (see the man page for more info on partprobe) and this will give the information needed about your newly created partition to your kernel.


解决方法:执行下partprobe 命令

 

       partprobe包含在parted的rpm软件包中。partprobe可以修改kernel中分区表,使kernel重新读取分区表。 因此,使用该命令就可以创建分区并且在不重新启动机器的情况下系统能够识别这些分区

 

查看是否安装该命令:

[root@db1 dev]# rpm -q parted

parted-1.8.1-23.el5

 

我们执行一下该命令:

[root@db1 dev]# partprobe

Warning: Unable to open /dev/hdc read-write (Read-only file system).  /dev/hdc has been opened read-only.

如果还有错误,可以从错误中看出来,需要reboot重启然后再mkfs格式化硬盘空间就可以了。

<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`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值