⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 large-disk.txt

📁 linux-bible.rar linux-bible.rar
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                         Large Disk mini-HOWTO 中译版                                       作者: Andries Brouwer, [1]jaeb@cwi.nl译者: Asd L. Chen, [2]asdchen@ms1.hinet.net   v1.0, 26 June 1996 翻译日期: 10-13 November 1997     _________________________________________________________________      所有有关 disk geometry 及 1024 cylinder 的限制.     _________________________________________________________________   1. 问题所在2. 启动3. 磁碟 geometry 以及分割区4. 转换与磁碟管理程式5. 核心的 IDE 磁碟转换     * 5.1 EZD     * 5.2 DM6:DDO     * 5.3 DM6:AUX     * 5.4 DM6:MBR     * 5.5 PTBL       6. 结论     * 6.1 IDE 细节     * 6.2 SCSI 细节     _________________________________________________________________   1. 问题所在   假如你的磁碟超过 1024 个磁簇(cylinders). 还有, 假如你的作业系统使用基   本输出入系统(BIOS).那麽你会遇到一个问题, 因为一般磁碟输出入/输入所使   用的 INT13 BIOS 介面以一个 10 位元(bit) 的栏位来操作磁簇, 所以无法存取   第 1024 及之後的磁簇.      幸运的是, Linux 不使用 BIOS, 所以没有问题.      话是这麽说, 但有两件事例外:      (1) 当你在启动系统时, Linux 还没开始执行所以无法让你避免这个问题.这对   LILO 以及类似的启动载入程式(boot loaders)有些影响.      (2) 使用磁碟的所有作业系统必须同意分割区的位置.换句话说, 如果你在一颗   磁碟上使用 Linux 以及, 例如 DOS, 那麽两者必须以相同的方式解读分割表的资   料.这对 Linux 核心以及 fdisk 有些影响.      底下是对所有相关细节更详细的描述.注意, 我使用 2.0.8 版核心原始程式做为   参考.其它的版本可能有一点点出入.   2. 启动   当系统启动时, BIOS 从第一个磁碟(或从软碟)读取磁区 0 (一般通称的 MBR -   Master Boot Record, 主启动磁区)并跳至在该处的程式码 - 通常是一些启动载   入程式(bootstrap loader). 这些小小的启动程式一般不会有自己的磁碟驱动程   式而会使用 BIOS 所提供的服务.这意谓著只有整个 Linux 核心都位於开头的   1024 个磁簇内时才能够被启动.      这个问题很容易解决: 确定核心(也许还包括其它启动时用到的档案, 像是 LILO   map 档) 是放在一个 BIOS 可以存取的到, 全都在开头的 1024 个磁簇内的分割   区里 - 这可以(可能)是第一个或第二个磁碟.      另一点是启动载入程式与 BIOS 必须同意彼此对磁碟逻辑(geometry)上的看法.   给 LILO `linear' 这个选项参数可能会有些帮助.细节後述.   3. 磁碟 geometry 以及分割区   如果你的磁碟上有好几种作业系统, 每一种使用一个或多个分割区.那麽对於分   割区位於何处不同的看法可能导致灾难性的後果.      MBR 中包含一个分割表描述分割区(主分割区: primary) 在那里.有四个表格给   四个主要分割区使用, 它们看起来像   struct partition {        char active;    /* 0x80: bootable, 0: not bootable */        char begin[3];  /* CHS for first sector */        char type;        char end[3];    /* CHS for last sector */        int start;      /* 32 bit sector number (counting from 0) */        int length;     /* 32 bit number of sectors */};   (其中 CHS 是磁簇/磁头/磁区: Cylinder/Head/Sector 的缩写)      因此, 有项资讯是重覆的: 分割区的位置可以由 24 位元的 begin 以及 end 栏   位, 和 32 位元的 start 以及 length 栏位给定.      Linux 只使用 start 以及 length 栏位, 故最多可以处理包含 2^32 个磁区的分   割区, 也就是, 最大 2 TB 的分割区.这是现今磁碟机的两百倍, 所以也许足够   往後十年的需求.      不幸的是, BIOS INT13 呼叫使用三个位元组的 CHS 编码, 10 个位元作为磁簇号   码, 8 个位元作为磁头号码, 及 6 个位元作为磁轨上的磁区号码. 可能的磁簇   号码是 0-1023, 可能的磁头号码是 0-255, 而磁轨上可能的磁区号码为 1-63(是   的, 磁轨上的磁区是由 1 起算, 不是 0). 以这 24 位元最多可以定址   8455716864 个位元组(7.875 GB), 这是 1983 年磁碟机的两百倍.      更不幸的是, 标准的 IDE 介面容许 256 个磁区/磁轨, 65536 个磁簇以及 16   个磁头.它自己本身可以存取 2^37 = 137438953472 个位元组(128 GB), 但是加   上 BIOS 方面 63 个磁区与 1024 个磁簇的限制後只剩 528482304 个位元   组(504 MB)可以定址的到.      这不足以应付现今的磁碟, 人们使用各种硬体或软体上的方法来克服.   4. 转换与磁碟管理程式   没有人对磁碟的'真实' geometry 有兴趣.磁轨的磁区数通常是变动的 - 接近磁   碟外围的磁轨有比较多的磁区 - 所以没有'真实'的每磁轨磁区数. 对於使用者   而言最好是把磁碟当作编号 0,1,..., 的磁区组合成的线性阵列, 让控制器去找   出磁区究竟位於磁碟的那里.      此线性编号一般通称为 LBA.对於 geometry 为 (C,H,S) 的磁碟而言属(c,h,s)   的线性位址为 c*H*S+h*S+(s-1).所有 SCSI 控制器都使用 LBA, 某些 IDE 控制   器也是.      如果 BIOS 把这 24 个位元(c,h,s) 转换成 LBA 并□给懂得 LBA 的控制器, 那   麽又可以定址到 7.875 GB .并不足以应付所有的磁碟, 但仍然是个改进.注意   此处 BIOS 使用的 CHS, 它不再与'实体'有任何关系.      当控制器不懂何为 LBA 但是 BIOS 知道如何转换时有些类似的方法可行.(在   BIOS 设定中通常称为 'Large'.)现在 BIOS 将呈现 geometry 为(C',H',S')给   作业系统, 而在与磁碟控制器沟通时则使用(C,H,S). 通常 S=S', C'=C/N 而   H'=H*N, 其中 N 是确保 C'<=1024 之 2 的最小次方(所以 C'=C/N 时舍去的数浪   费少许容量).再一次, 这允许存取最多达 7.875 GB.      如果 BIOS 不知道 'Large' 或是 'LBA', 那麽还是有软体的解决方案.像是   OnTracker 或 EZ-Drive 这些个磁碟管理程式会以它们自己的函式(routines)替   换掉 BIOS 的. 通常这是藉由将磁碟管理程式放在 MBR 及其後几个磁   区(OnTrack 称这些程式码为 DDO: Dynamic Drive Overlay )来达成的, 所以它   会在任何其它作业系统之前被启动. 这也就是为什麽在安装磁碟管理程式後从软   碟启动可能会出问题.      这影响可能多於或少於 BIOS 转换 - 但特别是在相同的磁碟上跑数种不同的作业   系统时, 磁碟管理程式可能引起许多问题.      Linux 从 1.3.14 版开始支援 OnTrack 磁碟管理程式, 从 1.3.29 开始 支援   EZ-Drive .下面有些更进一步的资讯.   5. 核心的 IDE 磁碟转换   如果 Linux 侦测到 IDE 磁碟上有某些磁碟管理程式存在, 它将会试著使用与该   磁碟管理程式相同的方式来重新对应磁碟, 所以 Linux 看到与, 例如 DOS 配合   OnTrack 或是 EZ-Drive 相同的磁碟分割. 然而, 当你在指令列上指定   geometry 时, 就不会做任何的重新对应 - 所以一行 `hd=cyls,heads,secs' 指   令列选项可能取消掉与磁碟管理程式的相容.      此重新对应的方式是尝试 4,8,16,32,64,128,255 磁头数(H*C 保持不变)直到 C   <= 1024 或是 H = 255.      细节如下 - 小节的抬头是出现在相对应之启动讯息里的字串.在此以及在这份文   件任何其它地方中分割的型态都以十六进位数字表示.   5.1 EZD   侦测到 EZ-Drive , 因为第一个主要分割区型态为 55 .如上述重新对应   geometry, 且忽略从第 0 磁区读入的分割表 - 以第 1 磁区的分割表取代.磁碟   的区块号码(block numbers) 没有改变, 但对磁区 0 的写入会转向磁区 1.此动   作可以藉由修改在 ide.c 中的        #define FAKE_FDISK_FOR_EZDRIVE 0        并重新编译核心来改变.   5.2 DM6:DDO   侦测到 OnTrack DiskManager(在第一个磁碟上), 因为第一个主要分割区型态为   54 .如上述重新对应 geometry 而且整个磁碟平移 63 个磁区. (所以旧的磁区   63 变成磁区 0)然後从新的第 0 磁区读入新的 MBR (与分割表).此平移当然是   为 DDO 留空间 - 这也就是为什麽其它磁碟不必平移.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -