关于硬盘和文件系统



    在"Linux系统管理员手册"里已经详细讲了硬盘的参数(磁头数,磁道,扇区,柱面等),还有一个图.下面详细讲一下硬盘分区.为了充分利用硬盘或者是因为操作系统的限制(如DOS不能管理大于2G的容量),一般要给硬盘分区.由于早期硬盘的设计限制,单个硬盘上只能分4个主分区和4个扩展分区(可能是整个系统只能有四个扩展分区),所以你用Linux下的fdisk添加分区时要先选择Primary或Extend,在扩展分区里面还可以再建多个逻辑分区.区别在于只有主分区是可以启动的(也有人把Linux装在逻辑分区上,然后用别的方法来启动Linux,后面有文章来讲它,但不推荐这种方法).你想从哪个主分区启动就把那个分区设为激活状态,我发现Linux下的fdisk有个小问题,就是在设置激活分区后不把原来激活分区的激活标志清除,也许这是个feature :-) 硬盘把分区信息保存在它的第一面第一磁道的第一个扇区,这个扇区称之为主引导记录(MBR),MBR上还存有简单的引导程序(有些病毒就寄生在这里),在每个分区里的前几个扇区被称为SuperBlock,包含这个分区的信息和引导程序.对硬件稍微有些了解的人都知道硬件启动的基本过程: CPU复位是从某个固定的内存地址开始执行(如8086从FFFF0,68000从00000),通常这块地址被固化在主板的程序(BIOS)占据,BIOS执行完以后去读外设的引导记录,以硬盘为例,就是先读MBR里的引导程序,这个引导程序可以直接读入预先设置的操作系统内核,但通常是去调入激活分区里的引导程序,用这个程序去调入操作系统内核.Linux的引导程序LILO(LInux LOader)既可以装在MBR,也可以装在Linux根分区的SuperBlock上.如果在硬盘上有多个操作系统,我推荐把LILO装在根分区的SuperBlock上比较好,把这个分区设置为激活分区,然后用LILO启动Linux和其他操作系统,这样兼容性较好.

    硬盘分完区后怎么去看分区呢?首先你要忘掉DOS系列的C,D,E等等.Linux通常是按目录树和文件系统来组织信息的,而设备是一种特殊的文件,都在/dev/目录下.第一个IDE硬盘是/dev/hda,它的第一个主分区是/dev/hda1,第四个主分区是/dev/hda4,第一个逻辑分区是/dev/hda5...以此类推;第二个IDE设备是/dev/hdb,第三个IDE硬盘是/dev/hdc.....以此类推;SCSI设备则以s打头,如/dev/sda1 /dev/sdb2等等.初学者分完区后急着格式化分区(format),可是却找不着format命令,这是因为在Linux不是这个概念,而是创建文件系统的概念--make file system.你可以找到mkfs这个程序,用mkfs -t ext2 /dev/hda1就行了,mkfs有很多参数,初次使用时用"man mkfs"学习学习.现在Linux使用的文件系统格式为ext2(extention 2 file system),所以建议你直接使用mke2fs.刚从dos/windows转过来的新手又问,有没有scandisk? 在Linux下可以用fsck(e2fsck)来检查修复文件系统的完整性.在安装的时候不用你手工来做这些事情,安装程序会自动来做,你只需看懂/dev/hda1是什么意思,然后敲几下键盘而已.

    安装Linux除了要给它分配文件系统的分区("native分区"该如何翻译----本地,原始分区?)外,通常还要分配交换分区(swap分区).交换分区是专门来做虚拟内存的(Linux也可以把文件系统上的一个文件作为虚拟内存用/dev/zero设备和dd命令).一个好的建议是,当系统频繁访问虚拟内存而你有两个以上的硬盘时,把交换分区与数据分区放在不同的硬盘上可能会提高系统性能.如何划分交换分区呢?有点烦琐: 先用Linux下的fdisk分出一个native分区,然后按t修改这个分区的id号,从83改为82,回头按p看看是不是显示为swap分区了? 在Redhat 5.1带了个新的分区软件,比较简单直观.Linux对交换分区的限制是每个交换分区不能超过127M字节,但支持最多16个交换分区.交换分区到底分配多大好呢?这个问题没有标准答案.通常的说法是分配的容量应是物理内存的一倍到两倍,其实也不尽然.比如我在个人机上玩Linux,有128M物理内存够用了,在分配那么大虚拟内存干嘛,岂不是浪费空间嘛,64M交换分区够了!如果不够还可以临时再加嘛.如果你要用Linux来做服务,最好的方法是计算(哇噻,你已经很熟悉Linux了,我也该闭嘴了:-).新手要注意的是,交换分区上没有文件系统,所以不能用mke2fs了,应换成mkswap来格式化,用swapon来激活,安装程序会自动做这些事情的.

    需要为Linux分配几个native分区呢?我们先来看一下目录树.DOS下c盘一个根目录,d盘一个根目录.... Linux不是这样的,所有的文件系统只有一个根"/".当你有多个native分区时,需要把其中一个设置为"/" (chroot),其他的分区设置为根(root)下的一个点,如/other-part,以后你不是切换盘符来访问这个分区了,而是从目录树上的这个安装点来访问它(cd /other-part).整个目录树看起来象这样的(摘自sag文档):

 有些目录在系统里有缺省的含义.首先是根文件系统,是系统的根本所在.入口点是根目录,根目录下通常没有文件,除非Linux内核二进制文件/vmlinuz,在Redhat发行版中内核二进制文件也不在根目录下,而在/boot目录下.根文件系统通常包含/bin(启动所需命令),/sbin(系统级命令),/etc(系统级配置文件),/lib(系统级共享库),/dev(设备文件),/boot(启动引导程序在这里),/root(超级用户的家目录),/mnt(系统管理员的临时安装点),/tmp(系统级临时文件). 这些目录通常都在根文件分区里,无需为它们做特别的分区,而且它们一般也不大./proc是一个虚拟的文件系统,是由核心在内存里产生的,提供硬件和内核运行的一些信息./var文件系统上记录系统和系统级应用程序运行时常要改变的信息./usr会很大,应用程序通常都装在这里./home一般是给普通用户分配空间的地方,比如用户user1的家目录就在/home/user1下,匿名ftp(/home/ftp)和web服务器的内容通常也在这里.

    由于Linux并没有象某些Unix那样使用slice分片技术来生成/usr,/var等等,你可以灵活地在根分区下建一个/var(或/usr等)目录或把另一个Linux分区的安装点设置为/var(或/usr等).如果用户比较多,你可以为/home专门做个较大的分区;如果系统的服务量比较大,为/var专门做个较大的分区(或单独的整个硬盘);甚至你还可以进一步细分,为/var/spool做个文件系统.这样以后管理起来比较方便.对于初学者来说不必这么麻烦,只需做个较大的分区做根文件系统就行了,安装程序会把上述目录都做好的.重要的是,要理解它们的含义以及你拥有的方法和权力.

    顺便提一下,安装时根文件系统在哪里?RedHat的启动软盘使用的是initrd(init ram disk,初始内存虚拟磁盘),在Dos下启动Linux(loadlin.exe)也用到了这个技术.而Slackware则需要专门调入一个root盘.

    婆婆妈妈,罗哩罗嗦讲了半天,我自己都烦了, 到此打住. 建议初学者仔细看看"系统管理员手册",不要被"系统"两个字吓住,其实里面讲了很多背景知识.感谢OKboy把它翻译成中文了.
 
 
 

  ?

本文转自中文Linux论坛