/ proc /分区主要和次要号码以检测物理磁盘和分区

时间:2013-11-22 16:38:29

标签: c linux linux-kernel procfs sysfs

$ 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

我想区分来自/dev/sda输出的物理磁盘(/dev/sda1)和逻辑磁盘(/proc/partitions)。

  1. 我看到的一个简单方法是检查一些正则表达式模式是否以整数结尾
  2. 我看到我的计算机上的输出sda的值小于所有sdaN条目
  3. 检查是否存在/sys/block/[NAME]所以我会尝试阅读/sys/block/sdaN目录(会失败)和/sys/block/sda(会成功)
  4. 我不知道哪一个是可靠的,还有其他方法吗?

    另外,我如何可靠地制作像sda : {sda1, sda2, sda3, sda4, sda4}, sdb : {sdb1}

    这样的树结构
    1. 只是名字
    2. 以次要数字
    3. 再次查看/sys/block
    4. 按位置(是否确认sda1将始终位于sda之后?例如,逻辑分区条目是否始终在物理磁盘条目之后?)

1 个答案:

答案 0 :(得分:0)

看起来您不能很好地区分主分区和辅助分区:

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

小学(最多4)1-4, 扩展(最多1)1-4, 逻辑5 -

对于分区命名,您通常会看到硬盘设备名为/ dev / hdx或/ dev / sdx,其中x取决于硬件配置。

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

为了在磁盘上创建新分区,fdisk永远是你的朋友,你只需要从最后一个块开始添加空间,你可以随时通过fdisk -l或#cat / proc / partitions来检查它们。

如果你不能使用fdisk或parted工具创建设备,那就提到它了吗?!