热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux重新读写分区的命令,用partprobe、blockdev、hdparm、partx命令在Linux中重新加载分区表...

本文介绍Linux操作系统重新加载分区表的方法:使用partprobe、blockdev、hdparm、partx命令。背景作为Linux管理员,你可以

本文介绍Linux操作系统重新加载分区表的方法:使用partprobe、blockdev、hdparm、partx命令。

背景

作为Linux管理员,你可以在一天内多次执行磁盘分区任务。大多数情况下,在虚拟环境(例如VMWare、Virtualbox等)中的磁盘分区之后,分区表已成功更改,但它不会发生在物理服务器上,那么通知操作系统有关分区表更改的解决方案是什么?下面就介绍其方法,这些方法强制内核重新加载分区表并在/dev中重新填充其ID。

如果你正在寻找磁盘分区实用程序,那么可以尝试其中之一,磁盘分区实用程序是fdisk和parted。

在执行磁盘分区时,在虚拟环境中的大多数情况下,可能会得到类似于下面的输出:

The partition table has been altered.

Syncing disks.

执行磁盘分区时,可能在物理环境中的大多数时间内获得以下相同的输出:

The partition table has been altered.

Calling ioctl() to re-read partition table.

Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

我已经在Arch Linux系统上测试了相关的命令,除了partx命令之外它工作正常,因为我在运行partx命令后没有在dmesg日志中看到任何日志,然而,它在RHEL 7系统中工作正常。

我建议你在Linux系统中添加分区后运行以下的命令,以通知操作系统有关分区表更改的信息。

可以使用以下四种方法完成:

partprobe:partprobe是一个通过请求操作系统重新读取分区表来通知操作系统内核分区表更改的程序。

blockdev:实用程序blockdev允许用户从命令行调用块设备ioctl。

hdparm:hdparm为Linux SATA/PATA/SAS “libata”子系统和旧IDE驱动子系统支持的各种内核接口提供命令行界面。

partx:partx告诉内核有关磁盘分区的存在和编号。

一、使用partprobe命令在Linux中重新加载分区表

partprobe是一个程序,通过请求操作系统重新读取分区表来通知操作系统内核分区表更改。

这是执行此任务的标准和本机命令。

在这个例子中,我将使用/dev/sdb并确保你必须输入你的设备名称:

$ sudo partprobe /dev/sdb

dmesg用于检查或控制内核环缓冲区,因此,使用以下命令查看内核更改,我可以看到更改,因为dmesg中有一个新的sdb设备日志:

$ dmesg | grep sdb

[ 3.143163] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)

[ 3.143186] sd 3:0:0:0: [sdb] Write Protect is off

[ 3.143192] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00

[ 3.143276] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

[ 3.145620] sd 3:0:0:0: [sdb] Attached SCSI disk

[ 188.810583]  sdb: sdb1 sdb2 sdb3 sdb4

[ 219.112109]  sdb: sdb1 sdb2 sdb3 sdb4

二、使用blockdev命令在Linux中重新加载分区表

实用程序blockdev允许从命令行调用块设备ioctl。

我们可以使用blockdev命令来执行此任务:

$ sudo blockdev --rereadpt -v /dev/sdb

使用以下dmesg命令查看内核更改,我可以看到更改,因为dmesg中的sdb设备再次有一个新日志:

$ dmesg | grep sdb

[ 3.143163] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)

[ 3.143186] sd 3:0:0:0: [sdb] Write Protect is off

[ 3.143192] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00

[ 3.143276] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

[ 3.145620] sd 3:0:0:0: [sdb] Attached SCSI disk

[ 188.810583]  sdb: sdb1 sdb2 sdb3 sdb4

[ 219.112109]  sdb: sdb1 sdb2 sdb3 sdb4

[ 422.506376]  sdb: sdb1 sdb2 sdb3 sdb4

三、使用hdparm命令在Linux中重新加载分区表

hdparm为Linux SATA/PATA/SAS “libata”子系统和旧IDE驱动子系统支持的各种内核接口提供命令行界面。

或者,我们可以使用hdparm命令来执行此任务:

$ sudo hdparm -z /dev/sdb

/dev/sdb:

re-reading partition table

使用以下dmesg命令查看内核更改,我可以看到更改,因为dmesg中的sdb设备再次有一个新日志:

$ dmesg | grep sdb

[ 3.143163] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)

[ 3.143186] sd 3:0:0:0: [sdb] Write Protect is off

[ 3.143192] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00

[ 3.143276] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

[ 3.145620] sd 3:0:0:0: [sdb] Attached SCSI disk

[ 188.810583]  sdb: sdb1 sdb2 sdb3 sdb4

[ 219.112109]  sdb: sdb1 sdb2 sdb3 sdb4

[ 422.506376]  sdb: sdb1 sdb2 sdb3 sdb4

[ 504.328312]  sdb: sdb1 sdb2 sdb3 sdb4

四、使用partx命令在Linux中重新加载分区表

partx告诉内核有关磁盘分区的存在和编号。

partx命令是util-linux软件包的一部分,可从Linux Kernel Archive获得。

或者,我们可以使用partx命令来执行此任务:

$ sudo partx -a /dev/sdb

或者:

$ sudo partx -u /dev/sdb

partx: /dev/sdb: error adding partitions 1-5

可以通过运行以下命令来双重确认,如果分区表已成功重新加载并且内核可见,那么可以在此位置查看这些新分区,运行cat /proc/partitions命令,如下图所示:

cd927e953455b8d4c48b35524225ba78.png

使用以下ls命令可以找到相同的信息:

$ ls -l /dev/sdb*

brw-rw---- 1 root disk 8, 16 Mar  8 07:23 /dev/sdb

brw-rw---- 1 root disk 8, 17 Mar  8 07:23 /dev/sdb1

brw-rw---- 1 root disk 8, 18 Mar  8 07:23 /dev/sdb2

brw-rw---- 1 root disk 8, 19 Mar  8 07:23 /dev/sdb3

brw-rw---- 1 root disk 8, 20 Mar  8 07:23 /dev/sdb4

brw-rw---- 1 root disk 8, 21 Mar  8 07:23 /dev/sdb5

使用以下sudo partx -l /dev/sdb命令可以找到相同的信息,如下图所示:

580d1e3f212d078a629c509c1410a1b7.png

相关主题



推荐阅读
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • x86 linux的进程调度,x86体系结构下Linux2.6.26的进程调度和切换
    进程调度相关数据结构task_structtask_struct是进程在内核中对应的数据结构,它标识了进程的状态等各项信息。其中有一项thread_struct结构的 ... [详细]
author-avatar
卖砖头的小男孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有