Disk /dev/sdb doesn't contain a valid partition table

时间:2022-06-08 23:36:59
解决:Disk /dev/sdb doesn't contain a valid partition table

虚拟机环境,Linux系统下新添加了一块硬盘

 

1. 虚拟机--设置--添加,选择硬盘添加

2. 首先为磁盘创建文件系统:mkfs.ext3 /dev/sdb

3. 创建挂载点:mkdir /mnt/sdb

4. 挂载:mount /dev/sdb /mnt/sdb

5. fdisk -l

    发现有问题:

    Disk /dev/sdb doesn't contain a valid partition table

6. fdisk /dev/sdb

跟着向导一步步做下去(如果不知道该输入什么,就输入“m”并回车,可以打印出菜单):

Command (m for help): m

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   l   list known partition types

   m   print this menu

   n   add a new partition

(后面的菜单省略,太长了)

这里我们要添加一个新的分区,所以输入“n”:

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-14098, default 1): (此处直接回车)

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-14098, default 14098): (此处直接回车)

Using default value 14098

Command (m for help): p

Disk /dev/sdb: 115.9 GB, 115964116992 bytes

255 heads, 63 sectors/track, 14098 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1       14098   113242153+  83  Linux

现在可以写入分区表了,所以输入“w”:

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

现在再fdisk -l,结果正常。


二、硬盘格式化 | Format hard disk

1、显示硬盘及所属分区情况。在终端窗口中输入如下命令
sudo mkfs -t ext4 /dev/sdb
说明:
-t ext4 表示将分区格式化成ext4文件系统类型。
Disk /dev/sdb doesn't contain a valid partition table
  

三、挂载硬盘分区 | Mount hard disk partition

1、显示硬盘挂载情况。在终端窗口中输入如下命令
sudo df -l
新硬盘分区没有挂载,无法进入和查看。

在终端窗口中输入如下命令
sudo mount -t ext4 /dev/sdb /devdata
说明:
指定硬盘分区文件系统类型为ext4 ,同时将 /dev/sdb 分区挂载到目录 /devdata。

再次在终端窗口中输入如下命令
sudo df -l

新硬盘分区已经挂载,如下图最下面的红色方框内容。
Disk /dev/sdb doesn't contain a valid partition table
 
2、配置硬盘在系统启动自动挂载。在文件 /etc/fstab 中加入如下配置
# /devdata was on /dev/sdb
UUID=37eaa526-5d96-4237-8468-603df5216ce9     /devdata     ext4     defaults     0     3
Disk /dev/sdb doesn't contain a valid partition table

==========================  /etc/fstab 配置 注意!!==========================
这一部分 的设置与原作者不同,用上面无法成功自动挂载的话,请尝试下面的配置:
Disk /dev/sdb doesn't contain a valid partition table
其中,“/Projects”与“/AMAX”都是挂载点,可以根据需要自定义。
上面是ext4格式硬盘为例子。如果是ntfs,则“ext4”要修改为“auto”,“defaults”要修改为“nosuid,nodev,nofail”。
在Ubuntu,可以使用更直观的方式:用系统自带的Disks或者Disk Utility界面化工具。
=========================================================================
 

附录1:fdisk命令详解 | Appendix part 1:  fdisk command syntax

fdisk 命令的语法如下:
fdisk [-b sectorsize] device     
fdisk -l [-u] [device...]
fdisk -s partition...
fdisk -v
 
说明:
  • -b    指定每个分区的大小。也可以执行fdisk device(如:fdisk /dev/sdb)后,在系统提示时指定。
  • -l    列出指定的外围设备的分区表状况。如果仅执行 fdisk -l ,系统会列出已知的分区。
  • -u   搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址。
  • -s        将指定的分区的大小输出到标准输出上,单位为区块。
  • -v   显示fdisk的版本信息。

附录2:mkfs命令详解 | Appendix part 2:  mkfs command syntax

mkfs 命令的语法如下:
mkfs [-V] [-t fstype] [fs-options] filesys
说明:
  • -V   显示简要的使用方法。
  • -t    指定要建立何种文件系统,如:ext3, ext4。
  • fs   指定建立文件系统时的参数。
  • -v   显示版本信息与详细的使用方法。

附录3:mount命令详解 | Appendix part 3:  mount command syntax

