文件系统详解
EXT4文件系统
EXT4是第四代扩展文件系统(Fourth extended filesystem)
类型:索引(index ) 文件系统
系统限制:
- Ext3: 文件系统最大16TB
- Ext4: 文件系统最大16TB
- XFS : 文件系统最大100TB.
名词
inode
-
inode:索引节点
-
记录文件的属性(文件的元数据metadata)
-
元数据:如文件的属性,大小,权限,属主,属组,连接数,块数量,块的编号
-
一个文件占用一个inode,同时记录此文件数据所在的block numbber
-
inode大小 为 128 bytes
block
- 存储文件的实际数据
- 实际存储文件的内容,若文件较大,会占用多个block
- block大小 为默认为4K
superblock
- 1 block 与 inode 的总量
- 2 未使用与已使用的 inode / block 数量
block group
块组
示例1:inode(index node 索引节点)
创造一个文件,观察inode信息。
ll -i 文件名
stat 文件名
示例2:block(块 文件内容)
新分区中,文件的数量和inode节点数有关系
-
1 观察某个分区中的inode节点数
df -i
-
2 创建一个文件
touch xx.txt
-
3 再次观察inode节点数
df -i
可以看到IUsed增加了1,即inode数使用增加1个 -
4 创造大量文件。观察inode使用情况
进入上图中的/dev/sdb5
的目录/mnt/user/0
touch file{1..30000}
最后报错touch: cannot touch ‘file30000’: No space left on device
实际空间占用情况
可以看到该分区的inode已经全被占用,因此无法在该分区新建文件了,但是实际空间只用了2.2M,此时如果向创建的文件中写数据,是可以写进去的,这是因为block决定了文件存储的空间
实际工作中,如果某个磁盘分区无法新建文件,提示No space,但是通过
df -hT
看到磁盘空间还很多时,要考虑是不是inode用尽了
结论:inode决定了文件系统中文件的数量,block决定了文件存储的空间
当分区空间大小消耗完毕,也无法创建新的文件
-
5 写满磁盘分区,然后测试新建文件
rm -rf /mnt/disk5
删掉刚才新建的文件
向目标分区写入大量数据,填满
dd if=/dev/zero of=/mnt/disk5/1.txt bs=1k count=10000000
查看目标分区容量,已满
df -hT
创造新文件失败
得出结论,磁盘空间的限制根据inode和block两方面
XFS一种高性能的日志文件系统
文件链接
一、符号链接/软连接
symbolic link 软链接
示例
- 1 创建一个文件,并输入内容
[root@localhost ~]# echo 111 > /file1
- 2 创建一个软链接
ln -s /file1 /home/file11
-s
软链接
- 3 观察软链接
ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
- 4 观察软链接文件
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
总结
- 软链接像快捷方式,可以对文件和目录做软链接
- 软链接记录的只是源文件的路径
- 源文件删除或移动位置后,软链接失效
二、硬链接
- 1 创建同分区硬链接成功,创建不同分区硬链接失败。
[root@localhost ~]# echo 222 > /file2
[root@localhost ~]# ln /file2 /file2-h1
[root@localhost ~]# ln /file2 /home/file2-h2
//将文件以硬链接方式,发送到其他分区。结果是错误
ln: failed to create hard link ‘/home/file2-h2’ => ‘/file2’: Invalid cross-device link
- 2 硬链接删除源文件,依然可以用
[root@localhost ~]#rm -rf /file2
[root@localhost ~]#cat /file2-h1
222
- 3 不允许将硬链接指向目录
[root@qianfeng home]# ln /home/ /mnt
ln: “/home/”: 不允许将硬链接指向目录
-
4 硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件
inode二者相同,不会占用inode数量,但是软链接是会占用的 -
总结
- 硬链接只能针对文件做。不能对目录做。
- 硬链接只能在同分区做。
RAID
RAID:廉价磁盘冗余阵列(Redundant Array of Independent Disks)
作 用:容错、提升读写速率
类型
RAID0
RAID0 条带集 2块磁盘以上, 读写速率快 100%*N,但不容错
RAID1
RAID1 镜像卷, 2块磁盘, 容量50% ,读写速率一般,核心特点:备份容错
两块磁盘假设1T容器,只能用500G。
RAID5
RAID5 带奇偶校验条带集 3块磁盘以上,
利用率 (n-1)/n 读写速率快,容错
一、不同场景RAID的使用
硬RAID: 需要RAID卡,有自己的CPU,处理速度快,有电池和无电池。
软RAID: 通过操作系统实现,比如Windows、Linux
二、软RAID示例
- 1 准备4块1G的硬盘
ll /dev/sd*
RAID5 :(3块数据盘) + (1块热备硬盘)
- 2 创建RAID
yum install -y mdadm
mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{b,c,d,e}
参数说明:
-C:创建RAID
/dev/md0: 第一个RAID设备
-l5: RAID5
-n: RAID成员的数量
-x: 热备磁盘的数量
- 3.格式化,挂载
mkfs.ext4 /dev/md0
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5
cp -rf /etc /mnt/raid5/etc1
- 4.查看RAID信息
mdadm -D /dev/md0
-D 查看详细信息
- 5 模拟一块硬盘损坏,并移除
终端一:
watch -n 0.5 'mdadm -D /dev/md0 | tail'
#watch持续查看
终端二:
mdadm /dev/md0 -f /dev/sdb -r /dev/sdb
模拟坏了并移除
-f --fail
-r --remove
移除之前
移除之后