linux学习笔记(7)文件系统
文件目录
7.1 文件系统类型
7.2 EXT4文件系统
7.2.1 文件记录方式
7.2.2 文件系统的理解
7.3 Linux中的inode
7.3.1 inode实验
7.4 Linux中的block
7.5 Linux中的superblock
7.6 文件链接
7.6.1 软链接
7.6.2 硬链接
7.7 RAID
7.1 文件系统类型
-
windows:FAT16、FAT32、NTFS
-
LINUX:EXT3、EXT4、XFS
7.2 EXT4 文件系统
- 索引(index)文件系统
- EXT3:文件系统最大16TB
- EXT4:文件系统最大16TB
- XFS:文件系统最大100TB
7.2.1文件记录方式
无论是磁盘还是固态硬盘,它们肯定不知道文件的存在,它们只是有一些可以用来存储数据的单元,通过一些协议与操作系统进行交互。文件和文件夹是操作系统对磁盘的抽象,这个抽象允许用户以更加清晰明确简单的方式管理磁盘中的数据。
所以操作系统需要一种手段来和底层存储设备交互,Linux中将文件统统抽象成inode
和block
,block
记录文件实际的数据,inode
记录文件的属性、权限、存储内容的block块等数据。
inode
与文件是一对一关系,它的大小固定为128bytes
,而block
与文件是多对一关系,也就是说一个文件可以被存储在多个block
中,block
的大小一般为1K、2K、4K(在Ext2文件系统中)。每个inode
和block
都有一个唯一的编号。
如下图,有一个文件对应着inode4,inode中记录着该文件的数据被存储在编号为2、7、13、15的block中:
——转自https://www.cnblogs.com/lilpig/p/16138677.html
7.2.2对文件系统的理解
-
硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。新买来的硬盘,通常要对其进行分区并格式化,分区就如同把一个大柜按照要求分割成几个小柜子(组合衣柜);格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性(比如衣服是谁的,衣服的颜色、大小等)。
-
对硬盘进行格式化,只是清除了硬盘中的数据,其实不然,*格式化过程中还向硬盘中写入了文件系统。*因为不同的操作系统,管理系统中文件的方式也不尽相同(给文件设定的属性和权限也不完全一样),因此,为了使硬盘有效存放当前系统中的文件数据,就需要将硬盘进行格式化,令其使用和操作系统一样(或接近)的文件系统格式。
——转自http://c.biancheng.net/view/880.html
7.3 Linux中的inode
-
记录文件的属性(文件的元数据metadata)
- 文件的属性,大小,权限
- 文件的属组,属主
- 文件的连接数,块数量,块的编号
-
一个文件占用一个inode,同时记录此文件数据所在的block number
-
inode大小为128bytes
-
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode_table),存放inode所包含的信息(下图所示inode_table)。
注释:
-
当你存储一个文件之前,Linux系统会找到文件所对应的inode number。然后根据这个文件的inode number读取到相对应的inode table。由inode table中的“pointer”可以知道文件存放在哪几个block才能存储这个文件。
-
inode table记录这个inode number对应文件所对应的metadata(元数据)。
-
metadata的主要作用是描述资料的属性。
-
其中的“pointer”,记录了这个文件占用了哪几个block。
7.3.1 实验:创建文件,观察inode信息
touch 1.txt
ls -l -i 1.txt
- 图中11为inode号
- 观察inode数量
df -i | grep sde1
/dev/sde1自己使用了11个,剩下65525个可以用
- 再继续创建一个文件2.txt,继续观察inode数量发现已用数量增加一个
- inode数量决定了文件系统中文件的数量
创建65527个空文件
[root@localhost disk4]# touch file{1..65527}
touch: 无法创建"file65527": 设备上没有空间
无法创建原因:inode数量不够。
[root@localhost disk4]# ls -l |wc -l //进行文件计数
65527
[root@localhost disk4]# df -i | grep sde1
/dev/sde1 65536 65536 0 100% /mnt/disk4
[root@localhost disk4]# touch aa.txt
touch: 无法创建"aa.txt": 设备上没有空间
- inode虽然满了,但可以往里面的文件写东西,因为block决定文件的存储空间。
7.4 Linux中的block
- 存储文件的实际数据
- 实际存储文件的内容,若文件较大,会占用多个block
- block大小默认为4k
7.5 Linux中的superblock
- block和inode的总量
- 未使用与已使用的inode/block
7.6 文件链接
7.6.1 软链接
- symbolic link / 软连接
- 也叫符号链接
1、创建一个文件,并输入内容
echo 'hello world' > /file1
ln -s /file1 /root/桌面/file
- ln命令来自于英文单词link的缩写,中文译为“链接”,其功能是用于为某个文件在另外一个位置建立同步的链接。Linux系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic link)。
ln -s /file1 /root/桌面/file
//为指定的源文件创建快捷方式(设定为软连接形式):
- 软连接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软连接文件也将无法使用,而硬链接则是通过将文件的inode属性块进行了复制 ,因此把原始文件移动或删除后,硬链接文件依然可以使用。
2、观察软链接
[root@localhost /]# ls -l /root/桌面/file
lrwxrwxrwx. 1 root root 6 7月 17 14:34 /root/桌面/file -> /file1
- 查看链接(/root/桌面file)的属性,发现其类型为 l
3、查看两个文件,内容一致
4、删除源文件,软链接闪烁,不可用
注释:/root/桌面/file -> /file1 中的 /file1会一直闪烁。
总结
- 软连接像快捷方式,可以对文件和目录做软连接
- 软连接记录源文件的绝对路径
- 软连接失去源文件不可用
7.6.2 硬链接
1、创建同分区硬链接成功,创建不同分区硬链接失败
ln /file2 /file2-h1
// -s 代表软连接
- ls -l 中的2和3代表的是连接数 一个文件有几个链接显示几
总结
-
硬链接的inode号相同,但不占用block。
-
硬链接只能针对文件做,不能对目录做。
-
硬链接只能在同分区做。
[root@localhost ~]# ln /file2 /mnt/disk4/file-h3
ln: 无法创建硬链接"/mnt/disk4/file-h3" => "/file2": 无效的跨设备连接
7.7 RAID
7.7.1 RAID简介
-
RAID:廉价磁盘冗余阵列(Redundant Array of Independent DIksks)。
-
作用:提升容错率,提升读写速率。
7.7.2 RAID类型
1、RAID0
- RAID0 是一种非常简单的的方式,它将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。
- RAID0 的读写性能理论上是单块磁盘的N倍(仅限理论,因为实际中磁盘的寻址时间也是性能占用的大头)
- 缺点:它并不提供数据校验或冗余备份,因此一旦某块磁盘损坏了,数据就直接丢失,无法恢复了。因此RAID0就不可能用于高要求的业务中,但可以用在对可靠性要求不高,对读写性能要求高的场景中。
2、RAID1
- RAID1 是磁盘阵列中单位成本最高的一种方式。因为它的原理是在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,那么它的实际空间使用率只有50%了,两块磁盘当做一块用,这是一种比较昂贵的方案。
- 缺点:磁盘的利用率低,成本高。
3、RAID5
-
这是目前用的最多的一种方式。
-
因为 RAID5 是一种将 存储性能、数据安全、存储成本 兼顾的一种方案。
- 在了解RAID5之前,我们可以先简单看一下RAID3,虽然RAID3用的很少,但弄清楚了RAID3就很容易明白RAID5的思路。
-
RAID3的方式是:将数据按照RAID0的形式,分成多份同时写入多块磁盘,但是还会另外再留出一块磁盘用于写「奇偶校验码」。例如总共有N块磁盘,那么就会让其中N-1块用来并发的写数据,第N块磁盘用记录校验码数据。一旦某一块磁盘坏掉了,就可以利用其它的N-1块磁盘去恢复数据。
-
但是由于第N块磁盘是校验码磁盘,因此有任何数据的写入都会要去更新这块磁盘,导致这块磁盘的读写是最频繁的,也就非常的容易损坏。
-
RAID5的方式可以说是对RAID3进行了改进。
-
RAID5的方式,最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块磁盘同时损坏了,那数据就无法恢复了。
-
RAID5模式中,不再需要用单独的磁盘写校验码了。它把校验码信息分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据(通过加入空闲的 Spare 盘,在系统将数据重建至备用驱动器时用户仍可以继续访问数据。它能提供良好的数据安全,但磁盘空间由于热备用磁盘的存在(在其他磁盘出现故障之后才使用)而受到限制。磁盘故障不需要立即处理,因为系统会使用热备用磁盘对自己进行重建,但故障磁盘还是应尽快更换)
4、热备盘(hot spare)
- 热备份(Hot Spare):与CPU系统电连接的硬盘,它能替换下系统中的故障盘。与冷备份的区别是,冷备份盘平时与机器不相连接,硬盘故障时才换下故障盘。
- 当一个正在使用的磁盘发生故障后,一个空闲、加电并待机的磁盘将马上代替此故障盘,此方法就是热备用。热备用磁盘上不存储任何的用户数据,最多可以有8个磁盘作为热备用磁盘。一个热备用磁盘可以专属于一个单一的冗余阵列或者它也可以是整个阵列热备用磁盘池中的一部分。而在某个特定的阵列中,只能有一个热备用磁盘。当磁盘发生故障时,控制器的固件能自动的用热备用磁盘代替故障磁盘,并通过算法把原来储存在故障磁盘上的数据重建到热备用磁盘上。数据只能从带有冗余的逻辑驱动器上进行重建(除了RAID 0以外),并且热备用磁盘必须有足够多的容量。系统管理员可以更换发生故障的磁盘,并把更换后的磁盘指定为新的热备用磁盘。
————————————————
版权声明:本文为CSDN博主「郄子硕-langgeligelang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q290994/article/details/80246378
5、总结
- 对于各种RAID的总结以及用途归纳如下
- 整体对比一下 RAID0、RAID1、RAID5 的几个特征
- Applications:
6、RAID的使用
- 硬RAID:需要RAID卡,有自己的CPU,处理速度快。
- 软RAID:通过操作系统实现,比如Windows,Linux。
7、软RAID的使用
- 准备4块硬盘,RAID5 (3块数据盘 + 1块热备盘)
mdadm命令来自于英文词组“multiple devices admin”的缩写,其功能是用于管理RAID磁盘阵列组。作为Linux系统下软RAID设备的管理神器,mdadm命令可以进行创建、调整、监控、删除等全套管理操作。
mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{b,c,d,e}
//-C 创建RAID
// /dev/md0 第一个RAID设备,要在/dev下
// -l5 表示RAID5
// -n RAID成员数量(数据盘)
// -x 热备盘数量
- 创建RAID
- 格式化,挂载
- 查看RAID信息
mdadm -D /dev/md0
// -D 显示RAID设备的详细信息
-
模拟一块硬盘损坏,并移除
- 移除 /dev/sdb ,出现spare rebuilding
- 检验数据
参考:
https://zhuanlan.zhihu.com/p/51170719
https://zhuanlan.zhihu.com/p/119452913
https://blog.csdn.net/q290994/article/details/80246378