mkfs 命令的语法如下:
mount [-afFnrsvw] [-t vfstype] [-L label]  [-o options] device dir
mount [-lhv]
说明:
  • -a    加载文件/etc/fstab中设置的所有设备。
  • -f     不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
  • -F    需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
  • -t vfstype   指定加载的文件系统类型,如:ext3, ext4。
  • -L label      给挂载点指定一个标签名称。
  • -l     显示分区的label。
  • -h    显示帮助信息。
  • -v    显示mount的版本信息。
  • device       要挂载的分区或文件。如果device是一个文件,挂载时须加上 -o loop参数。
  • dir             分区的挂载点。

附录4:fstab配置详解 | Appendix part 4:  fstab detail configuration

/etc/fstab 中一共有6列:
  • file system:指定要挂载的文件系统的设备名称(如:/dev/sdb)。也可以采用UUID,UUID可以通过使用blkid命令来查看(如:blkid  /dev/sdb)指定设备的UUID号。
  • mount point:挂载点。就是自己手动创建一个目录,然后把分区挂载到这个目录下。
  • type:用来指定文件系统的类型。如:ext3, ext4, ntfs等。
  • option dump:0表示不备份;1表示要将整个中的内容备份。此处建议设置为0。
  • pass:用来指定fsck如何来检查硬盘。0表示不检查;挂载点为分区/(根分区)必须设置为1,其他的挂载点不能设置为1;如果有挂载ass设置成大于1的值,则在检查完根分区后,然后按pass的值从小到大依次检查,相同数值的同时检查。如:/home 和 /boot 的pass 设置成2,/devdata 的pass 设置成3,则系统在检查完根分区,接着同时检查/boot和/home,再检查/devdata。

Fdisk分区工具

1. Overview

*Fdisk是IBM的老牌分区工具,支持绝大多数操作系统,几乎所有的Linux操作系统都默认装有fdisk;包括在Linux Rescue模式下依然能够使用。

*fdisk是基于MBR的分区工具(是当年IMB设计给PC机来使用的),所以如果需要使用GPT,则无法使用fdisk进行分区

*只有超级用户权限(如root,Uid=0的;可以用在命令行中输入id来查询)才可以执行fdisk,因为命令都是咋/sbin下面,需要特权级的用户;

*使用su - 命令切换到Root用户

*fdisk分区后,需要使用partprobe(立即生效)让内核识别新的分区

2. Command Reference

*fdisk –l # 列出所有安装的磁盘及分区信息

*fdisk /dev/sdb #对目标磁盘进行分区操作

*partprobe #分区之后,让内核更新分区信息,否则系统需要restart后,内核才能识别新的分区

*/proc/partitions 文件夹(目录)也可以用来查看分区信息

2.1 命令fdisk -l的界面

Disk /dev/sdb doesn't contain a valid partition table

上图sda disk information中对 255 heads,63 sectors/track,1958 cylinders的解析:

sda磁盘总共有1958个cylinder(柱面),每个cylinder(柱面)有63个sectors(扇区),每个sectors(扇区)有255个heads(磁头)

那么这块sda的总的磁头数量为:255*63*1958=31455270

因为一块磁盘的空间大小计算方式为:这块磁盘的总的磁头数量(Heads)*512bytes(因为每个磁头数量为512字节)

所以这块磁盘的空间为31455270*512=16105098240=16.1G

fdisk /dev/sdb后,按m,再按l(list know partition type),列出的分区类型

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdb doesn't contain a valid partition table

2.2 命令fdisk /dev/sdb的交互式界面:如下图

Disk /dev/sdb doesn't contain a valid partition table

按m (for help)+Enter后的交互式界面,如下图

Disk /dev/sdb doesn't contain a valid partition table

按n+Enter后(add a new partition),出现的交互式见面

Disk /dev/sdb doesn't contain a valid partition table

按“P”后(创建主分区),出现的交互式界面如下图

Disk /dev/sdb doesn't contain a valid partition table

Partition number按1后,出现如下图:Cylinder数从1-1044

Disk /dev/sdb doesn't contain a valid partition table

输入分区大小为+2G后,如下图,也可以输入Cylinder数量,不过要计算一下,计算方法为要分配的容量如2G(2048000000bytes)=XCylinder*63sectors*255heads*512bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdb doesn't contain a valid partition table