![Linux 内核 - 无法访问 sda16 和 sda17](https://linux22.com/image/1295438/Linux%20%E5%86%85%E6%A0%B8%20-%20%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%20sda16%20%E5%92%8C%20sda17.png)
我无法从我的 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 个分区:
按照惯例,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
SCSI 子系统仅允许磁盘上有 15 个分区(我认为)。使用标准 MS-DOS 样式分区表,该分区始终包括所有四个主分区。因此,一个主分区 + 十一个逻辑分区是极限。
libata 对 SATA 磁盘的支持使用 SCSI 子系统,并继承了相同的限制。
libata 对 IDE(= PATA)的支持已合并,计划于 2.6.19 推出。它不会是默认驱动程序集,并且不太可能成为默认期间Fedora Core 版本,但考虑到 Fedora 的目标和工程师,我不会惊讶于它在 FC7 版本的官方 Fedora 内核中启用。(如果没有,那么就是 FC8。我们可能谈论的是明年左右。)
当 libata 支持时是为并行 IDE 打开,则 /dev/hdx15 上方的 IDE 设备上的现有分区将变得无法挂载。