首页 > 代码库 > 鸟哥的Linux私房菜 基础学习篇读书笔记(10):Linux磁盘与文件系统管理(3)
鸟哥的Linux私房菜 基础学习篇读书笔记(10):Linux磁盘与文件系统管理(3)
这篇文章主要总结在Linux操作系统中管理我们的硬盘和文件系统所需要用到的命令。当我们在系统中增加了一块硬盘,我们需要经历哪些步骤才能真正使用这块硬盘呢?大致可以分为以下步骤:
(1)对磁盘进行分区,新建可以使用的分区;
(2)对分区进行格式化,将分区格式化为我们操作系统能够使用的文件系统;
(3)对新建好的文件系统进行检验;
(4)创建挂载点,将该文件系统挂载上来。
接下来就介绍磁盘分区,格式化,检验和挂载的相关命令。
磁盘分区通过 fdisk命令进行,fdisk命令的基本使用方法 为“fdisk [-l] 设备名”。进入fdisk命令后,具体如何操作,可以通过按下m查看帮助。比较重要的几个命令为: d : 删除一个分区; n: 新增一个分区; p:在屏幕上显示分区表 ; q,离开fdisk程序,不保存任何设置;w:将所做的设置写入分区表。当然,也可以通过 fdisk -l 命令直接查看当前主机的硬盘信息和分区情况。如图所示:
使用fdisk命令还有一些注意事项,当我们使用w命令将设置写入分区表后,可能会出现警告信息,让我们重新启动以更新分区表信息,这是因为我们的磁盘还处于使用状态,无法卸载,因此内核无法重新取得分区表信息。除了重启之外,还可以使用GNU推出的partprobe工具程序强制内核重新查找分区表。另外fdisk命令对于2TB以上的磁盘也无法处理,此时就需要parted命令来进行磁盘分区了。
格式化的命令是通过mkfs(make file system)命令进行的。它的使用方法为 “mkfs [-t 文件系统格式] 设备文件名”。mkfs是一个综合命令,当我们使用 “mkfs -t ext3 ...”命令时,系统会调用mkfs.ext3命令来进行相应的格式化。我们可以在输入mkfs命令后连续按下两个tab键,就可以查看mkfs支持的文件格式了。以下是我的的系统上mkfs支持的文件系统格式:
其中vfat格式是可以在Windows和Linux中同时被支持的,因此需要在Windows和Linux中共享的U盘可以使用这种格式。在使用mkfs命令时,除了指定文件系统的类型,还可以指定文件系统的卷标,block大小,inode大小等等。mkfs是调用mke2fs这个公用程序来设置这些参数,mke2fs的使用方法为“mke2fs [-b blocksize] [-i inodesize] [-L 卷标] [-cj] 设备”。
fsck命令是用来检查和修正文件系统错误的命令。fsck命令只有身为root用户而且文件系统有问题情况下才使用这个命令,否则正常情况下使用这个命令,可能会对系统造成损害,当然刚刚格式化成功的分区也可以通过fsck命令来进行检测,此时被检测的分区务必不能挂在到系统上,也就是说文件系统必须处于卸载状态。当使用fsck命令检测磁盘时,有问题的数据都会被放置到到该文件系统的lost+found这个目录下。每个文件系统最顶层的目录(就是挂在点那个目录下面)都会存在一个lost+found目录。除了fsck命令用来检测文件系统是否出过错,还可以使用badlocks命令来检查硬盘扇区是否有坏轨。
接下来是磁盘挂载与卸载,关于挂载的概念已经讲了很多遍了。挂载点一定是目录,该目录就是进入磁盘分区的入口,访问该目录就能访问到该文件系统的数据。Linux中使用mount命令进行文件系统的挂载,mount命令是个很有用的命令,可以挂载 ext3/vfat/nfs等文件系统。mount命令的使用方法如下:
mount -a: 依照配置文件 /etc/fstab的数据将所有未挂载的磁盘都挂载上来;
mount -l: 仅仅输入mount命令会显示出当前系统的挂载信息,加上 -l 参数可以增加Label名称;
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 设备文件名 挂载点 : 将某个设备按指定方式进行挂载。
mount命令使用起来非常简单,在实际挂载的时候甚至不需要通过 -t 参数来指定文件系统的类型,因为文件系统几乎都有super block,挂载的时候Linux会自动分析super block并搭配Linux自己的驱动程序去测试挂载,如果测试成功了,就立即使用该类型的文件系统去挂载设备。所以当我们在电脑中插入U盘了,如果想使用该U盘,也需要使用mount命令将U盘进行挂载。mount命令还可以通过 -o remount 参数进行重新挂载,当我们进入单用户维护模式时,由于根目录常会被系统挂载为只读,这个时候就可以通过这个参数来重新挂载了。
除了挂载设备,通过mount --bind 命令还可以将某个目录挂载到另外一个目录上面去,以后访问挂载点就相当于访问该目录,当然这种效果也可以通过符号连接实现。以下是使用mount 挂载一个目录的举例:
挂载之后可以使用umount命令进行卸载,umount的使用方法为 “umount [-fn] 设备文件名或挂载点”。可以使用设备文件名或者挂载点来进行卸载,卸载之后可以使用df命令或mount -l命令来查看该文件系统还是否存在于目录树中,但是如果挂载的是目录而不是磁盘设备,则就只能通过挂载点来卸载。而且卸载的时候请注意,需要将工作目录换到挂载点(及其子目录)之外的目录里去。
接下来介绍一些修改磁盘参数的命令。之前讲过,在Linux下所有设备都是用文件来表示,那如何通过文件来表示一个设备呢,就是通过文件的major和minor数值来代替。major为主设备码,minor为次设备码,内核认识设备数据就是通过这两个数值来决定的。在Linux内核升级为2.6之后,硬件的设备文件名可以自动被系统实时产生了,不需要我们手动创建,但是还是了解一下如何手动创建设备文件,以备不时之需。创建设备文件是通过mknod命令进行,该命令的使用方法为“mknod 设备文件名 [bcp] [Major] [Minor]”。
每个文件系统有一个文件系统卷标(Label),该卷标值可以在文件系统格式化(mkfs)时指定,也可以使用e2label命令来修改。e2label的使用方法为:“e2label 设备名称 新的Label名称“。 Linux文件系统的卷标名类似于Window里每个盘都有的一个名字(C盘/D盘等)。挂载的时候我们也可以使用文件系统的卷标名来进行挂载,而在CentOS中,/etc/fstab文件的设置都是默认用Label name。使用卷标名有什么好处呢?无论你的磁盘设备文件名怎么变,系统是通过Label name来识别你的硬盘,因此无论你的硬盘插到哪个接口都不会有影响。
还有tune2fs命令,tune2fs命令功能比较广泛,可以自行man以下。hdparm命令对于IDE接口的硬盘而言,可以设置很多高级参数,但是对于SATA接口的硬盘,就没有多大用处了,唯一可以做的就是通过 “hdparm -t 设备名称” 的方式来测试磁盘的性能,但是测试结果不是很准确,只能作为一个参考。
手动使用mount命令来挂载不是很方便,可以让系统在开机的时候自动将文件系统挂载好,主要通过修改/etc/fstab文件来设置开机自动挂载。我们每次使用mount命令挂载文件系统时,其实就是把相应的参数写到/etc/fstab这个文件里的。该文件共有六个字段,通过名字就能理解每个字段的意义的。其中Device字段是代表磁盘设备的文件名或设备的Label name,而且默认是采用Label name。第四列的parameters代表的是文件系统的参数,可以设置非常多的参数,例如同步还是异步,是否允许用户挂载等等。dump列是指该文件系统能否被dump命令进行备份。0是不备份,1是每天都dump备份,2代表其它不定日期的dump备份。fsck列代表是否用fsck程序检测该文件系统,0代表不检测,1代表检测,2也代表检测,但是比1检测的晚,因此将根目录所在的文件系统设置为1,其它的设置为2即可。当我们修改/etc/fstab文件后,为了防止语法错误而导致我们无法开机,在修改后一定要使用df命令或mount -l命令来测试是否能够得到正确地挂在信息。
在Linux中,对于一个镜像文件,我们可以不用把它刻录成光盘,就能够访问到该文件里的数据。我们可以直接使用特殊特备loop方式挂载,即mount -o loop的方式将一个镜像文件进行挂载,然后访问该挂载点就能访问到镜像文件里的数据。真的非常方便,想想在Windows中,我们得通过第三方软件才能打开镜像文件。除了镜像文件,对于一个大文件,我们也可以使用这种方式来挂载,这就相当于我们不需要修改分区表就能制造出我们想要的分区了。以下是我使用 mount -o loop 方式将CentOS安装镜像文件进行挂载:
最后介绍一下内存交换空间(swap)的构建。在安装CentOS时,就说明了需要构建swap(内存交换空间)。当主机的物理内存不足时,内核就会把物理内存中暂时用不到的程序和数据挪到swap中,从而空出物理内存来加载需要执行的程序。因此swap的功能就是在物理内存不足的情况下起到扩展内存的作用。如果在安装Linux时忘记了构建swap,可以使用如下方式来创建swap:首先依然是使用fsck命令分出一个分区来给系统作为swap,然后使用mkswap命令来将该分区格式化为swap格式,然后用“swapon 设备文件名”的方式来将该swap设备启动。可以使用free这个内存查看命令观察swap是否被正确加载。除了可以把一个分区构建为swap,还可以使用一个大文件来构造swap,方法是类似的。而且使用文件构建swap时,还可以使用swapoff来释放 swap file。
本章Linux命令总结:
fdisk,partprobe,mkfs,mke2fs,fsck,badlocks,mount,umount,mknod,e2label,tune2fs,hdparm,mkswap,swapon,swapoff,free。鸟哥的Linux私房菜 基础学习篇读书笔记(10):Linux磁盘与文件系统管理(3)