一、文件系统详解
1、名词解释
inode(索引节点):
一个文件占用一个inode,同时记录此文件数据所在的block numbber。inode大小 为 128 bytes
block:
存储文件的实际数据。实际存储文件的内容,若文件较大,会占用多个block。block大小 为默认为4K
superblock:
1 block 与 inode 的总量; 2未使用与已使用的 inode / block 数量;
block group:
块组
2、示例
前提:拥有一个分区(以/dev/sdf1为例)
1.用df -i查看inode节点数
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 478410 495 477915 1% /dev
tmpfs 482667 1 482666 1% /dev/shm
tmpfs 482667 1611 481056 1% /run
tmpfs 482667 16 482651 1% /sys/fs/cgroup
/dev/mapper/centos-root 8910848 156090 8754758 2% /
/dev/sda1 524288 341 523947 1% /boot
tmpfs 482667 6 482661 1% /run/user/42
tmpfs 482667 18 482649 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
/dev/sdf1 25688 11 25677 1% /mnt/sdf1
2.在/mnt/sdf1/中创建一个file.txt文件
[root@localhost ~]# touch /mnt/sdf1/file.txt
3.再使用df -i查看,发现已用由11变为12
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 478410 495 477915 1% /dev
tmpfs 482667 1 482666 1% /dev/shm
tmpfs 482667 1611 481056 1% /run
tmpfs 482667 16 482651 1% /sys/fs/cgroup
/dev/mapper/centos-root 8910848 156090 8754758 2% /
/dev/sda1 524288 341 523947 1% /boot
tmpfs 482667 6 482661 1% /run/user/42
tmpfs 482667 18 482649 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
/dev/sdf1 25688 12 25676 1% /mnt/sdf1
4 创造大量文件。观察inode使用情况。touch file{1…30000}
[root@localhost ~]# touch /mnt/sdf1/file{1..30000}
touch: 无法创建"/mnt/sdf1/file25677": 设备上没有空间
touch: 无法创建"/mnt/sdf1/file25678": 设备上没有空间
touch: 无法创建"/mnt/sdf1/file25679": 设备上没有空间
touch: 无法创建"/mnt/sdf1/file25680": 设备上没有空间
略
5.结论:inode决定了文件系统中文件的数量。
6.之后向目标分区写入大量数据,填满
[root@localhost ~]#dd if=/dev/zero of=/mnt/sdf1/file.txt bs=1k count=100000(分区为100M大小)
7.结论:block决定了文件存储的空间。
二、文件链接:
1、软连接
除了硬链接以外,还有一种特殊情况文件。A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(softlink)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:“No such file ordirectory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
1.创建一个文件,并输入内容。
[root@localhost ~]# echo 111 > /file1
2.建一个软连接。
[root@localhost ~]# ln -s /file1 /home/file11 //-s 软连接
3.观察软连接
[root@localhost ~]# ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
4.观察软连接文件
[root@localhost ~]# ll /file1 /home/file11
-rw-r--r-- 1 root root 4 Dec 20 17:57 /file1
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
5.查看两个文件,内容一致。
[root@localhost ~]# cat /file1
111
[root@localhost ~]# cat /home/file11
111
6.删除源文件,软连接闪烁,不可用。
[root@localhost ~]# rm -rf /file1
[root@localhost ~]# ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
总结:
- 软连接像快捷方式,可以对文件和目录做软连接。
- 软连接记录的只是源文件的路径。
- 软连接失去源文件不可用。
2、硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hardlink)。
[root@youngfit.com ~]# echo 222 > /file2
[root@youngfit.com ~]# ll -i /file2 #-i:显示inode编号
34045994 -rw-r--r-- 1 root root 4 Dec 29 20:52 file2
[root@youngfit.com ~]# ln /file2 /file2-h1
[root@youngfit.com ~]# ll -i /file2 /file2-h1 #查看inode号
34045994 -rw-r--r-- 2 root root 4 7月 30 22:25 /file2
34045994 -rw-r--r-- 2 root root 4 7月 30 22:25 /file2-h1
[root@youngfit.com ~]# rm -rf /file2 #删除源文件
[root@youngfit.com ~]# ll -i /file2-h1 #查看链接文件
34045994 -rw-r--r--. 3 root root 4 Nov 9 15:01 /file2-h1
查看:
[root@youngfit.com ~]# cat /file2-h1
222
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。
反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
注:
- 硬链接不能跨文件系统
- 不支持目录做硬链接
3、面试题
软链接和硬链接的区别:
- 软链接可以跨文件系统,硬链接不可以;
- 软链接可以对目录进行连接,硬链接不可以;
- 删除源文件之后,软链接失效,硬链接无影响;
- 两种链接都可以通过命令 ln 来创建;
- ln 默认创建的是硬链接;
- 使用 -s 参数可以创建软链接。
三、RAID
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
注意:所有服务器在安装操作系统之前必须先做raid【常识】
1、RAID 分类
(1)RAID 0
单独的一个磁盘可以被认为是一个RAID 0 阵列。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有容错功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
读写速率快 100%N,但不容错
(2)RAID 1
RAID 1至少要有两个(只有两个)硬盘才能组成,因此也称为镜像(Mirroring)方式。这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
利用率50%,容错最高
(3)RAID 5
RAID 5 和RAID 3极为相似,都是数据分条,奇偶校验产生冗余。但是,它不采用一个固定的硬盘来存储奇偶校验值,所有数据和校验值都分布在所有硬盘上。RAID5最大的好处是在一块盘掉线的情况下,RAID照常工作,相对于RAID0必须每一块盘都正常才可以正常工作的状况容错性能好多了。因此RAID5是RAID级别中最常见的一个类型。
利用率 (n-1)/n 读写速率快,容错较好
1+1=2 其中某一个损坏,另外两个磁盘可以反推出损坏盘的数据
2、软RAID示例
1.准备4块硬盘。
[root@localhost ~]# ll /dev/sd* //RAID5 :(3块数据盘) + (1块热备硬盘)
2.创建RAID
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{d,e,f,g}
- -C 创建RAID /dev/md0 第一个RAID设备
- -l5 RAID5
- -n RAID成员的数量
- -x 热备磁盘的数量
- 可用空间2G
3.格式化,挂载
[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /mnt/raid5
[root@localhost ~]# mount /dev/md0 /mnt/raid5
[root@localhost ~]# cp -rf /etc /mnt/raid5/etc1
4.查看RAID信息
[root@localhost ~]# mdadm -D /dev/md0 //-D 查看详细信息
/dev/md0:
Version : 1.2
Creation Time : Mon Jan 13 16:28:47 2016
Raid Level : raid5 //raid类型
Array Size : 2095104 (2046.34 MiB 2145.39 MB)
Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB)
Raid Devices : 3 //组中设备的数量
Total Devices : 4 //总设备数
Persistence : Superblock is persistent
Update Time : Mon Jan 13 16:34:51 2016
State : clean //状态,卫生的,哈哈
Active Devices : 3 //活跃3个
Working Devices : 4 //4个在工作
Failed Devices : 0 //坏了1就危险了,2个就完蛋了
Spare Devices : 1 //热备的1个。
Layout : left-symmetric
Cunk Size : 512K //校验码大小
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd //同步
1 8 64 1 active sync /dev/sde //同步
4 8 80 2 active sync /dev/sdf //同步
3 8 96 - spare /dev/sdg
5.模拟一块硬盘损坏,并移除
模拟一块硬盘损坏,并移除
终端一:
[root@localhost ~]# watch -n 0.5 'mdadm -D /dev/md0 | tail' //watch持续查看
终端二:
[root@localhost ~]# mdadm /dev/md0 -f /dev/sde -r /dev/sde
//模拟坏了并移除
-f --fail
-r --remove