Linux云计算集群架构师
第十三章Linux文件系统结构
本节所讲内容:
13.1硬盘结构
13.2文件系统结构
13.2硬链接和软链接
13.4实战:解决磁盘有空间但创建不了文件-修复服务器文件系统
13.1硬盘结构
文件系统结构,理解文件系统,要从文件储存说起。
硬盘结构:
互动:磁盘内部是真空的吗?是:1,不是:2
磁盘内部不是真空,只不过里面的空气很干净。如果是真空,还不利于散热,会造成内部气体膨胀影响磁头的稳定性。
还有一些硬盘里面不是普通空气,而是惰性气体:氦(hai害)气。它的好处是密度比空气小,可以减小磁盘转动阻力。但是充满氦气磁盘如果漏气会就损坏(常见于企业级)。
磁盘相关专业术语:
硬盘的内部是金属盘片,将圆形的盘片划分成若干个扇形区域,这就是扇区。若干个扇区就组成整个盘片。为什么要分扇区?是逻辑化数据的需要,能更好的管理硬盘空间。以盘片中心为圆心,把盘片分成若干个同心圆,那每一个划分圆的“线条”,就称为磁道。
硬盘内的盘片有两个面,都可以储存数据,而硬盘内的盘片往往不止一张,常见的有两张,那么,两张盘片中相同位置的磁道,就组成一个“柱面”,盘片中有多少个磁道,就有多少个柱面。盘片两面都能存数据,要读取它,必须有磁头,所以,每一个面,都有一个磁头,一张盘片就有两个磁头。
硬盘的存储容量=磁头数×磁道(柱面)数×每道扇区数×每道扇区字节数。
磁道从外向内自0开始顺序进行编号,各个磁道上的扇区数是在硬盘格式化时确定的。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存字节(相当于0.5KB)。
比较古老的CHS(Cylinder/Head/Sector:磁头(Heads)、柱面(Cylinder)、扇区(Sector))结构体系.因为很久以前,在硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数,由此产生了所谓的3D参数,即是磁头数(Heads)、柱面数(Cylinders)、扇区数(Sectors)以及相应的3D寻址方式。
互动:如上的磁盘结构有没有问题???
这种结构有问题:
以前老式的磁盘,每个磁道的扇区都一样,这样外磁道整个弧长要大于内部的扇区弧长,因而其磁记录密度就要比内部磁道的密度要小。最终,导致了外部磁道的空间浪费。
如查你磁盘设计工程师,你打算怎么解决?你选择下面哪种方法?
方法1:每个磁道的宽度不一样,从而让每个扇区面积尽量一样
方法2:不再一刀切,让磁道中的扇区数量可以不一样
现在硬盘都采用这种技术:ZBR(ZonedBitRecording)区位记录(Zonedzōnd)
Zoned-bitrecording(ZBR区位记录)是一种物理优化硬盘存储空间的方法,此方法通过将更多的扇区放到磁盘的外部磁道而获取更多存储空间。
ZBR磁盘扇区结构示意图
互动:从外面读数据快?还是从里面快?里:1外:2
使用ZBR区位记录法做的磁盘有以下特点:读外圈的数据快,读内圈的数据慢,所以测试硬盘经常看到读取速度越来越慢的曲线图就很正常了。
互动:windows安装系统的C盘或Linuxboot分区一般安装在磁盘最外面还是最里面?
windows:C盘安装最外,速度也是最快
Linux:boot分区和swap分区,装最外面
磁盘写数据时,先从外面往里。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是1kb(连续2个“sector扇区”组成一个“block块”),(4kb块字节就是8个“sector扇区”组成),一个扇区是字节。
[root
xuegod63~]#stat/etc/passwd#查看Linux系统的“块block”大小文件:"/etc/passwd"
大小: 块:8IO块:字节=4KB普通文件
Windows文件右击属性查看大小:说明我的windows的NTFS文件系统中默认的簇大小为4KB
Windows里的簇相当于linux中的block块,都是文件的最小存取单位,由多个扇区组成。
13.2文件系统结构
Linux文件系统由三部分组成:文件名,inode,block
Linux文件系统:ext3,ext4,xfs
windows文件系统:FAT32,NTFS
13.2.1文件名
[root
xuegod63~]#cp/etc/passwda.txt[root
xuegod63~]#lsa.txt#a.txt就是文件名13.2.2inode的内容
inode包含文件的元信息,具体来说有以下内容:
*文件的字节数
*文件拥有者的UserID
*文件的GroupID
*文件的读、写、执行权限
*文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
*链接数,即有多少文件名指向这个inode
*文件数据block的位置
可以用stat命令,查看某个文件的inode信息:
[root
centos60~]#echoLANG#查看语言环境变量[root
centos60~]#LANG=en_US.UTF-8#语言环境变量改为英文[root
centos60~]#LANG=zh_CN.UTF-8#语言环境变量改为中文[root
xuegod63~]#stata.txtFile:‘a.txt’
Size: Blocks:8IOBlock:regularfile
Device:h/d Inode:Links:1
Access:(/-rw-r--r--)Uid:(0/root)Gid:(0/root)
Access最近访问时间:-05-:55:36.+
Modify最近更改时间:-05-:55:36.+
Change最近改动时间:-05-:55:36.+
Birth创建时间:-
[root
xuegod63~]#ll/etc/passwd #ll其实就是查看passwd的inode信息-rw-r--r--.1rootrootSep/etc/passwd #ll查看到时间是mtime时间(文件内容修改时间)
互动:
ctime是什么?是创建时间吗?不会:1
mtime:modifytime修改文件内容的时间
atime:accesstime访问文件内容的时间
ctime指inode上一次文件属性变动的时间,changetime。比如:chmod+xa.sh
mtime指文件内容上一次变动的时间,modifytime。
如:echoaaa.sh或vima.sh修改内容
atime指文件上一次查看文件的时间,accesstime。如:cata.sh
例2:测试mtime时间,黑客先修改时间,再植入木马程序,防止find/-mtime查看木马文件
[root
xuegod63~]#stata.txt #查看时间[root
xuegod63~]#date-s13:42#修改时间[root
xuegod63~]#vima.txt #写入aaaa[root
xuegod63~]#stata.txt #查看时间[root
xuegod63~]#chmod+xa.txt注意:这里的思路是先改时间,然后修改文件,最后恢复时间,这样你按时间查找文件,就找不到
[root
xuegod63~]#hwclock-s#以硬件时间为准,同步到系统时间[root
xuegod63~]#yum-yinstallntpdate[root
xuegod63~]#ntpdatentp1.aliyun.解决方案1:删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
解决方案2:在/data备份好一些文件,然后删除这些文件,释放一些inode,然后创建一个文件夹/data/cache2。在cache2下挂载一个新分区:sda4,下次写数据需要写到新分区cache2目录下。
inode分区完后,可以增加吗?不可以。inode总数是在格式化时定下来。有兴趣的可以自行扩展
13.4.2实战:修复服务器文件系统
实战场景:公司服务器突然断电后,再次启动后,报如下错误。
解决方法:
fsck(英文全拼:filesystemcheck)
命令用于检查与修复Linux档案系统,可以同时检查一个或多个Linux档案系统。
输入root密码
输入密码后,报错是哪个分区坏了,就修复哪个分区,修复的时候,可能会丢失数据,如果有重要数据的话,一定要和领导说一声。
fsck-f-y/dev/sda1#把引导分区文件系统修复一下#慎用,给领导说一声
fsck-f-y/dev/sda3#把根分区文件系统修复一下#慎用,给领导说一声
reboot重启
fsck参数:
-y对所有问题都回答"yes"
-f即使文件系统标记为clean也强制进行检查
总结:
13.1硬盘结构
13.2文件系统结构
13.2硬链接和软链接
13.4实战:解决磁盘有空间但创建不了文件-修复服务器文件系统