这是我参与「掘金日新计划 · 2 月更文挑战」的第 五 天
6、存储结构和管理硬盘
Linux 系统中的文件存储结构开始,讲述文件系统层次化标准(FHS,Filesystem Hierarchy Standard)、udev硬件命名规则以及硬盘分区的规划方法。
6.1、一切从"/"开始
在 Linux 系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,另外,Linux 系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT 均代表不同的目 录,并且文件名称中不得包含斜杠(/)。Linux 系统中的文件存储结构如图所示。
前文提到的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 个分区
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)。
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