文件系统:
block:
文件系统以block为单位,一般大小为1024bytes(1k)或2K或4K。块的出现用以提升读写性能,一般来讲不到一个block的文件也以一个block来存储,虽然浪费,但是比起速度来讲还是很值得
inode
一个大的文件包含多个block,block在磁盘上分散,如果不予以指针,每次读取需要扫描整个磁盘。所以inode中主要记录了元数据(inode号、文件类型、权限、文件所有者、大小、时间戳等)另外最重要的是还存储了指向属于该文件的block的指针
bmap
在写入文件的时候,如果需要找出空闲的block而整个磁盘扫描的话就会很慢,bmap能够标识block,从而更快的找出空闲的block,bmap的一个字节能够标识8个block,bmap自身需要占用一些block
inode表
用一个1k的block来存储一个128字节的inode太浪费了。所以将ionde组合起来成为inode表(ionde table)来存储,当一个文件系统创建时,所有的inode已经成为ionde表的形式进行管理了
块组(block group)
bmap和inode表都需要存储空间,如果数据大了,也需要不小的存储空间来存储,主要是解析起来也慢,所以利用块组来进行优化。每个组中都存有本组的inode table范围, bmap等。块组的大小根据一个block的大小能够标识多少个block来划分,一个完整占用的bmap能够标识1024*8=8192个block(这些block存储数据区和元数据区)。所以一个块组的大小大概是8M
超级块(superblock)
用以存放一个文件系统究竟存放了多少个块组,每个块组又有多少block和多少inode号等等信息,还有本间系统本身的属性信息如各种时间戳。block总数量和空间数量、inode总数量和空闲数量,以及当前文件系统是否正常等等。用df -hT命令就能读取每个文件系统的超级块。超级块对文件系统及其重要,超级块的丢失或者损坏都将会导致文件系统的损坏,所以一般会在多个块组中备份。ext家族的文件系统可以使用dumpe2fs -h来获取
磁盘Raid
Raid0
Raid0至少需要两块磁盘,将一个数据切割,写入到两个磁盘的block上。这样做能大大提高磁盘的读写能力。但是坏处是非常的不安全,当有一个磁盘损坏,另一块磁盘因为数据的不完整,也随之废弃。
Raid1
Raid1至少也需要两块磁盘,将一个数据同时写入到两个磁盘的block上,就相当于将一份数据复制成两份写到不同的磁盘上。这样做的好处是大大提高了磁盘的安全性,即使一块磁盘损坏了,另一块磁盘也能立刻投入工作。缺点是:增加了磁盘的成本的同时,容量却没有增大,仅仅只有一个磁盘的容量。另外虽然写入磁盘的速度不变,但是同时又系统调用IO写入磁盘的压力就会变大,增加了系统的压力。另外理论上来说,读的速度和Raid0的速度是一样的
Raid10
Raid10至少需要4块磁盘,如字面意思先对两两磁盘进行Raid1操作,形成两个Raid1,再对两个Raid1进行Raid0操作。这样当数据写入的时候,就能分片写入到Raid1中,Raid1又会对其进行“备份"。即使一个Raid1中的一个磁盘废弃,这样也不会导致数据的丢失,除非同组的Raid1全部报废,那么就会造成数据的丢失。所以,这样大大提高了数据的安全和读写速度
Raid01
Raid10至少需要4块磁盘,如字面意思先对两两磁盘进行Raid0操作,形成两个Raid0,然后对这两个Raid0进行Raid1操作。
这种方案安全性完全得不到保证,因为一个Raid0中的磁盘损坏,这个Raid0就会损坏,读写压力也就完全的到了另外一个RAID0上。所以这种方案很少人使用,基本可以忽略。