文件系统详解
简介
问题1:文件是如何准确放到磁盘的某个位置的?
问题2:文件是如何在磁盘(渺茫的空间中)快速定位的?
答案:文件系统
文件系统类型:
Windows:FAT16、FAT32、NTFS
Linux:EXT3、EXT4、XFS(最新的)
EXT3/4文件系统
简介
类型
索引(index)文件系统
系统限制
EXT3:文件系统最大16TB
EXT4:文件系统最大16TB
XFS:文件系统最大100TB
图示
名词
inode
记录文件的属性(文件的元数据metadata)
元数据:文件的属性,大小,权限,属主,属组,连接数,块数量,块的编号
一个文件占用一个inode,同时记录此文件数据所在的block number。
inode大小 为128 bytes
block
存储文件的实际数据
存储文件的内容,若文件较大,会占用多个block。
block大小 默认为4K
superblock
1 block与inode的总量;
2 未使用与已使用的inode/block数量;
示例1:inode
创建一个文件,观察inode信息
ll -i 文件名
[root@localhost disk1]# ll -i 1.txt
12 -rw-r--r--. 1 root root 0 Sep 7 18:01 1.txt
示例2:block
问题1:分区中,文件的数量和什么有关系
1、观察某个分区中inode节点数
df -i
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 65536 11 65525 1% /mnt/disk1
2、创建一个文件名
touch 文件名
[root@localhost disk1]# touch 1.txt
3、再次观察inode节点数
df -i
[root@localhost disk1]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 65536 12 65524 1% /mnt/disk1
4、创造大量文件,观察inode使用情况
touch file{1..65527}
[root@bogon disk1]# touch file{1..65527}
touch: cannot touch ‘file65527’: No space left on device
5、在另一个shell,观察inode变化情况
watch -n 2 'df -i'
6、请问最后,还能否创建新文件呢?
不能
结论:inode决定了文件系统中文件的数量。
7、但是,是否能向已存在的文件中写入内容呢?
答案:是
问题2:当分区空间大小消耗完毕,还能否新增文件?
1、向目标分区写入大量数据,填满
dd if=/dev/zero of=/mnt/disk1/file1 bs=1M count=1000
[root@localhost disk1]# dd /dev/zero of=/mnt/disk1/file1 bs=1M count=1000
dd: unrecognized operand ‘/dev/zero’
Try 'dd --help' for more information.
[root@localhost disk1]# dd if=/dev/zero of=/mnt/disk1/file1 bs=1M count=1000
dd: error writing ‘/mnt/disk1/file1’: No space left on device
956+0 records in
955+0 records out
1001951232 bytes (1.0 GB) copied, 38.0367 s, 26.3 MB/s
2、查看目标分区容量,已满
df -Th
[root@localhost disk1]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 976M 960M 0 100% /mnt/disk1
3、创建新文件
touch new.txt
[root@localhost disk1]# touch net.txt
touch: cannot touch ‘net.txt’: No space left on device
4、得出结论,磁盘空间的限制根据inode和block两方面
请清理掉填满的分区,避免不必要的报错。
文件链接
一、符号链接
名词解释
示例
1、创建一个文件,并输入内容
echo 11111 >> /file1
2、创建一个软链接
ls -s /file1 /home/file1.soft
3、观察软连接
ls -l /file1
ls -l /home/file1.soft
[root@localhost disk1]# ls -l /file1
-rw-r--r--. 1 root root 6 Sep 7 18:39 /file1
[root@localhost disk1]# ls -l /home/file1.soft
lrwxrwxrwx. 1 root root 6 Sep 7 18:39 /home/file1.soft -> /file1
4、查看两个文件,内容一致,证明是同一个文件
[root@localhost disk1]# cat /file1
11111
[root@localhost disk1]# cat /home/file1.soft
11111
5、删除源文件,软链接闪烁,不可用
[root@localhost disk1]# rm -rf /file1
[root@localhost disk1]# cat /home/file1.soft
cat: /home/file1.soft: No such file or directory
总结
软链接像快捷方式,可以对文件和目录做软链接。
软链接记录的知识源文件的绝对路径。
软链接失去源文件不可用。
二、硬链接
名词解释
示例
1、创建同分区硬链接成功,创建不同分区硬链接失败。
echo 222 >> /file2
ln /file2 /home/file2.h1
2、硬链接的inode号相同,但并不占用block。使用df -k
观察硬链接数量无变化。
[root@localhost ~]# ls -l /file2
-rw-r--r--. 2 root root 4 Sep 7 18:49 /file2
[root@localhost ~]# ls -l /home/file2.h1
-rw-r--r--. 2 root root 4 Sep 7 18:49 /home/file2.h1
[root@localhost ~]# ln /file2 /home/file2.h2
[root@localhost ~]# ls -l /home/file2.h2
-rw-r--r--. 3 root root 4 Sep 7 18:49 /home/file2.h2
[root@localhost ~]# ls -l /home/file2.h1
-rw-r--r--. 3 root root 4 Sep 7 18:49 /home/file2.h1
[root@localhost ~]# ls -l /file2
-rw-r--r--. 3 root root 4 Sep 7 18:49 /file2
3、不允许将硬链接指向目录。
总结
硬链接只能针对文件做,不能对目录做。
硬链接只能在同分区做,在同一个磁盘不在同一分区也不可以。
一般使用软链接,硬链接基本不用。
RAID(了解)
保障数据的安全性
提高数据的读写速率
简介
RAID:独立磁盘冗余阵列(Redundant Array of Independent Disk)
作用:容错、提升读写速率
类型
RAID0
RAID0条带集2块磁盘以上,读写速率快100%*N,但无容错。
RAID1
RAID镜像卷(镜像集)2块磁盘,容量50%,读写速率一般,容错。
RAID4
读性能提升,写性能略有下降
可用空间:N*MIN
有冗余特性(有一块专门的校验盘)
最少磁盘数:4
RAID5(最优使用方案)
至少3块磁盘,必须大小相同,数据分N-1份,剩下一块盘做校验盘。4块盘,数据分两份,2块数据盘,1块校验盘,1块热备盘。
RAID5带奇偶校验条带集3块磁盘以上,利用率:(n-1)/n,读写速率快,容错。
RAID10
读写性能提升
可用空间:N*MIN/2
冗余特性:1块盘
最少磁盘数:4
先做RAID 1再做RAID 0
RAID01
读写性能提升
可用空间:N*MIN/2
冗余特性:1块盘
先存储再备份
一、不同的场景RAID的使用
硬RAID:需要RAID卡,有自己的CPU,处理速度快,有电池和无电池。
软RAID:通过操作系统实现,比如Windows、Linux
二、软RAID示例
1、准备4块磁盘
RAID5:(3块数据盘sdd、sde、sdh)+(1块热备硬盘sdi)
ll /dev/sd*
2、创建RAID
mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{d,e,h,i}
-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、模拟一块磁盘损坏,并移除
终端1:
watch -n 0.5 'mdadm -D /dev/md0 | tail'
# watch持续查看
终端2:
mdadm /dev/md0 -f /dev/sdd -r /dev/sdd
# 模拟坏了并移除
-f --fail
-r --remove