磁盘的结构:
磁盘的外部结构包括电源结构、数据接口、控制电路板、固定面板。如下图所示:
磁盘的内部结构包括磁头组件、磁头驱动机构、磁盘片、主轴组件、前端控制电路
磁盘控制电路中包括:主控制芯片、数据传输芯片、高速数据缓存芯片;
磁盘的磁头:采用了非接触式结构,加电后悬浮在高速旋转的磁盘表面;
磁盘的磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这个圆形轨迹就叫磁道。
磁盘的柱面:磁盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
磁盘的扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段就被称为磁盘的扇区。
磁盘容量的计算:header(磁头量)*cylinder/header(每个header负责的柱面)*sector/cylinder(每个柱面上包含的扇区数)*512bytes/sector(每个扇区上容纳的字节数)。因此磁盘的计算方式为:Header*Cylinder*Sector*512Bytes
磁盘工作原理:磁盘利用特定的磁粒子的极性记录数据,读取数据时将不同极性转换成不同的电脉冲信号,再利用数据转换器将原始信号变成电脑可以使用的数据。写数据时正好相反。
磁盘的主要参数:容量、转速、平均寻道时间、数据传输率
磁盘中的第一扇区
磁盘中的第一扇区非常重要,主要记录了两种重要信息:
第一种是:主引导分区(Master Boot Record ,MBR)可以安装引导加载程序的地方,446Bytes。
第二种是:分区表,记录整块分区磁盘的状态。 64bytes。还剩下2bytes,装的是magic number。
磁盘分区表
在分区表所在的64bytes容量中,总共分为4组记录区,魅族记录区记录了该区段的起始与结束的柱面号码,这四个分区被称为主分区或者扩展分区。
既然第一个扇区所在分区表只能记录四条数据,那么我们可以利用额外的扇区来记录更多的分区信息。
扩展分区的目的是使用额外的扇区记录分区信息,扩展分区本身并不拿来格式化。
开机流程与主引导分区
BIOS:开机主动执行的韧体,会认识第一个可开机的设备。
MBR:第一个可开机设备的第一个扇区内的主引导分区块,内包含引导加载程序。
引导加载程序(Boot loader):一支可读取内核文件来执行的软件。
内核文件:开始操作系统的功能。
开机流程:首先是硬件上电自检,待检测完毕之后,系统会自动载入BIOS。接下来BIOS会分析目前系统中包括哪几种存储介质。以硬盘为例,BIOS会依据用户的设置取得能够开机的硬盘,并且到硬盘里面去读取第一个扇区的MBR位置。MBR这个仅有446bytes的硬盘里面会放置最基本的引导加载程序,主要是将内核文件加载进来。
其中boot loader是在MBR之上的一层软件,主要功能包括:1.提供菜单,2.载入内核文件,3.转交其他loader。
5.linux的文件系统
linux系统中的文件数据除了文件实际内容外,通常含有非常多的属性。文件系统通常会将这两部分的数据分别存放到不同的块,权限与属性放置到inode中,至于实际数据则放置到data block中。另外还有一个超级块会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量。
super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息。
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
block:实际记录文件的内容,若文件太大时,会占用多个block。
对于data block中的限制为:
1.原则上,block的大小与数量在格式化完就不能够在改变了(除非重新格式化)
2.每个block内最多只能够放置一个文件的数据
3.乘上,如果文件大于block的大小,则一个文件会占用多个block数量。
4.乘上,如果文件小于block,则该block的剩余空间就不能够再使用了。
对于inodetable(inode 表格)
1.该文件的访问权限(rwx)
2.该文件的所有者与组(owner/group)
3.该文件的大小
4.该文件创建或状态改变的时间(ctime)
5.最近一次的读取时间(atime)
6.最近修改的时间(mtime)
7.定义文件特性的标识(flag)
8,该文件真正内容的指向
除此之外inode的特色:
1.每个inode大小均固定为128bytes。
2. 每个文件都仅会占用一个inode。
3.因此能够创建的inode的数量与文件中block的数量是相对应的。
4.系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。
下面来聊一下文件创建、删除、复制、剪切等操作,在linux所属的文件系统中,这些操作是如何完成的。
文件的查找过程 ——举例来讲:/var/logs/messages
文件系统会找到存放根目录的inode号,通过该inode号找到data block中的根目录,在根目录下存放着它目录下面的一系列的文件名,找到了一个叫var的目录名,同时也找到了该目录的inode号(暂时叫i_var),此时从inode表中去查找i_var中对应的data block的block块;然后查询该块的内容,查到一个文件叫logs的目录,同时也找到了该目录的inode号(暂时称为i_log),再次从inode表中去查询i_log对应的data block块,找到对应的该块,查询里面的内容,发现了一个叫messages的文件,同时也找到了该文件的inode号,然后根据此inode号找到对应data block块。至此找到了该文件。
文件的创建过程:
过程如同上述,当找到logs目录时,此时它会查找inode bitmap,查找空闲的inode。
6.linux的挂载点与文件系统的简单操作
将文件系统与目录树结合的操作称为挂载。挂载点一定是目录,该目录是进入该文件系统的入口。因此并不是你有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能使用该文件系统。
df:列出文件系统的整体磁盘用量 -h,以人们容易阅读的方式进行显示 -i 显示inode节点数
du:评估文件系统的磁盘使用量 -h:同上, -s,列出目录总量 -a:列出文件
dumpe2fs 显示每个区段以及data block的信息 -h 设备文件名
7.链接文件
硬链接:hard link只是在某个目录下新建一条文件名连接到某个inode号码的关联记录而已。
1.只能对文件创建,不能应用于目录。
2.不能跨文件系统
3.创建硬链接会增加文件被链接的次数。
软链接:symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。
1.可应用与目录。
2.可以跨文件系统。
3.不会增加被链接文件的链接次数。
4.其大小为指定的路径所包含的字符个数。
命令: ln -sv src dest
8.设备文件:与系统外设及存储等相关的一些文件,通常都集中在/dev目录下。
b:按块为单位,随机访问的设备; 硬盘;随机地在硬盘的不同块读写
c:按字符为单位,线性设备; 键盘 ;一次性读取,不能截断。
/dev目录下代表的不是
主设备号(major number) 标识设备类型
次设备号(minor number)标识同一类型中不同设备
mknod [OPTION]... NAME TYPE [MAJOR MINOR] -m MODE
9.硬件设备的设备文件名
IDE,ATA:hd
SATA: sd SCSI: sd USB:sd
a,b,c...来区别同一种类型下的不同设备。
hda: hda1:第一个主分区 had2,had3,had4,hda5:第一个逻辑分区
查看当前系统中识别了几块硬盘
fdisk -l [/dev/to/some_device_file]
10.文件系统和VFS
常见的文件系统包括:
传统文件系统:ext2,iso9660..
日志文件系统:ext3/ntfs...
网络文件系统:nfs..
linux管理文件系统是通过VFS进行管理。
11.磁盘的分区、格式化、检验与挂载
新增一块磁盘时,需要进行的操作包括:
1.对磁盘进行分区,以新建可用的分区。
2.对该分区进行格式化,以创建系统可用的文件系统。
3.若想要仔细一点,则可对刚才新建好的文件系统进行检查。
4.在linux系统上,需要创建挂载点(也就是目录),并将它挂载上来。
12.常用命令
1.磁盘分区
fdisk 【-l】 设备名称 : 查阅系统内的所有分区有哪些
partprobe:强制让内核重新找一次分区表 cat /proc/partitions
因为磁盘无法卸载,所以内核无法重新取得分区表信息,因此此时系统会要求我们重新启动(reboot)以更新内核的分区表信息才行。
2.磁盘管理
文件系统管理
mkfs : make file system
-t FSTYPE
mkfs -t ext2 = mkfs.ext2
mkfs -t ext3 = mkfs.ext3
专门管理ext系列文件:
mke2fs
-j:创建ext3类型文件系统
-b BLOCK_SIZE:指定块大小,默认为4096;可以取值为1024,2048,4096;
-L LABEL 执行卷标;
-m #:指定给预留给超级用户的块数百分比
-i # :用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍;
-N:指定inode数
-F:强制创建文件系统
-E:用户指定额外文件系统属性
blkid:查询或查看磁盘设备的相关属性
UUID TYPE LABEL
e2label:用于查看或定义卷标
e2label 设备文件 卷标:设定卷标
tune2fs:调整文件系统的相关属性
-j: 不损害原有数据,将ext2升级为ext3;
-L LABEL: 设定或修改卷标;
-m #: 调整预留百分比;
-r #: 指定预留块数;
-o: 设定默认挂载选项;
acl
-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
-i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
-l: 显示超级块中的信息;
dumpe2fs: 显示文件属性信息
-h: 只显示超级块中的信息
fsck: 检查并修复Linux文件系统
-t FSTYPE: 指定文件系统类型
-a: 自动修复
e2fsck: 专用于修复ext2/ext3文件系统
-f: 强制检查;
-p: 自动修复;
挂载:将新的文件系统关联至当前根文件系统
卸载:将某文件系统与当前根文件系统的关联关系予以移除
mount 设备 挂载点
设备: 设备文件:/dev/sda5 卷标:LABEL=“” UUID :UUID=""
挂载点:目录
要求:1.此目录没有被其他进程使用
2.目录得事先存在
3.目录中的原有的文件将会暂时隐藏
mount:显示当前系统已经挂载的设备及挂载点
mount [options] [-o options] DEVICE MOUNT_POINT
-a 表示挂载/etc/fstab文件中定义的所有文件系统
-n 默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab中,使用-n选项意味着挂载设备时,不把信息写入此文件。
-t FSTYPE:指定正在挂载设备上的文件的类型;不使用此选项时,mount会调用blkid命令获取对应文件系统的类型。
-r:只读挂载,挂载光盘时使用此选项
-w:读写挂载
-o:指定额外的挂载选项,也即指定文件系统启用的属性。
remount:重新挂载当前文件系统
ro:挂载为只读
rw:读写挂载
挂载完成后,通过挂载点访问对应文件系统上的文件。
umount:卸载某文件系统
umount 设备 umount 挂载点
注意事项:挂载的设备没有进程使用
1、创建一个2G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%;挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能;
1.创建分区:fdisk /dev/sda8
2. 分区格式化:mke2fs -L DATA -b 1024 -m 8 /dev/sda8
3.挂载: mount -o acl LABEL=DATA /backup
2. 将此文件系统的超级块中的信息中包含了block和inode的行保存至/tmp/partition.txt中;
tune2fs -l /dev/sda1 | egrep 'inode|block'
dumpe2fs -h /dev/sda1 | grep -E 'inode|block'
cp -R /etc/* /backup
tune2fs -j /dev/sda8
4、调整其预留百分比为3%;
# tune2fs -m 3 -L DATA /dev/sda8
5、以重新挂载的方式挂载此文件系统为不更新访问时间戳,并验正其效果;
# stat /backup/inittab
# cat /backup/inittab
# stat
# mount -o remount,noatime /backup
# cat
# stat
6. 对此文件系统强行做一次检测;
e2fsck -f /dev/sda8
7、删除复制而来的所有文件,并将此文件系统重新挂载为同步(sync);而后再次复制/etc目录中的所有文件至此挂载点,体验其性能变化;
rm -rf /backup/*
mount -o remount,sync /backup
cp -R /etc/* /backup
13.开机挂载/etc/fstable和/etc/mtab
1.规则:
1.根目录必须挂载,且一定要先于其他挂载点被挂载出来。
2.其他挂载点必须为已新建的目录,可任意指定,弹药遵从系统目录架构原则。
3. 所有挂载点在同一时间之内,只能挂载一次。
4.所有分区在同一时间之内,只能挂载一次。
<file system> <mount point> <type> <options> <dump> <pass>
2.挂载光盘文件
mount -o loop mount设备 mount point
14.内存交换空间swap
1. mkswap /dev/sda8 -L LABEL
swapon /dev/sda8
swapoff /dev/sda8
2.fuser: 验正进程正在使用的文件或套接字文件
-v: 查看某文件上正在运行的进程
-k:
-m
fuser -km MOUNT_POINT:终止正在访问此挂载点的所有进程