块设备摘要
1.块设备分区数
alloc_disk()的参数表示该磁盘设备最大可以支持多少个分区,因为实际拥有的分区根据用户如何对其进行分区来决定。如果alloc_disk()的参数是4,那么实际可以支持的最大分区数是4-1=3。
一般用fdisk对磁盘设备进行分区,而fdisk可以将磁盘设备最多分成多少个分区数是由该磁盘拥有的磁道数决定的(cylinder),传统的磁盘使用8个位表示盘面数、6个位表示每磁道扇区数、10个位表示磁道数,因此盘面、每磁道扇区、磁道的最大数值分别为255、63和1023。为了与传统磁盘兼容,对于现代磁盘,我们在访问时还是假设它具有传统的结构:所有磁盘具有最大数目的(也就是恒定的)盘面和每磁道扇区数,而磁盘大小与磁道数与成正比。假设在驱动程序中我们指定了磁盘大小为16M,共包含16*1024*1024/512=32768个扇区,它的磁道数就是:32768/255/63=2。即如果一个磁盘设备的磁道数为4,那么可以用fdisk最多将其分成4个分区,每个分区占有一个磁道。
假设加载块设备驱动后磁盘的设备文件为/dev/ram,而alloc_disk()的参数是4,那么可以最大支持分区数为3,如果磁盘设备大小为32M,拥有4个磁道,那么可以用fdisk最多分成4个分区,但是实际生成的块设备文件只有/dev/ram1,/dev/ram2,/dev/ram3,虽然fdisk将其分成4个分区,但是并不会有代表第4个分区的/dev/ram4,因为该磁盘设备最多支持的分区数受到了alloc_disk()的参数限制;如果fdisk将其分成了两个分区,每个分区占有两个磁道,即16M,那么就会生成/dev/ram1,/dev/ram2两个块设备文件。通过mkfs.ext3 /dev/ram1,mount /dev/ram1 /mnt,然后df -h可以看到/dev/ram1的空间约为16M。
要注意的是/dev/ram并不代表某一个分区,它代表整个磁盘设备,如果在其上做一个文件系统,然后挂载上查看大小可以看到约为32M。
“希望读者不要理解成分几个区就需要几个磁道,这意味着一个磁道一个区,也意味着每个区必须一般大小。由于分区总是以磁道为边界,尽可能增加磁道的数量不仅仅是为了让块设备容纳更多的分区,更重要的是让分区的实际大小更接近于分区时的指定值,也就是提高实际做出的分区容量的精度。”