/proc/partitions主要和次要编号,用于检测物理磁盘和分区

/proc/partitions主要和次要编号,用于检测物理磁盘和分区,c,linux,linux-kernel,procfs,sysfs,C,Linux,Linux Kernel,Procfs,Sysfs,我想从/proc/partitions输出中区分物理磁盘(/dev/sda)和逻辑磁盘(/dev/sda1) 我看到的一个简单方法是使用一些正则表达式模式检查它是否以整数结尾 正如我看到的,我的机器上的输出sda比所有sdaN条目的次值最小 检查是否存在/sys/block/[NAME],因此我将尝试读取/sys/block/sdaN目录(将失败)和/sys/block/sda(将成功) 我不知道哪一个是可靠的,还有其他方法吗 另外,我如何可靠地创建树结构,如sda:{sda1,sda2,sda

我想从
/proc/partitions
输出中区分物理磁盘(
/dev/sda
)和逻辑磁盘(
/dev/sda1

  • 我看到的一个简单方法是使用一些正则表达式模式检查它是否以整数结尾
  • 正如我看到的,我的机器上的输出
    sda
    比所有
    sdaN
    条目的次值最小
  • 检查是否存在
    /sys/block/[NAME]
    ,因此我将尝试读取
    /sys/block/sdaN
    目录(将失败)和
    /sys/block/sda
    (将成功)
  • 我不知道哪一个是可靠的,还有其他方法吗

    另外,我如何可靠地创建树结构,如
    sda:{sda1,sda2,sda3,sda4,sda4},sdb:{sdb1}

  • 就凭它的名字
  • 以小数目
  • 再次查看
    /sys/block
  • 按位置(是否确认sda1始终位于sda之后?例如,逻辑分区条目是否始终位于物理磁盘条目之后?)

  • 看起来您没有很好地区分主分区和辅助分区:

    分区通常可以是主分区(最多四个)、扩展分区(最多一个)或逻辑分区(包含在扩展分区中)。每个分区都有一个包含代码的类型字段。这决定了计算机操作系统或分区文件系统

    一级(最大4级)1-4级, 扩展(最大1)1-4, 逻辑5-

    当谈到分区命名时,您通常会看到硬盘设备被命名为/dev/hdx或/dev/sdx,具体取决于硬件配置

    分区号,从1开始计数。因此,四个(可能的)主分区编号为1到4。逻辑分区计数总是从5开始。因此,/dev/hda2是第一个ATA硬盘设备上的第二个分区,/dev/hdb5是第二个ATA硬盘设备上的第一个逻辑分区。与SCSI相同,/dev/sdb3是第二个SCSI磁盘上的第三个分区

    要在磁盘上创建新分区,fdisk应该始终是您的朋友,您只需添加从最后一个占用的块开始的空间,您可以始终通过fdisk-l或#cat/proc/partitions检查它们


    如果你不能使用fdisk或parted工具创建设备,刚才提到过吗

    您知道特定块设备的所有分区都应该是父目录下的子目录吗?请尝试命令
    lsblk
    $ cat /proc/partitions 
    major minor  #blocks  name
    
       8        0  976762584 sda
       8        1   99998720 sda1
       8        2          1 sda2
       8        3  103561216 sda3
       8        4  291514368 sda4
       8        5    1998848 sda5
       8       16   31506432 sdb
       8       17   31505439 sdb1