Linux文件系统和磁盘管理学习笔记
1. 磁盘种类与构成
1.1 https://blog.csdn.net/heuguangxu/article/details/80072024
1.2 机械盘(HDD)
1.2.1 物理结构:磁头,盘片,轴承等。
1.2.2 逻辑结构:盘片,磁道(磁柱),扇区 -->【三个维度】
磁盘容量 = (2*盘片数量) * (磁道数量/盘面) * (扇区数量/磁道) * 512Byte
* 老式磁盘不同磁道扇区数量一样,内磁道存储密度 > 外磁道存储密度,新式磁盘存在等密度结构:外磁道扇区数量 > 内磁道扇区数量。
1.2.3 机械磁盘I/O速度的影响因素
* 寻道时间:磁头从零号磁道到达目标磁道时间不确定;
* 旋转延迟时间: 通过盘片旋转使磁头定位到某一扇区的延迟时间不确定;
* 同一柱面所有磁头读写完毕后才转移到下一柱面,盘片切换是电子切换,磁道(柱面)切换是机械切换,电子切换远快于机械切换;因此通常都按柱面组织数据。
* 读写传输延迟;
1.2.4 加速机械盘访问速度
* 按柱面组织数据;
* 使用多个磁盘;
* 磁盘调度算法:电梯算法;
1.2.5 磁盘故障和数据恢复
* 备份盘
* 奇偶校验(盘4作为冗余盘,多个盘同时崩溃无法恢复)
* 使用汉明码来帮助从故障中恢复数据;
1.2.6 硬盘接口
* http://c.biancheng.net/view/879.html
1.3 固态盘(SSD)
* http://c.biancheng.net/view/879.html
思考题:
2. Linux文件系统
2.1 概况: DOS与早期windows采用FAT系统;早期linux采用ext2文件系统,ext3和ext4(ext3日志功能健全,ext4在ext3的基础上改进了关键数据结构等,提供更高的性能与可靠性)
2.2 磁盘分割: partition(以柱面为单位) --> partition格式化(文件系统初始化)--> 挂载到目录下;
* 0号扇区: 第0磁头,第0柱面,第1扇区 --> 主引导扇区(MBR446byte, 64byte分区表, 2byte的结束标志(55AA));
【主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。 它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。】
【硬盘分区表占据主引导扇区的64个字节(偏移01BEH–偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。】
【https://blog.csdn.net/doitsjz/article/details/51329918?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242】
2.3 ext2文件系统:
* 索引式文件系统:superblock, inode, block概念;
2.3.1 superblock 从第一块block开始,记录文件系统的整体信息,包括inode、block总量,使用量,文件系统的格式等信息;(dumpe2fs -h /dev/vda2)
2.3.2 inode, 记录档案的属性,每个档案占据一个inode,每个inode记录block的索引
* 最大单个文件(block 1k):12 * 1k + 1 * 1024 / 4 * 1k + 1 * (1024 / 4) * (1024 / 4) * 1k + 1 * (1024 / 4) * (1024 / 4) * (1024 / 4) * 1k = 12k + 256k + 64m + 16g ~= 16g
* 2k和4k的block不适用于此方法计算,因为其会受到ext2文件系统本身的限制;
* 注: 因为一些非文件系统的限制,ext2能够访问的单个文件最大2g
* inode 结构 https://blog.csdn.net/trochiluses/article/details/9354557
* 磁盘空间的浪费(block 1k, 2k, 4k)
假设: block4k, 10240个50byte的文件,则文件总大小为 10240 * 50 byte = 500kb; 而每个文件占用一个block (4k), 总共消耗磁盘空间 10240 * 4k = 40mb, 浪费了40mb - 500kb的容量。
若采用小block,又存在文件存储过于分散,影响读写效率的问题。
2.3.3 磁盘容量比较大时(>100g), 分割为block群组 (dumpe2fs /dev/mapper/openeuler-root)
3. 常用命令行
du
df
fdisk
fsck
mount
dumpe2fs
parted
blkid
lsblk
file