本文主要介绍linux硬盘的基础知识。
一. 硬盘简介
linux用来存储的设备分为两种:内存RAM 和 硬盘Hard Disk。内存速度快,掉电后易失。硬盘速度慢,掉电后非易失。(闪存Flash是最新流行的存储器,和硬盘类似)
硬盘接口类型(硬盘与主机系统之间的连接):
- IDE:传统的并口硬盘,系统中标识为 /dev/hdx,使用最普遍,速度慢,便宜,不支持热插拔。
- SATA:serial ATA,串口硬盘,标识 /dev/sdx,速度快,支持热插拔(我们常用的u盘在系统中的标识也是 /dev/sdx)
- SCSI:服务器用的多,比较贵。
在 Linux 系统中,一切皆文件,硬盘设备也不例外,其对应的文件命名规则为:
主设备号sd + 次设备号[a-z] + 分区序号x = sd[a-z]x
- 主设备号代表设备的接口类型,相同的 主设备号表示同类型的设备。
- 次设备号代表同类设备中的序号,用 小写字母 表示。比如 /dev/sda 表示第一块硬盘,/dev/sdb 表示第二块硬盘。
- 数字x 表示硬盘分区的编号。在每块硬盘上会划分多个分区,针对每个分区,Linux 用 /dev/sdbx 来划分,这里的 x 表示第二块硬盘b的第 x 个分区。如下图所示:
截图中一共有四块硬盘 /dev/sda,/dev/sdb,/dev/sdc 和 /dev/sdd。其中 /dev/sda 上共创建了三个分区,分别是 /dev/sda1,/dev/sda2,/dev/sda5;/dev/sdb 上只有一个分区 /dev/sdb1。而 /dev/sdc 和 /dev/sdd 则尚未分区(也可能是只有一个分区,分区的名称和硬盘的名称相同)
硬盘物理结构:
- 磁道:在硬盘的每一个盘面上,会逻辑的切割出许多磁道。
- 柱面:由相同编号的磁道构成。有多少条磁道,就有多少个柱面。
- 扇区:每一个磁道可以切割出若干个扇区。
扇区、块/簇、页 三者关系:
- sector:硬盘存储的最小物理单元
- block/cluster:文件系统 管理硬盘 的最小单元 (linux称为块,windows称为簇)
- page:内存的最小单元
硬盘容量(CHS): CHS即Cylinder(柱面)、Head(磁头)、Sector(扇区)。只要知道了硬盘的CHS的数目,即可确定容量(容量=柱面数*磁头数*每道扇区数*512 Byte)。
硬盘的第一个扇区:
第一个扇区里装载了两个重要的信息:
- MBR:主引导记录 master boot record,有446bytes
- PT:分区表 partial table,记录整个硬盘的分割状态,有64bytes
计算机刚上电时,会通过主板的BIOS+cmos芯片获取硬件信息,之后读取硬盘首扇中的MBR。
分区表 最多只能放4个分区的信息,一般为3个主分区 加1个扩展分区,而扩展分区由众多的逻辑分区组成。("扩展分区"仅仅只是个称呼,它是一个指向下一个逻辑分区的指针,没有实际容量)
bootloader:
是操作系统安装在MBR中的一套软件,主要任务有:
- 提供功能菜单:选择不同开机项目
- 启动内核
- 转交管理任务:将开机管理功能转交给其它的loader负责(多重引导需要)
GRUB:GrandUnified Boot Loader,linux系统启动的加载器,和bootLoader目的一样,为了启动内核。
BIOS先把MBR中的引导程序(也就是GRUB的stage1部分)加载到ram后就把控制权交给了grub,然后gurb通过stage1的代码找到stage2的位置,执行它,启动内核,之后把机器的控制权移交给了操作系统。
二. 硬盘分区
所谓分区,就是告诉操作系统,我们这块硬盘 在此分区内可访问的数据区域为:A柱面到B柱面之间的块 -- vbird
简单点说 就是给硬盘划一道道边界线出来
新的硬盘安装好后可用fdisk工具开始分区。使用流程:
- 查看硬盘分区情况:fdisk -l
- 查看home目录挂载路径: df -h /home
-----------------------------------------------------------------------------------
然后 格式化 --> 创建文件系统
分区成功后会出现/dev/sdb1 等设备文件,还需要对其进行格式化,也就是指定文件系统,系统才能够使用。
mkfs.ext4 /dev/sdb1
创建其他文件系统的简写模式:
挂载
挂载 -- 将文件系统与目录树结合起来
挂载点:访问分区的入口,一定得是目录(为啥称为挂载点呢,本人觉得可能是因为linux目录下有个小数点,代表当前目录,而挂载点的意思就是指分区挂载在哪个目录下,所以才叫做mount point 吧)
step:
- mkdir /mnt/sdb1 -- 先建立 sdb1目录,作为挂载点
- mount /dev/sdb1 /mnt/sdb1/ -- 使用 mount ,把/dev/sdb1分区 挂载到/mnt/sdb1目录下
将新硬盘挂载到home目录下,这更简单--> mount /dev/sdb1 /home
Note:
- mount -t 还可指定文件系统类型
- 开机自动挂载:/etc/fstab
- 修改只读目录xx 为可读写:mount -o remount,rw xx
- 直接输入mount命令,可查看所有mount的点
文件系统
文件系统:用来管理文件的一套系统(或者一套方法)
Linux 的文件系统主要分为三大块:
- 上层的文件系统的系统调用-- read() 、write() ...
- 虚拟文件系统VFS
- 挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。
ext文件系统 三剑客:
- inode:记录文件信息。包括权限、属性、block编号等,文件名相当于inode别称。
- block:记录文件数据。每个block最多只能放一个文件内容。大小有三种:1k、2k、4k
- superblock:记录fs的整体资讯,包括inode/block的使用量等
目录:由一系列目录项组成。它也有一个专属的inode和至少一个block (只是用来存放目录项)。每一个目录项记录的是当前目录的文件名和与之对应的inode编号。
想要进入某个目录,当事人必须拥有此目录的 x权限
硬链接和软链接:
-
硬链接:ln 源文件名 链接文件名 。一个inode编号对应多个文件名,删除其中一个对另一个没影响。ls -l命令的第二列参数代表硬链接的个数。
-
软链接:ln -s 源文件名 链接文件名。其block存储的是源文件名路径。可以跨越文件系统,很灵活。
<未完待续>
软硬链接参考 https://www.cnblogs.com/ylan2009/p/4287929.html
设备文件名参考 https://www.cnblogs.com/shenshizhong/articles/4418248.html