Linux学习之存储结构和管理硬盘

110 阅读9分钟

这是我参与「掘金日新计划 · 2 月更文挑战」的第 五 天

6、存储结构和管理硬盘

Linux 系统中的文件存储结构开始,讲述文件系统层次化标准(FHS,Filesystem Hierarchy Standard)、udev硬件命名规则以及硬盘分区的规划方法。

6.1、一切从"/"开始

在 Linux 系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,另外,Linux 系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT 均代表不同的目 录,并且文件名称中不得包含斜杠(/)。Linux 系统中的文件存储结构如图所示。

1651642416947

前文提到的FHS 是根据以往无数Linux 系统用户和开发者的经验而总结出来的,是用户在Linux 系统中存储文件时需要遵守的规则,用于指导我们应该把文件保存到什么位置,以及告诉用户应该在何处找到所需的文件

  • Linux系统中常见的目录名称以及相应内容

    • /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 当文件系统发生错误时,将一些丢失的文件片段存放在这里
[root@chen /]# ls -l
总用量 108
lrwxrwxrwx.   1 root root     7 3  25 03:00 bin -> usr/bin
dr-xr-xr-x.   6 root root  4096 4  19 21:03 boot
drwxr-xr-x.   3 root root  4096 4  19 20:13 chen
drwxr-xr-x.  19 root root  3280 5   4 13:24 dev
drwxr-xr-x. 146 root root 12288 5   4 13:24 etc
drwxr-xr-x.   8 root root  4096 4  25 20:15 home
lrwxrwxrwx.   1 root root     7 3  25 03:00 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 3  25 03:00 lib64 -> usr/lib64
drwx------.   2 root root 16384 3  25 03:00 lost+found
drwxr-xr-x.   3 root root  4096 4  18 18:18 media
drwxr-xr-x.   2 root root  4096 4  11 2018 mnt
drwxr-xr-x.   3 root root  4096 3  25 03:05 opt
dr-xr-xr-x. 229 root root     0 5   4 13:24 proc
dr-xrwx---+  18 root root  4096 4  29 22:29 root
drwxr-xr-x.  45 root root  1300 5   4 13:24 run
lrwxrwxrwx.   1 root root     8 3  25 03:00 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 4  11 2018 srv
dr-xr-xr-x.  13 root root     0 5   4 13:24 sys
drwxrwxrwt.  38 root root 12288 5   4 13:40 tmp
drwxr-xr-x.  13 root root  4096 3  25 03:00 usr
drwxr-xr-x.  22 root root  4096 4  18 18:23 var

在Linux系统中还有另外一个重要的概念—路径。路径是指如何定位到某个文件,分为相对路径与绝对路径

绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。

6.2、物理设备的命名规则

在 Linux 系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。 系统内核中的udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名 字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。

  • 常见的硬件设备及其文件名称

    • 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

sda3 只能表示是编号为3 的分区,而不能判断sda 设备上已经存在了3 个分区

1651652076959

6.3、文件系统与数据资料

用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依 靠文件系统来完成的

Linux系统支持数十种的文件系统,而最常见的文件系统如下所示

  • Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并 能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也 会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入 动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分, 然后尝试进行修复。
  • Ext4:Ext3 的改进版本,作为RHEL 6 系统中的默认文件管理系统,它支持的存储容 量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4 文件系 统能够批量分配block 块,从而极大地提高了读写效率。
  • XFS:是一种高性能的日志文件系统,而且是RHEL 7 中默认的文件管理系统,它的 优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的 日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB, 这几乎满足了所有需求。

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

该文件的访问权限(read、write、execute);

该文件的所有者与所属组(owner、group);

该文件的大小(size);

该文件的创建或内容修改时间(Ctime);

该文件的最后一次访问时间(Atime);

该文件的修改时间(Mtime);

文件的特殊权限(SUID、SGID、SBIT);

该文件的真实数据地址(point)。

VFS的架构示意图-1

6.4.挂载硬件设备

6.4.1、df命令

  • df命令用于查看已挂载的磁盘空间使用情况,英文名称为"disk free" 语法格式为:"df -h"
[root@chenstudy ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        895M     0  895M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M   11M  900M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda2        37G  6.9G   31G  19% /
/dev/sda1      1014M  181M  834M  18% /boot
tmpfs           182M   12K  182M   1% /run/user/42
tmpfs           182M     0  182M   0% /run/user/0

6.4.2、umount命令

  • umount命令用于卸载设备或系统文件,语法格式为:umount[设备文件/挂载目录]
[root@chenstudy ~]# umount /dev/sdb2
  • lsblk命令用于查看已挂载的磁盘空间使用情况
[root@chenstudy ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0   37G  0 part /
└─sda3   8:3    0    2G  0 part [SWAP]
sr0     11:0    1  4.4G  0 rom 

6.5、添加硬件设备

6.5.1、fdisk命令

fdisk命令用于新建、修改及删除磁盘分区表信息,语法格式为:"fdisk 磁盘名称"

fdisk命令中的参数以及作用:

参数作用
m查看全部可用的参数
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区表信息
w保存并退出
q不保存直接退出

6.5.2、du命令

  • du命令用于查看分区或目录所占用的磁盘容量大小,语法格式为:"du -sh 目录名称"
[root@localhost /]# du -sh /*
0   /bin
130M    /boot
0   /dev
29M /etc
12K /home
0   /lib
0   /lib64
0   /media
0   /mnt
0   /opt
0   /proc
570M    /pxa270_linux
483M    /root
9.4M    /run
0   /sbin
0   /srv
0   /sys
8.0K    /tmp
3.6G    /usr
139M    /var