[Tutorials] 入门教程三--系统目录(文件系统)
Tofloor
poster avatar
Jack
deepin
2021-01-14 15:58
Author

一、文件系统是什么?

 

文件系统是对一个存储设备上的数据和元数据进行组织的机制。它的最终目的是把大量数据有组织的放入持久性(persistant)的存储设备中,比如硬盘和磁盘。文件系统(file system)是就是文件在逻辑上组织形式,它以一种更加清晰的方式来存放各个文件。数据被存入到某个分区中。

 

二、常见的文件系统:

 

NTFS:

 

Windows当前的默认文件系统,NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。

 

ExTN:

 

Ext系列是Linux的老牌文件系统了,一直是Linux的主打,从Ext3开始支持日志,Ext4更加完善了很多功能。由于其组织形式的限制,很难将很多现代文件系统的功能加进去,所以Linux才会出Btrfs项目企图重头开发一个功能强劲的文件系统。

 

Btrfs:

 

BTRFS(通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。目标是取代Linuxext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。

 

ZFS:

 

被称为真正的下一代文件系统,ZFS 提供卷管理(能够在单个文件系统中处理多个单独的存储设备),块级加密校验和(允许以极高的准确率检测数据损坏),自动损坏修复(其中冗余或奇偶校验存储可用),快速异步增量复制,内联压缩等,以及更多

 

linux 可以实现在一个根系统下,挂载多个文件系统。比如:双系统中 /media 目录下挂载 NTFS文件系统,/mnt 目录下,挂载U盘的文件系统。

 

三、虚拟文件系统(VFS)

 

Linux支持的 文件系统有上百种,难道Linux内核需要对上百种一一适配吗?

 

不需要。为了支持各种不同的文件系统,Linux 内核在用户进程和文件系统的中间,又引入了一个抽象层,也就是虚拟文件系统 VFS(Virtual File System)。

 

VFS 定义了一组所有文件系统都支持的数据结构和标准接口。这样,用户进程和内核中的其他子系统,只需要跟 VFS 提供的统一接口进行交互就可以了,而不需要再关心底层各种文件系统的实现细节。

 

下图是:系统调用、VFS、缓存、文件系统以及块存储之间的关系。

图源:极客时间

四、挂载文件系统:

先来介绍一下根文件系统:

根文件系统首先是一种文件系统,相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。

挂载:

在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。

挂载文件系统的过程:

在 Linux 系统启动阶段的最初阶段,root 文件系统就会被挂载到 root 目录下(/)。其它文件系统在之后通过 SystemV 下的 rc 或更新一些的 Linux 发行版中的 systemd 等 Linux 启动程序挂载。在启动进程中文件系统的挂载是由 /etc/fstab 配置文件管理的。

 

 

五、如何分区?

 

首先,在Linux下谈分区并不准确。

 

与Windows分区,一个分区一个盘符不同。Linux是一整个目录树,如下图。Linux先划分固定大小的磁盘空间,设置好文件系统后,将磁盘空间挂载到固定目录下。

 

Linux目录结构,最顶层的目录称为根目录。图源:拉勾教育

 

在开始之前先介绍一下,Linux不同目录的功能。

 

Linux根目录

 

目录

描述

/(root文件系统)

root 文件系统是文件系统的顶级目录。它必须包含在挂载其它文件系统前需要用来启动 Linux 系统的全部文件。它必须包含需要用来启动剩余文件系统的全部可执行文件和库。文件系统启动以后,所有其他文件系统作为 root 文件系统的子目录挂载到标准的、预定义好的挂载点上。

/bin

/bin 目录包含用户的可执行文件(ls,cat,mkdir等),常用命令一般在这里

/boot

存放用于系统引导时使用的各种文件

/dev

该目录包含每一个连接到系统的硬件设备的设备文件。这些文件不是设备驱动,而是代表计算机上的每一个计算机能够访问的设备。

/etc

包含主机计算机的本地系统配置文件

/home

存放所有用户文件的根目录,是用户主目录的基点每一个用户都有一个位于 /home 目录中的子目录(作为其主目录)。

/lib

包含启动系统所需要的共享库文件。

/media

一个挂载外部可移动设备的地方,比如主机可能连接了一个 USB 驱动器。

/mnt

一个普通文件系统的临时挂载点(如不可移动的介质),当管理员对一个文件系统进行修复或在其上工作时可以使用。

/opt

额外安装的可选应用程序包所放置的位置。比如供应商提供的应用程序应该安装在这儿。

/root

这不是 root(/)文件系统。它是 root 用户的主目录。

/sbin

系统二进制文件。这些是用于系统管理的可执行文件。

/tmp

临时目录。被操作系统和许多程序用来存储临时文件。用户也可能临时在这儿存储文件。注意,存储在这儿的文件可能在任何时候在没有通知的情况下被删除。

/usr

用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

  • /usr/bin 众多的应用程序  
  • /usr/sbin 超级用户的一些管理程序  
  • /usr/doc linux文档  
  • /usr/include linux下开发和编译应用程序所需要的头文件  
  • /usr/lib 常用的动态链接库和软件包的配置文件  
  • /usr/man 帮助文档  
  • /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里  
  • /usr/local/bin 本地增加的命令  
  • /usr/local/lib 本地增加的库

/var

可变数据文件存储在这儿。这些文件包括日志文件、MySQL 和其他数据库的文件、Web 服务器的数据文件、邮件以及更多。

/lost+found

这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里

Linux 文件系统层次结构的顶层,图源

 

在所有子目录中,粗体的目录组成了 root 文件系统的必需部分。它们(特别是它们包含的内容)必须在系统启动的时候出现,从而系统才能正确启动。剩下的非粗体的目录不需要在系统启动过程中出现,但会在之后挂载到 root 文件系统上,在开机阶段,它们为主机进行准备,从而执行有用的工作。

 

分区

 

以下作为分区的个人理解,如有不同意见,欢迎评论区交流。

 

为什么要分区?

  1. 数据安全:在不损失数据的情况下重装系统,比如独立设置 /home 挂载点,重装系统的时候直接标记回 /home,数据不会有任何损失。
  2. 效率(机械硬盘):将数据集中在某个分区,读取数据时,硬盘只会搜索相应区段,提升读取速度。

 

如何分区?

 

 

目录

建议大小

格式

描述

/

30G

ext4

根目录(必须分此区

/swap

最大8G

swap

swap目录有两个功能:1.系统休眠时将内存数据存储到 /swap上

2.内存不够时,使用 /swap 目录临时发挥 ‘虚拟内存’的作用。

注:通常,/swap大小 为内存的1~2倍。但我认为当下内存价格低廉,大于8G,直接加装内存,毕竟内存和硬盘的读取速度不可同日而语。(用到休眠功能的必须分此区

/boot

400M~1G

ext4

Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;启动装载文件存放位置,如kernels,initrd,grub。(必须分此区

/home

最大剩余

空间的一半

ext4

用户工作目录;个人配置文件,如个人环境变量等;所有账号分配一个工作目录。建议分此区。

/usr

最大剩余

空间的一半

ext4

储存所安装的程序和系统的配置文件,用户的很多应用程序和文件都放在这个目录下。经常搞机的强烈建议分此区

 

 

关于/usr分区,多说一句,因为我经常搞机,重装比较多,如果单独划分 /usr分区,装完系统,直接挂载就可以使用以前的数据啦。

如果你是普通用户,可以不分此目录。但 建议把 根目录 分得大一点,其他的空间给 /home 分区。

 

其他疑问,评论区交流。

 

 

拓展阅读:

磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

Linux各目录及每个目录的详细介绍

带你真正认识Linux 系统结构

linux一定需要文件系统吗?

低调的 Linux 文件系统家族

深入理解ext4等Linux文件系统

何为文件系统,何为根文件系统? - 蓬岸 Dr.Quest的回答 - 知乎

什么是文件系统?

诠释 Linux 中“一切都是文件”概念和相应的文件类型

网络套接字 -- 维基百科

谈谈计算机,说说文件系统 写文章

Linux 文件系统层次标准

分区

Unix/Linux的System V、BSD、Posix概念

Linux系统安装时分区的选择(推荐)

安装Ubuntu Linux系统时硬盘分区最合理的方法

Ubuntu分区方案(菜鸟方案、常用方案和进阶方案)

Linux磁盘分区的详细步骤(图解linux分区命令使用方法)

Linux交换空间(swap space)

分配swap分区swap --ArchLinux

 

 

 

参考资料:

  1. 文件系统--维基百科
  2. Arch安装指南
  3. Linux文件系统概览
  4. linux文件系统是怎么工作的?
  5. Linux下为什么要进行磁盘的分区
  6. 《Linux就该这么学》 -- 刘遄 第6章存储结构与磁盘划分
Reply Favorite View the author
All Replies
2 / 2
To page
Jack
deepin
2021-02-10 18:47
#21
191******64

多谢答复。

 

PS:

按照楼主的方法重装系统之后,win下就可以看到这种现象,有意思有意思~

哈哈哈,这种情况是识别到磁盘,但是win读取不到具体内容吗?

Reply View the author
191******64
deepin
2021-02-15 20:35
#22
Jack

哈哈哈,这种情况是识别到磁盘,但是win读取不到具体内容吗?

嗯嗯,所以两个系统都要用到文件我都存到NTFS磁盘里

Reply View the author
日斤
deepin
2022-04-04 00:22
#23
Jack

deepin默认安装方式是全盘安装,没有那么多分区的,想要在已经有的电脑上加上 /home 和/usr分区,只能重装系统,重新分区。

另外,你说话的方式让人很不舒服,互联网是免费的,知识是开源的,但这并不意味着我有义务给你解答问题,想要知道过程,自行百度。

没想到居然是个玻璃心。。。。真是服了。而且回答的问题也是错的。全盘安装就有默认的分区,分了好几个。半桶水又玻璃心,还好意思是评测组的?

Reply View the author
Jack
deepin
2022-04-04 01:20
#24
日斤

没想到居然是个玻璃心。。。。真是服了。而且回答的问题也是错的。全盘安装就有默认的分区,分了好几个。半桶水又玻璃心,还好意思是评测组的?

看看 网络警察 对我的指控:

半桶水又玻璃心,还好意思是评测组的?

拆解一下,对我不满的地方有三点:半瓶水,玻璃心,测评组。一个一个说:

1. 半瓶水

你的全盘安装有 /home /usr分区?来来来,给你看看其他用户的全盘安装:Deepin深度系统全盘安装后体验!_哔哩哔哩_bilibili,你给我找出来好几个分区里的 /home 和/usr 分区。

2. 玻璃心

原13楼是这样说的:

可以说说,一开始没分区,吼啦你想分区出home和usr,该怎么操作?

最好有详细步骤

这种要求别人详细回答的方式让人不舒服,我也说了可以百度。如果这是玻璃心,那么你连个帖子都没看明白就喷我,你这是啥?

3.测评组

聊这个我就来兴趣了,我们测评组是需要考核的,你不服你也进测评组,发帖子谈谈你对deepin的理解,让大家看看你是什么水平。

Reply View the author
日斤
deepin
2022-04-05 05:47
#25

你这个写的内容前后矛盾,搞得我还研究了半天。就像/usr的解释,两个表格不一样。

Reply View the author
日斤
deepin
2022-04-05 05:48
#26

你还是算了吧。我不知道你和深度什么关系,还是认真多学习吧。

Reply View the author
Jack
deepin
2022-04-05 22:38
#27
日斤

你这个写的内容前后矛盾,搞得我还研究了半天。就像/usr的解释,两个表格不一样。

好,你说我前后矛盾,看看我两个表格里怎么描述 /usr 路径的:

  1. 在关于 根目录下的描述:

    用于存放系统应用程序

  2. 在系统安装时自定义分区时的描述:

    储存所安装的程序和系统的配置文件,用户的很多应用程序和文件都放在这个目录下。

看起来不一致,1. 说存放 程序 2. 说存放 程序+系统配置,让你困惑。

结合5楼用户补充的:

/usr里面存放在/usr/share /usr/lib等目录的配置文件是默认的系统配置文件

因为/usr目录在软件更新经常时被覆盖,如果直接在/usr里修改配置,软件更新时不会被保留,因此自定义的系统配置文件通常在/etc

每个用户自己的配置文件在主目录的.开头隐藏文件或者~/.config里

可知,/usr 目录存放的是 程序+默认配置 而通常自定义配置写在 /etc目录里。

怎么样,现在还觉得我前后矛盾吗?

Reply View the author
Jack
deepin
2022-04-05 22:41
#28
日斤

你还是算了吧。我不知道你和深度什么关系,还是认真多学习吧。

talk is cheap, show me your code.

Reply View the author
2 / 2
To page