目前主要用的磁盘主要是机械式硬盘.
机械式硬盘:(具体图片请看后面)
U盘 , 光盘 , 软盘 , 硬盘 , 磁盘
磁盘:
一般而言扇区(Sector)大小为 512 个字节
不同磁盘上的相同编号的磁道组成柱面
磁盘: 0 盘面 0 磁道 0 扇区 叫做主引导记录 ,不属于任何文件系统叫 MBR(Master Boot Record )(512 byte)
MBR 分为3段 :
446 byte : BootLoader ,引导加载器(程序,引导操作系统启动)
64 bytes :
每 16 bytes 标志一个分区
2 bytes : Magic Number 标志MBR 是否有效
硬盘 : 主分区 + 扩展分区 <= 4 (扩展只能有一个) 扩展分区相当于一个指针指向一文件
上面记录分区信息
划分分区是按柱面进行的 ,柱面编号从外到里,为从 0 到 n 。外面的磁道读写性能较好。
文件系统(以 ext2 为例)
文件系统是管理软件,能把存储空间分为元数据(Metadata) 存储区,数据存储区。
数据存储区分为磁盘块(block)。
元数据中有个块位图 bitmap ,每个块在里面有一个位。
inode(index node): 元数据中存放每个文件的对应信息(号码,文件权限,属主,
所存储的块,时间戳,大小等,就是没有文件名,更重要的是记录这个文件对应了那些磁盘块)
inode 也有一个位图,标记inode号是否已经使用了。
根是自引导,目录和下面的文件和它的关系放在block里面。
创建文件过程,先判断路径是否存在,如果存在的话,首先扫描 inode 位图,分配一个空闲
的inode编号给它,然后找 inode 对应的表,在表上建立新的条目,在找扫描块位图,分配
对应的 block 。
删除文件 : 把目录上对应的条目删除了。把对应的 inode 号码在位图中标记为空,在块位图
中把对应的 block 标记为空。(里面数据不动)
在同一分区上剪切比复制快多了,因为复制会创建新文件,剪切只是改变 block 对应的路径 。
查找 /var/log/messag查找文件的过程 :
首先 / 是自引用的 ,首先在元数据区中找 / 对应的条目,根据其条目找到对应的 block ,block 中找到 var 对应的 inode 号 ,再根据 inode号 到元数据里面找到 var 下那张表,也即从var 指向的 block
中找到 messages 对应的 inode 号 ,从而找到messages 对应的 block。
目录只是个路径映射表,
创建一个文件的过程 :
例如 在 /backup 目录下新建一个目录 test.txt 大小为 10 k ,首先确保 /backup 目录存在,
首先扫描 inode 表位图找到一个空闲的 inode ,将这个号占用,然后查找 /backup 目录对应的
磁盘块,也即是 /backup 的路径映射表,在里面建立一个新的条目 test.txt 并将刚刚找到的
inode 号 填进去,接下来扫描 block 位图,分配 block。
删除文件 :
找到文件所在目录的路径映射表,找到文件对应的inode号并且在路径映射表将这一条条目删除,
并将这个inode 对应的块位图,对应的块标记为未使用 ,并在inode的位图中把对应的 inode 号
标为未使用。
复制文件:
就是建立一个新文件的过程,但是建立的新文件与原先文件的内容一样。
剪切文件 :
在同一个分区上,数据,inode根本就没动,只是原先文件对应的条目删除,再添加一条条目,但
还是对应原先的inode 和 block。
跨分区的话,在新分区上建立一个新文件,把老分区上的文件复制过去,然后再删除老分区上的文件。
实际上磁盘的组成更加复杂,事实上磁盘是由很多个块组(block group)组成的,每一个块组里面都有 block 位图,inode 位图。
而且在磁盘中还有一个块存储了全局描述信息,叫做超级块。
注意 : 如果不划分区,一个磁盘上只能存储一个文件系统。分区划分后能够存储多个文件系统。
抹除一个磁盘上的所有分区(拿sda为例):
dd if=/dev/zero of=/dev/sda bs=512 count=1
sync 同步
sleep 3 以防太快损害磁盘
注意不要对根所在分区进行操作,要睡眠几秒
下面的图片仅供参考 :
磁盘的物理组成
磁盘的物理组成 轴
磁盘的 读写头
硬盘的外部结构