《鸟哥的私房菜》一书中有对文件系统的详细介绍,对于了解整个linux系统文件管理有很大用处。文中也提到了很多文件挂载、卸载、分区的命令,需要自己亲手实践才能很好把握,建议搞一个虚拟机,然后按照说明将各种命令或者是操作流程走一边,相信对于linux初学者来说会收益匪浅的。
这里记录一下硬盘的结构,供咱们初学者来了解:
1、物理组成
就物理组成来说,硬盘由多个硬盘盘片组成,每个硬盘盘片上都有一个磁头(Head)进行该硬盘盘片的读写工作,当磁头固定不动,硬盘盘片旋转一周所走轨迹就是磁道(Track)。所有硬盘盘片上同一段磁道组成了磁柱(Cylinder)。一段磁道就是硬盘分区时的最小单位,即扇区(Sector),是最小的硬盘储存物理量,通常为512 bytes。这就是整个硬盘的结构。
2、从文件系统(Filesystem)来了解硬盘
在进行硬盘格式化或分区时,需要知道有关硬盘的一些基本名词定义。
a、主引导扇区(Master Boot Recorder,MBR):主引导扇区可以说是一块硬盘中最重要的地方,因为它记录了所有硬盘的分割信息,以及启动时可进行启动管理程序的写入等,如果一块硬盘的MBR死掉了,那么这块硬盘几乎就报废了。MBR有什么限制呢?它最大的限制就在于它不够大,不足以储存所有的信息,仅能提供最多4个分区的记忆,这就是主分区(P)与扩展分区(E)数量之和最多只能有4个的原因。所以,如果您预计的分区超过4个,那么势必需要使用3P + 1E的结构,并且将所有的剩余空间都拨给扩展分区(记住,扩展分区最多只能有一个),否则3P + 1E之后的剩余空间就都浪费了。不过,如果仅是分割出1P + 1E,则剩下的空间还能再分出两个分区。
b、块(Block):文件在磁盘中会被存储在一个固定大小的块中,即Block,Block的大小通常为2的次方,另外,由于磁盘的扇区物理量通常为0.5K(512Bytes),所以Block通常设为0.5K的整数,EXT2预设Block为4K就是一个例子。其中需要特别留意的地方是,一个Block最多仅能容纳一个文件,所以当一个文件不足4K,例如大小仅为1K时,剩下的3K容量将被浪费,这与inode有一定的关联。因此,在规划您的磁盘时,需要留意主机的用途。与此同时,若Block规划得太小,则磁盘的Block数量会大增,造成inode在指向Block时搜寻时间大大增加,又会造成大文件读写效率低下,这也与inode有一定程度的关联。需要特别留意的是,当系统读取了某一个文件,则该文件所处Block信息会被加载到内存中,所以该磁盘块会被放置在主存储器的高速缓存区中。若这些块数据被改变,刚开始只有主存储器的块数据会被改变,且缓存区中的块数据会被标记为Dirty,而此时磁盘物理Block尚未被修正,所以,这些“Dirty”块的数据必须写到磁盘中,以保证磁盘物理Block上的数据与主存储器中的块数据的一致性。这也是当Linux系统非正常关机,或者突发性
地跳电时,总是会造成系统耗费大量时间用于磁盘检验的原因。
c、superblock:进行硬盘分区时,每个磁盘分区就是一个文件系统(filesystem),而每个文件系统起始位置的Block就称为superblock。superblock的作用是存储诸如文件系统的大小、空Block和填满的Block,以及各自总数和其他诸如此类的信息,也就是说,当您要使用这个磁盘分区(或者说是文件系统)进行数据存取的时候,第一个要经过的就是superblock块,所以,superblock坏了,您的这个磁盘分区也就回天乏术了。
d、inode: 上一章提到了很多inode概念,这里再补充一些。对于文件系统而言,一个inode是inode tables中的一个项。inode包含了所有文件相关的信息,如名称、大小、连接的数量、数据建立日期、修改及存取时间等。它也包含了磁盘Block的文件指针(pointer)。指针用来记录文件的存储位置。要规划inode,可以使用mke2fs工具。
记住,每个文件系统就是一个磁盘分区
对于磁盘方面的命令有很多,列举如下:
1、磁盘分割与格式化
fdisk:磁盘分区工具
e2label:修改磁盘的label(表头名称),也就是磁盘代号
mke2fs:linux下重要的格式化工具
2、检查硬盘坏轨与数据同步写入
fsck:检查磁盘坏轨,修复磁盘。一般突然掉电之后不能正常登录系统都是使用这个命令在命令行模式下修复。
sync:将内存中的数据同步写入硬盘。
3、关于启动盘
mkbootdisk:制作启动软盘
fdformat:用来低级格式化软盘
4、硬盘的装载
这里的命令很常用。
mount:挂载磁盘。
如:常用的mount -t type /dev/sdaxxx /mountpoint
type为挂载的文件格式:ntfs,vfat,msdos,ext2,ext3等
/dev/sdaxxx为要挂载的设备名,即磁盘分区或者是其他软盘、外接设备等
/mountpoint为挂载点,即具体要挂载在哪个目录下
umount:卸载挂载的文件系统,卸载后可以使用df -h查看是否卸载成功。
5、磁盘效能测试与使用
hdparm:测试缓存区cache、硬盘等的存取效能。
介绍几个常用硬盘操作的流程:
1、安装新硬盘
[root @test / ]# fdisk /dev/sda
.......(以下省略!直接用fdisk分割硬盘)
[root @test / ]# mke2fs /dev/sda1
Linux中的format是mke2fs这个指令
上面的指令将您的硬盘分区格式化成Linux的ext2格式
[root @test / ]# mkdir /disk2
建立一个目录名为/disk2,预计用来装载您的新硬盘
[root @test / ]# mount -t ext2 /dev/sda1 /disk2
将硬盘挂上Linux系统
重复后三个步骤将/dev/sda2,/dev/sda3,......都格式化并挂载
2、设定启动实时装载
就是修改文件/etc/fstab,此处不详述
3、建立与装载虚拟内存文件
如果我们的虚拟内存swap不够大,怎么才能扩大这个交换空间呢。,一个好的方法就是再从硬盘中划分出一块交给swap使用。
流程如下:
a、以dd指令建立swapfile;
b、以mkswap将swapfile格式化为swap文件格式;
c、以swapon启动该文件,使之成为swap;
d、以swapoff关闭该文件。
比如要为swap增加一个64M的空间,根据上面流程如下设置:
A、[../root]#dd if=/dev/zero of=/tmp/swap bs=4k count=16382
dd指令用来转换文件并用于复制目的;
if指的是要被转换的输入文件格式,/dev/zero可以使用man zero查看内容;
of指的是输出文件,我们将之输出到/tmp/swap文件;
bs指的是一个分区占用多少KB;
count指的是要用多少个bs,所以最后的容量为bs*count = 4k*16382(约为64MB)
/tmp/swap即新建的swapfile文件。
/tmp/zero是像/dev/null一样, 也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.
B、[../root]#mkswap /tmp/swap
C、[../root]#swapon /tmp/swap
在执行这一步前后可以使用free -m来查看swap是否增加了
D、[../root]#swapoff /tmp/swap
如果想要去掉新增的swap,可以使用这个命令
以上这些东西只是用眼去看的话很难有什么效果的,只有一步步亲手实践了才能更好掌握。
阅读(1774) | 评论(0) | 转发(0) |