鸟哥的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命令来进行磁盘分区了。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+JiMyNjY4NDvKvbuvtcTD/MHuysfNqLn9bWtmcyhtYWtlIGZpbGUgc3lzdGVto6nD/MHuvfjQ0LXEoaPL/LXEyrnTw7e9t6jOqiChsG1rZnMgWy10IM7EvP7Ptc2zJiMyNjY4NDvKvV0gIMnosbjOxLz+w/uhsaGjbWtmc8rH0ru49tfbus/D/MHuo6y1sc7Sw8fKudPDIKGwbWtmcyAtdCBleHQzIC4uLqGxw/zB7sqxo6zPtc2zu+G199PDbWtmcy5leHQzw/zB7sC0vfjQ0M/g06a1xCYjMjY2ODQ7yr27r6GjPHN0cm9uZz7O0sPHv8nS1NTayuTI621rZnPD/MHuuvPBrND4sLTPwsG9uPZ0YWK8/KOsvs2/ydLUsum/tDwvc3Ryb25nPjxzdHJvbmc+bWtmc9ans9a1xM7EvP4mIzI2Njg0O8q9wcuhozwvc3Ryb25nPtLUz8LKx87StcS1xM+1zbPJz21rZnPWp7PWtcTOxLz+z7XNsyYjMjY2ODQ7yr2jujwvcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20141011/2014101109103961.png" alt="\">

其中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,然后使用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。

相关内容