date | author | title | url | tags | series | categories | weight | chapter | index | toc | draft | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2020-09-19 14:32:43 -0700 |
Rustle Karl |
Linux 存储结构与磁盘划分 |
posts/linux/docs/base/storage |
|
|
|
20 |
false |
true |
true |
false |
文件系统层次化标准(FHS,Filesystem Hierarchy Standard)、udev 硬件命名规则以及硬盘分区的规划方法。
Linux 系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux 系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT 均代表不同的目录,并且文件名称中不得包含斜杠(/)。
目录 | 描述 |
---|---|
/boot | 开机所需文件—内核、开机菜单以及所需配置文件等 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户主目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及 /bin 与 /sbin 下面的命令要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方的软件 |
/root | 系统管理员的主目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux 系统开机时不会使用到的软件、命令、脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
路径指的是如何定位到某个文件,分为绝对路径与相对路径。绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。
系统内核中的 udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev 设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理 /dev
目录下的设备文件。
硬件设备 | 文件名称 |
---|---|
IDE 设备 | /dev/hd[a-d] |
SCSI/SATA/U 盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0 -1] |
打印机 | /dev/lp[0 -15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0 或 /dev/ht0 |
由于现在的 IDE 设备已经很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用 a~p 来代表 16 块不同的硬盘(默认从 a 开始分配),而且硬盘的分区编号也很有讲究:
- 主分区或扩展分区的编号从 1 开始,到 4 结束;
- 逻辑分区从编号 5 开始。
/dev
目录中 sda 设备之所以是 a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为 /dev/sda
。在使用 iSCSI 网络存储设备时会发现,明明主板上第二个插槽是空着的,但系统却能识别到 /dev/sdb
这个设备
分区的编号不一定代表分区的个数,也有可能是手工指定的。因此 sda3 只能表示是编号为 3 的分区,而不能判断 sda 设备上已经存在了 3 个分区。
首先,/dev/
目录中保存的应当是硬件设备文件;其次,sd 表示是存储设备;然后,a 表示系统中同类接口中第一个被识别到的设备,最后,5 表示这个设备是一个逻辑分区。一言以蔽之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为 5 的逻辑分区的设备文件”。
硬盘设备是由大量的扇区组成的,每个扇区的容量为 512 字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用 446 字节,分区表为 64 字节,结束符占用 2 字节;其中分区表中每记录一个分区信息就需要 16 字节,这样一来最多只有 4 个分区信息可以写到第一个扇区中,这 4 个分区就是 4 个主分区。
为了解决分区个数不够的问题,可以将第一个扇区的分区表中 16 字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用 16 字节分区表空间的指针—一个指向另外一个分区的指针。这样一来,用户一般会选择使用 3 个主分区加 1 个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于 4 个)的需求。
/dev/shm/ 是 linux 下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在 linux 下,就不需要大费周折去建 ramdisk,直接使用 /dev/shm/ 就可达到很好的优化效果。
/dev/shm/ 需要注意的一个是容量问题,在 linux 下,它默认最大为内存的一半大小,使用 df -h
命令可以看到。但它并不会真正的占用这块内存,如果 /dev/shm/ 下没有任何文件,它占用的内存实际上就是 0 字节;如果它最大为 1G,里头放有 100M 文件,那剩余的 900M 仍然可为其它应用程序所使用,但它所占用的 100M 内存,是绝不会被系统回收重新划分的。
默认系统就会加载 /dev/shm,它就是所谓的 tmpfs,跟 ramdisk 虚拟磁盘一样,tmpfs 可以使用 RAM,但它也可以使用交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;只是安装它,它就可以使用了。
tmpfs 有以下优势:
- 动态文件系统的大小。
- tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
- tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。