Linux 内核 - 无法访问 sda16 和 sda17

Linux 内核 - 无法访问 sda16 和 sda17

我无法从我的 Linux 访问 sda16 sda17 及更高分区。这个 Linux 是 Debian(非常旧);内核 2.6.23。因此,我知道这么旧的 Linux 内核无法访问单个 SATA 磁盘上的 16 个以上分区。

我应该使用哪个版本的内核才能访问 sda16、sda17 等?我只想更新内核,而不是整个 Linux 发行版。

PS. 有一个 WindowsNT 内核可以访问和格式化 16、17 或更高的分区,但我的意图是使用 Linux 中的 sda16 和 sda17(我想要 Linux 内核)。

PPS: dmesg:

sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sda: sda1 sda2 sda3 sda4 < sda5 sda6 sda7 sda8 sda9 sda10 sda11 sda12 sda13 sda14 sda15 >
sd 2:0:0:0: [sda] Attached SCSI disk
sd 4:0:0:0: [sdb] xxx 512-byte hardware sectors ...

因此,没有将 sda16、sda17、... 映射到 sdb。Sdb 是第二个物理硬盘。

答案1

我可以在不改变内核的情况下通过偏移安装来过度处理它:

$ fdisk -l -u /dev/sda
   Device Boot      Start 
...
/dev/sda16      123456783 ...
/dev/sda17      234567894 ...

$ mount -o ro,offset=$[512*123456783] /dev/sda /mount/sda16
$ mount -o ro,offset=$[512*234567894] /dev/sda /mount/sda17

问题源于将 SATA 移至 SCSI 子系统。SCSI 只能有 15 个分区:

http://publib.boulder.ibm.com/infocenter/dsichelp/ds6000ic/topic/com.ibm.storage.smric.help.doc/f2c_linuxdevnaming_2hsag8.html- Linux 设备命名

按照惯例,SCSI 磁盘最多有 16 个次要编号映射到单个磁盘。因此,对于每个完整磁盘,每个磁盘最多有 15 个分区,因为一个次要编号用于描述整个磁盘(例如 /dev/sda),而其他 15 个次要编号用于引用该磁盘的分区(例如 /dev/sda1、/dev/sda2 等)。

因此,无法使用 为第 16 和第 17 个分区创建特殊块设备mknod,因为次要分区 16 将是下一个驱动器,例如:

# ls -l /dev/sda? /dev/sda?? /dev/sdb
brw-rw----  1 root disk  8,   0 May 24 08:09 /dev/sda
brw-rw----  1 root disk  8,   1 May 24 08:09 /dev/sda1
brw-rw----  1 root disk  8,   2 May 24 08:09 /dev/sda2
...
brw-rw----  1 root disk  8,  14 May 24 08:09 /dev/sda14
brw-rw----  1 root disk  8,  15 May 24 08:09 /dev/sda15
brw-rw----  1 root disk  8,  16 May 24 08:09 /dev/sdb

根据线程,此更改是在 Linux 内核版本 2.6.20 左右进行的http://forums.justlinux.com/showthread.php?149956-如何从 SCSI-SATA-PATA-USB 磁盘中获取 44 个逻辑分区- “如何从 SCSI/SATA/PATA/USB 磁盘中获取 44 个逻辑分区”

使用 2.6.20 或更高内核的 Linux 现在使用相同的命名约定来调用每个 SCSI、Sata、Pata 和 USB 硬盘,使用磁盘名称 sda、sdb、sdc、sdd、sde 等。现在每个磁盘最多有 16 个设备名称是标准配置。对于第一个磁盘 sda,16 个设备名称是 sda 和 sda1 到 sda15。sda1、sda2、sda3 和 sda4 永久保留给 4 个主分区,即使其中一些未使用,其余 sda5 到 sda15 是 11 个逻辑分区名称。

这是由“libata”制作的,它在 SCSI 子系统之上实现了 PATA/SATA:

http://kernelnewbies.org/Linux_2_6_19#head-cdcbaa9c1b476decdc064e0a75d23d1328b1ddce

Libata PATA(并行 ATA)合并 “并行 ATA” 指的是 SATA 出现之前我们多年来一直使用的所有 ATA/IDE 控制器和驱动器。几乎从一开始,一些内核黑客的目标之一就是用 libata 上的重新实现(即“SATA 层”)替换 drivers/ide 中可用的 IDE 驱动程序(“设备驱动程序 -> ATA/ATAPI/MFM/RLL 支持”配置菜单下的所有内容)。... 这意味着 2.6.19 可能有两个适用于您的基于 PATA 的设备的驱动程序:“设备驱动程序 -> ATA/ATAPI/MFM/RLL 支持”下的旧 IDE 驱动程序和“设备驱动程序 -> 串行 ATA(产品)和并行 ATA(实验)驱动程序”下的替代驱动程序(以及其余的 SATA 驱动程序)

早在 2006 年,人们就发现了这个问题: http://www.redhat.com/archives/rhl-list/2006-October/msg00218.html

  1. SCSI 子系统仅允许磁盘上有 15 个分区(我认为)。使用标准 MS-DOS 样式分区表,该分区始终包括所有四个主分区。因此,一个主分区 + 十一个逻辑分区是极限。

  2. libata 对 SATA 磁盘的支持使用 SCSI 子系统,并继承了相同的限制。

  3. libata 对 IDE(= PATA)的支持已合并,计划于 2.6.19 推出。它不会是默认驱动程序集,并且不太可能成为默认期间Fedora Core 版本,但考虑到 Fedora 的目标和工程师,我不会惊讶于它在 FC7 版本的官方 Fedora 内核中启用。(如果没有,那么就是 FC8。我们可能谈论的是明年左右。)

当 libata 支持时为并行 IDE 打开,则 /dev/hdx15 上方的 IDE 设备上的现有分区将变得无法挂载。

相关内容