一、磁盘简介
当前常用的磁盘还是机械硬盘HDD,但固态硬盘SSD的应用越来越广泛了。常见的机械硬盘有U盘、光盘、软盘、硬件和磁带等,机械硬盘能够永久存储数据(在不用通电的情况下)。
磁盘是如何存储数据的呢?总的来说采用磁性碟片来存储数据。磁盘有很多同轴磁盘片叠成,每个磁盘片有两个磁盘面都可以用来存储数据。磁盘面上有很多同心圆的磁道,存取数据时磁盘转动,使磁头沿这些磁道运动。由于各个同心圆磁道周长不同,每个磁道存储的数据量是不同的,所以磁盘是按照磁盘上划分的扇区来存储数据的,每个扇区的大小是512bytes,每次存取数据时所有盘片的所有盘面都进行存储。磁盘在出厂时由厂家进行低级格式化,为磁盘划分磁盘柱面(不同盘面上相同磁道组成同一柱面)。磁盘分区是按照柱面划分的,分区是磁盘的逻辑边界,划分分区可以划分磁盘为多个文件系统。
硬盘的主引导记录分区列表MBR(master boot record)从磁盘的第0磁道第0柱面第1扇区开始,共512bytes:
前446bytes存储bootloader引导程序,用于在计算机开机时引导磁盘
接着64bytes中每16字节标识一个分区,最多4个主分区也可以是3个主分区+1个扩展分区或两个主分区+两个扩展分区
最后2bytes用于标记MBR是否有效(magic number)
二、Linux文件系统
为了加快数据的存储速度,Linux文件系统将磁盘划分为一个一个的磁盘块,块大小有1024,2048,4096kb几种,一个磁盘块最多只能存储一个文件(但该文件可以有多个路径,即硬链接)。每个磁盘块对应一个inode节点。所有inode存放在同一个源数据区域里,当系统需要访问某个磁盘块的文件时,首先从该数据区域里读取这个/些磁盘块的对应inode节点,最后才访问这些磁盘块,这样系统就可以只查看这个数据区里的inode节点信息就可以找到对应磁盘块的文件,而不用扫描整个磁盘,加快了数据的读取速度。
多个磁盘块组成一个数据块组,每个块组都有一个块位图和一个inode表。bitmap块位图,用于管理(标识)空闲数据块。inode表与数据块的物理磁盘位置越近,数据读取时的寻道时间越短,所以将整个文件系统分成多个小的块组能加快数据读取。块组描述符表记录了每个块组从几块开始几块结束。
超级块用于存放文件系统信息,包括保存块组个数,每个块组包含多少个磁盘块,每个磁盘快的大小,空闲磁盘块,已用磁盘块,空闲inode,已用inode。
ext2_inode中包含的数据:mode、owner info、size、timestamps、direct blocks、data、indirect blocks、double inditect、triple indirect。
ext3是一种日志文件系统(journal file system)。日志文件系统在相对非文件系统新增了一个日志区,日志区用于系统崩溃后的数据恢复。日志的写入方式包括顺写、回写(实际数据先写入主文件系统,元数据再写入日志系统)和全日志(元数据和实际数据同时分别写入日志系统和主文件系统)。日志文件系统的数据存储速度较慢,但在很多对数据安全性要求高的领域有很大作用。
三、链接文件
硬链接--指向同一inode的不同路径
1.只能对文件创建,不能应用于目录
2.不能跨文件系统
3.创建硬链接会增加文件被文件被链接的次数
符号链接--软链接文件存放的是它所指向的文件的文件名,大小为文件名字符串的大小
1.可应用于目录
2.可以跨文件系统
3.不会增加被链接文件的链接次数
4.其大小为指定的路径所包含的字符个数
命令:ln -s、-v
四、创建设备文件
命令 mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m mode 指定创建文件的权限
NAME TYPE 包含b、c(设备文件包括块设备b是按块为单位,随机访问的设备,字符设备c是按字节为单位的线性设备)
[MAJOR MINOR] 包括主设备号MAJOR munber(用于标识设备类型)和次设备号MINOR number(用于标识同一种类型中不同设备)
五、显示磁盘的使用情况report file system disk space usage
df
-i, --inodes 显示inode的使用情况list inode information instead of block usage
-h, --human-readable
-P, --portability use the POSIX output format
六、查看磁盘的分区列表信息 manipulate disk partition table
fdisk [-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device
-m 查看帮助
p:显示当前硬件的分区,包括没保存的改动
n:创建新分区
e:扩展分区
d:删除一个分区
w:保存退出
q:不保存退出
t:修改分区类型
l:显示所支持的所有类型、查看当前系统识别了几块硬盘
七、查看内核
[root@bogon ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 512000 sda1
8 2 2048000 sda2
8 3 1257472 sda3
8 4 1 sda4
8 5 17149952 sda5
11 0 1048575 sr0
八、重读分区表
partprobe
partx
九、创建Linux文件系统build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]
mkfs是一个交互式的命令
十、虚拟文件系统 VFS(Virtual Filesystem Switch)
Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统。由于文件系统类型的不同,调用机制也不同,系统调用难以支持多种文件系统,VFS解决了这个难题,VFS提供了系统调用(用户进程)和文件系统之间的抽象接口,使用户进程可以方便地调用文件系统。
linux支持的文件系统类型 FAT32(vfat)、NTFS、、SO9660、extended(ext2、ext3、ext4)、CIFS、xfs、reiserfs、jfs、nfs、ocfs2、gfs2、swap等
十一、Linux分区
Linux所有分区(物理)都必须挂载在某个目录(逻辑)上才能进行数据读写操作。所有的目录逻辑上都包含于根目录下的,根下的目录只是作为其它分区的转接入口,要访问某个分区就要先引用根下的目录(根分区自引用)。
注:本文参考自马哥的Linux运维系列视频,但是经过笔者的修改