存储结构与管理硬盘-上

  • 一切从“/”开始
  • 物理设备的命名规则
  • 文件系统与数据资料
  • 挂载硬件设备
  • mount
  • df
  • umount


一切从“/”开始

在 Linux 系统中并不存在 C、D、E、F 等盘符,Linux 系统中的一切文件都是从“根”目录(/)开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途。

Linux 系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT 均代表不同的目录,并且文件名称中不得包含斜杠(/)。Linux 系统中的文件存储结构如图所示。

就这么学Linux 存储结构与管理硬盘-上_服务器

在 Linux 系统中,最常见的目录以及所对应的存放内容如表 6-1 所示。

就这么学Linux 存储结构与管理硬盘-上_linux_02

物理设备的命名规则

在 Linux 系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的 udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev 目录下的设备文件。

就这么学Linux 存储结构与管理硬盘-上_文件名_03


分析一下/dev/sda5 这个设备文件名称包含哪些信息,如图所示。

就这么学Linux 存储结构与管理硬盘-上_服务器_04


首先,/dev/目录中保存的应当是硬件设备文件;其次,sd 表示的是存储设备;然后,a表示系统中同类接口中第一个被识别到的设备;最后,5 表示这个设备是一个逻辑分区。一言以蔽之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为 5 的逻辑分区的设备文件”

文件系统与数据资料

日常需要保存在硬盘中的数据实在太多了,因此 Linux 系统中有一个名为 super block 的“硬盘地图”。Linux 并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。Linux 只是把每个文件的权限与属性记录在 inode 中。

而且每个文件占用一个独立的 inode 表格,该表格的大小默认为 128 字节,里面记录着如下信息:
➢ 该文件的访问权限(read、write、execute);
➢ 该文件的所有者与所属组(owner、group);
➢ 该文件的大小(size);
➢ 该文件的创建或内容修改时间(Ctime);
➢ 该文件的最后一次访问时间(Atime);
➢ 该文件的修改时间(Mtime);
➢ 文件的特殊权限(SUID、SGID、SBIT);
➢ 该文件的真实数据地址(point)。

而文件的实际内容则保存在 block 块中(大小一般是 1KB、2KB 或 4KB),一个 inode 的默认大小仅为 128 字节,记录一个 block 则消耗 4 字节。当文件的 inode 被写满后,Linux 系统会自动分配出一个 block,专门用于像 inode 那样记录其他 block 块的信息,这样把各个 block块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的 block 块,有

下面两种常见的情况(以 4KB 大小的 block 为例进行说明)。

➢ 情况 1:文件很小(1KB),但依然会占用一个 block,因此会潜在地浪费 3KB。

➢ 情况 2:文件很大(5KB),那么会占用两个 block(5KB−4KB 后剩下的 1KB 也要占用一个 block)。

就这么学Linux 存储结构与管理硬盘-上_文件系统_05

挂载硬件设备

mount

mount 命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。mount 命令中可用的参数及作用如表 6-3 所示。挂载是在使用硬件设备前所执行的最后一步操作。只需使用mount 命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了。对于比较新的 Linux 系统来讲,一般不需要使用-t 参数来指定文件系统的类型,Linux 系统会自动进行判断。而 mount 中的-a 参数则厉害了,它会在执行后自动检查/etc/fstab文件中有无被疏漏挂载的设备文件,如果有,则进行自动挂载操作。

就这么学Linux 存储结构与管理硬盘-上_文件系统_06


例如,要把设备/dev/sdb2 挂载到/backup 目录,只需要在 mount 命令中填写设备与挂载目录参数就行,系统会自动判断要挂载文件的类型,命令如下:

mount /dev/sdb2/backup
blkid

有了设备的 UUID 值之后,就可以用它挂载网络设备了:

mount UUID=478fRb-1pOc-fJOS-tTvH-KyBz-VaKwZG /backup

虽然按照上面的方法执行 mount 命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说需要每次开机后都手动挂载一下。这肯定不是我们想要的效果,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”(各字段的意义见表 6-4)写入到/etc/fstab 文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能一劳永逸了。

就这么学Linux 存储结构与管理硬盘-上_服务器_07


如果想将文件系统为 Ext4 的硬件设备/dev/sdb2 在开机后自动挂载到/backup 目录上,并保持默认权限且无须开机自检,就需要在/etc/fstab 文件中写入下面的信息,这样在系统重启后也会成功挂载。

vim /etc/fstab
...

df

df 命令用于查看已挂载的磁盘空间使用情况,英文全称为“disk free”,语法格式为“df -h”。

如果想查看当前系统中设备的挂载情况,非常推荐大家试试 df 命令。它不仅能够列出系统中正在使用的设备有哪些,还可以用-h 参数便捷地对存储容量进行“进位”操作。例如,在遇到 10240K 的时候会自动进位写成 10M,非常方便我们的阅读。

df -h

在 fstab 文件挂载信息中加上_netdev 参数。加上后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况

vim /etc/fstab

umount

在 fstab 文件挂载信息中加上_netdev 参数。加上后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况需要说明想要取消关联的设备文件或挂载目录的其中一项即可,一般不需要加其他额外的参数。

umount 命令用于卸载设备或文件系统,英文全称为“un mount”,语法格式为“umount [设备文件/挂载目录]”。

umount /dev/sdb2

如果我们当前就处于设备所挂载的目录,系统会提示该设备繁忙,此时只需要退出到其他目录后再尝试一次就行了。轻松搞定。

cd /media/cdroom/
umount /dev/cdrom
cd~
umount /dev/cdrom

如果系统中硬盘特别多,分区特别多,我们都不知道它们是否有被使用,又或者是做了些什么。此时,就可以用 lsblk 命令以树状图的形式列举一下了。

lsblk 命令用于查看已挂载的磁盘的空间使用情况,英文全称为“list block id”,输入该命令后按回车键执行即可。

就这么学Linux 存储结构与管理硬盘-上_服务器_08