了解Linux存储结构与文件系统

前言

Linux 系统中一切都是文件。
不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。

根(/)

Linux 系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。

根目录文件结构

PC:/$ tree -L 1
.
├── bin //存放单用户模式下还可以操作的命令
├── boot //开机所需文件—内核、开机菜单以及所需配置文件等
├── cdrom //光驱挂载
├── dev //以文件形式存放任何设备与接口
├── etc //配置文件
├── home //用户主目录
├── lib //开机时用到的函数库,以及/bin 与/sbin 下面的命令要调用的函数
├── lost+found //当文件系统发生错误时,将一些丢失的文件片段存放在这里
├── media //用于挂载设备文件的目录
├── root //系统管理员的主目录
├── srv //一些网络服务的数据文件目录
├── tmp //任何人均可使用的“共享”临时目录
├── usr/local //用户自行安装的软件
├── usr/sbin //Linux 系统开机时不会使用到的软件/命令/脚本
├── usr/share //帮助与说明文件,也可放置共享文件
├── var //主要存放经常变化的文件,如日志
...

物理设备命名

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

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

image.png

设备文件名举例:/dev/sda5

  • dev:代表硬件设备文件所在的目录
  • sd:代表SCSI存储设备
  • a:代表硬盘的顺序号
  • 5:代表扩展分区的顺序号

文件系统

文件系统种类

用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统。常见的文件系统如下:

Ext3

能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。

Ext4

Android操作系统依托于Linux,所以主要的文件系统也是从Linux中发展而来,包括exFAT、ext3、ext4等,目前大多数手机仍使用Ext4,但相对于手机上使用的闪存设备来说,Ext4这一基于Linux的文件系统还有很大的优化空间。

F2FS

F2FS “Flash Friendly File System”,一种专门为闪存而生的文件系统,其优势就是小文件的传输速率更快。近年来不断的有旗舰机采用这一文件系统,华为、OnePlus、三星等,也使得这一文件系统在高端机上得到普及,促进了它的不断优化和兼容性。

inode和block

文件系统通常会将 文件权限(rwx)与文件属性(拥有者、群组、时间参数等)这部份的数据放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。
每个 inode 与 block 都有编号,至于这三个数据的意义可以简略说明如下:

  • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 。

如下图所示,文件系统先格式化出 inode 与 block 的区块,假设某一个文件的属性与权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记录了文件数据的实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们的操作系统就能够据此来排列磁盘的读取顺序。 那么数据的读取就如同下图中的箭头所指定的模样了。
这种数据存取的方法我们称为索引式文件系统(indexed allocation)。

image.png

虚拟文件系统

文件系统的种类众多,而操作系统希望对用户提供一个统一的接口,于是在用户层与文件系统层引入了中间层,这个中间层就称为虚拟文件系统(Virtual File System,VFS)。

VFS 定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解 VFS 提供的统一接口即可。

挂载设备

什么是挂载? 当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,这个关联动作就是“挂载”。将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。

mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(就是说要把文件系统挂载到哪,首先要保证目录存在)

mount命令

mount /dev/sdb2 /backup
将设备 /dev/sdb2 挂载到 /backup 目录

系统重启后挂载就会失效,linux提供了/etc/fstab配置文件可以在重启后自动挂载。
如果想让这个某个设备文件的挂载永久有效,则需要把挂载的信息写入到配置文件中。
他的格式是:

设备文件 挂载目录 格式类型 权限选项 自检 优先级

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p3 during installation
UUID=a181a5a3-34b0-452a-8aa6-afd60efef515 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=2497-B2DC  /boot/efi       vfat    umask=0077      0       1
# /home was on /dev/sdb1 during installation
UUID=22e1e864-578a-460e-94ea-e03a6b890178 /home           ext4    defaults        0       2
# /home/data was on /dev/sda1 during installation
UUID=e1eafdad-5310-4dc5-a3ae-44c2aadd1949 /home/data      ext4    auto,nouser,rw        0       2
# swap was on /dev/nvme0n1p2 during installation
UUID=f7ce45d5-ba45-4932-a48d-b08dba88cb26 none            swap    sw              0       0

unmount命令

unmount /dev/sdb2 撤销挂载的设备文件

du命令

du [选项] [文件]
du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况,统计目录(或文件)所占磁盘空间的大小

例如:du -sh /*命令来查看在 Linux 系统根目录下所有一级目录分别占用的空间大小。

PC:/$ sudo du -sh /*
13M /bin
122M    /boot
4.0K    /cdrom
0   /dev
15M /etc

软链接和硬链接

在 Linux 系统中存在硬链接和软连接两种文件。

  • 硬链接(hard link):可以将它理解为一个“指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
  • 软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。

ln命令

ln 命令用于创建链接文件,格式为“ln [选项] 目标”

[图片上传失败...(image-6ebbcd-1627393728391)]

创建软链接:

PC:~/DEBUG$ echo "HelloWorld!" > readme.txt
PC:~/DEBUG$ ln -s readme.txt link.txt
PC:~/DEBUG$ cat readme.txt 
HelloWorld!
PC:~/DEBUG$ cat link.txt 
HelloWorld!
PC:~/DEBUG$ rm -rf readme.txt 
PC:~/DEBUG$ cat link.txt 
cat: link.txt: 没有那个文件或目录

软链接的原始文件删除后,链接也失效了

创建硬链接:

PC:~/DEBUG$ echo "HelloWorld!" > readme.txt
PC:~/DEBUG$ ln readme.txt hardlink.txt
PC:~/DEBUG$ cat readme.txt 
HelloWorld!
PC:~/DEBUG$ rm -rf readme.txt 
PC:~/DEBUG$ cat hardlink.txt 
HelloWorld!

硬链接的原始文件删除后,仍然可以通过硬链接文件来访问

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容