Linux 分区
Linux 分区
硬盘说明
在硬盘上能够安装系统或者存放数据,但前提是必须要对硬盘进行分区和格式化(格式化其实就是初始化文件系统),不同的分区存放不同的数据,从而避免数据杂乱无章堆积在一起。
分区有三种:主分区、扩展分区、逻辑分区。一块磁盘最多可以有 4 个主分区,最多只能有一个扩展分区,同时,一个主分区的位置可以用一个扩展分区替换。如果规划的分区数量超过 4 个,则分区组合为 3 个主分区 +1 个扩展分区或两个主分区 +1 个扩展分区或 1 个主分区一个扩展分区,扩展分区不能直接使用,必须在扩展分区上划分逻辑分区,然后格式化 (创建文件系统),之后才能存取数据或安装系统。
Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘。对于 IDE 硬盘,驱动器标识符为hdx~
,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了,SCSI 硬盘则标识为sdx~
。“x”为盘号,a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘,~
代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
文件系统
一个空白的磁盘分区只有在设置了文件系统后并挂载上挂载点后,分区才能存放数据。
设置文件系统(initialize file system)有另一个通俗易懂的名字——格式化(format),格式化(format)其实就是初始化文件系统的意思。
计算机存储介质当中,总是有两部分,一个是真实存储所谓数据区,一个是目录表,目录表中记录的是从哪块到哪块我存了什么数据,格式化之后,存数据的那一块不一定被清空,但是目录表被清空,你看不到现有的数据,数据也就看起来被删除了,下回再往里存数据的时候,就会覆盖原来的数据,所以格式化会删除据,只是一个副作用而已。格式化最主要的作用,是初始化文件系统。
-
ext2/ext3/ext4:适合 Linux 的文件系统类型。由于 ext3 文件系统多了日志记录功能,因此系统恢复起来会更快速,ext4 是 ext3 的升级,效率更加高,因此建议使用默认的 ext4 类型,而不要使用 ext2/ext3。
-
tmpfs:临时文件系统,df 命令的结果中会看到
-
swap:交换分区文件系统。
-
RAMFS:内存文件系统,速度很快;
-
iso9660:光盘或光盘镜像;
-
NFS:网络文件系统,由 SUN 发明,主要用于远程文件共享;
-
MS-DOS:MS-DOS 文件系统;
-
FAT:Windows XP 操作系统采用的文件系统;
-
NTFS:Windows NT/XP 操作系统采用的文件系统。
-
physical volume(LVM):一种弹性调整文件系统大小的机制,可以让文件系统变大或变小,而不改变原有文件数据的内容,功能不错,但性能会下降。
-
software RaID:利用 Linux 系统的特性,用软件仿真出磁盘阵列的功能。
-
vfat:同时被 Linux 与 Windows 所支持的文件系统类型。如果主机硬盘上同时存在。Windows 与 Linuκ两种操作系统,有数据交换需求,可以使用该文件系统。
-
κfs:一个文件系统类型,在 Centos7 中将被作为默认的文件系统类型而替换 ext4
分区和目录的概念关系
文件系统位于磁盘分区中;一个硬盘可以有多个分区,也可以只有一个分区;一个分区只能包含一个文件系统。挂载,就是把一个外部的文件系统(一般都可以简单理解为硬盘分区,也可以是其他的东西)映射到 Linux 系统的一个目录上(Linux 的目录存在于跟分区的文件系统中),让用户可以直接通过此目录访问外部文件系统中的文件。所以,挂载,实际上就是两个文件系统的连接。
在 Linux 系统安装过程中,把同一块磁盘分成根分区、boot 分区和 swap 分区,根分区的文件系统就是根目录,boot 分区挂载到根目录下的/boot
目录下。其他的硬盘设备接入/device
或者/mnt
目录就更容易理解了,一样的道理。
关于再安装 Linux 的过程中的分区,请看《VMware 在安装 Centos7 时的注意点》
总的来看,目录是逻辑上的区分。分区是物理上的区分。
对 Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分。
查看系统所有设备挂载情况
df
和 lsblk
这两个命令是硬盘常用命令,要熟记。
df disk free
Linux df(英文全拼:disk free)命令用于显示目前在 Linux 系统上(挂载的,没挂载的不会显示)的文件系统(一般都是磁盘分区)磁盘使用情况统计
|
|
直接输入df
:
/dev/sda3
和/dev/sda1
很好理解,是 Linux 系统设备管理器识别到的设备(实际上就是根分区和 boot 分区),可以发现,根分区和 boot 分区,都是 SCSI 硬盘(sd 开头)。这里的 tmpfs 是什么?请看:Tmpfs — The Linux Kernel documentation。
Tmpfs 是一个文件系统,这个文件系统把它内部所有的文件都放到虚拟内存中。tmpfs 中的所有内容都是临时的,不会写入到硬盘中,如果你取消挂载一个 tmpfs 文件系统,这个文件系统内部的所有东西都会消失。tmpfs 文件系统会把所有的 Linux 内核的内部缓存中,而且根据所存文件的大小自动调整所占空间。
因为 tmpfs 读写很快(在内存中而不是在硬盘中),所以有时候会把这个文件系统用于一些特殊用途。
tmpfs 对应的/run/user/$uid
是什么意思呢?
/run/user/$uid
由 pam_systemd 创建,用于存储该用户的运行进程使用的文件。这些进程可能是 keyring daemon(密钥环守护程序)、pulseaudio 等。
在 systemd 之前,这些应用程序通常将它们的文件存储在 /tmp
中。他们不能使用 /home/$user
中的位置,因为主目录通常安装在网络文件系统上,并且这些文件不应在主机之间共享。 /tmp
是 FHS(Filesystem Hierarchy Standard)指定的唯一位置,它是本地的,所有用户都可以写。
然而,将所有这些文件存储在 /tmp
中是有问题的,因为 /tmp
是每个人都可以写的,虽然你可以更改正在创建的文件的所有权和模式,但使用起来更加困难。
所以 systemd 出现并创建了 /run/user/$uid
。该目录是系统本地的,只能由目标用户访问。因此,希望在本地存储文件的应用程序不再需要担心访问控制。
它还可以让事情变得井井有条。当用户注销并且没有活动会话保留时,pam_systemd 将清除 /run/user/$uid
目录。由于 /tmp
中的文件都是零散分布的,你在/tmp
中就无法做到这一点。
简单实践:
df -T
:可以看到文件系统的类型
你也可以直接看某个文件所在文件系统的磁盘使用情况
df /home
:
用更可读的方式输出结果,这个参数我们在 ls
命令中也见过
df -h
:
可以看到文件大小更易读了
lsblk lists information about all available or the specified block devices
lsblk
查看系统识别到的硬盘和其分区的情况
其中sr0
是一个光驱
这里可以看到系统里只有一块硬盘,如果我们在增加一块硬盘,这里会出现两块硬盘,这个后面会有演示
lsblk -f
查看系统识别到的硬盘和其分区的文件系统类型。
其中,ext4 和 swap 就是文件系统的类型,UUID 是当你格式化一个分区的时候,会给每一个分区分配一个 40 位的唯一标识符,mountpoint 就是挂载点的意思。
其他命令
fdisk -l
可以显示出所有挂载和未挂载的分区,但不显示文件系统类型。
parted -l
可以查看未挂载的文件系统类型,以及哪些分区尚未格式化。