linux学习之存储结构与磁盘划分
主要内容:
Linux文件系统层次化标准(FHS,Filesystem Hierarchy Standard)
udev硬件命名规则
硬盘分区的规划方法
部署SWAP交换分区
配置quota磁盘配额服务
软硬链接
1 FHS(文件系统层次化标准)
Linux系统中一切文件都是从根目录“/”开始的,严格区分大小写,采用树状结构存放文件。
1.1 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 当文件系统发生错误时,将一些丢失的文件片段存放在这里
1.2 路径
绝对路径:从根目录“/”开始写起的文件或目录名称
相对路径:相对于当前路径(不具备普适性)
2 物理设备的命名规则
系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字猜出设备大致的属性以及分区信息等;udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。
常见的硬件设备及文件名称
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],系统采用a-p代表不同的硬盘,默认从a开始。
硬盘分区编号规则:
1.主分区或扩展分区的编号从1开始,到4结束
2.逻辑分区从编号5开始
知识点一:/dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序。
知识点二:分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的,因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区。
例:“/dev/sdb5”表示“这是系统第二个被识别的硬件设备上的编号为5的逻辑分区的设备文件”
知识点三:硬盘设备是由大量的扇区组成的。每个扇区的容量为512字节,其中第一个扇区最重要,保存着主引导记录与分区表信息。主引导记录需要占用446字节,分区表为64字节,结束符占用2字节,分区表中每记录一个分区信息需要16字节,这样一来最多只有4个分区信息可以写入第一扇区,这4个分区就是4个主分区。
为了解决分区个数不够的问题,可以将第一个扇区的分区表中16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。换言之,扩展分区并不是一个真正的分区,而是一个占用16字节分区表空间的指针。用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而满足多分区(大于4)的要求。
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针机构将形成一个单向链表。
3 文件系统与数据资料
Ext3: 是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分百保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4: Ext3的改进版本,作为RHEL6系统中的默认文件管理系统,它支持的存储容量高达1EB,且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS: 是一种高性能的日志文件系统,而且是RHEL7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。而且它最大可支持的存储容量为18EB,几乎满足了所有要求。
Linux系统中有一个名为“super block”的硬盘地图,Linux会把每个文件的权限与属性记录在inode中,而且每个文件仅占用一个独立的inode表格,表格的默认大小为128字节,表中有如下信息:
a.该文件的访问权限(r、w、x)
b 该文件的所有者与所属组(owner、group)
c 该文件的大小(size)
d 该文件的创建或内容修改时间(ctime)
e 该文件的最后一次访问时间(atime)
f 该文件的修改时间(mtime)
g 文件的特殊权限(SUID、GUID、SBIT)
h 该文件的真实数据地址(point)
而文件的实际内容则保存在block块中(大小可以是1KB、2KB或4KB),一个inode默认大小为128B(Ext3),记录一个block则消耗4B。当文件的inode被写满后,Linux系统会自动分配出一个block块,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。Linux内核中的软件层为用户提供了一个VFS(虚拟文件系统)接口,用户操作时不必面对底层的细节。
4 挂载硬件设备
挂载—卸载
挂载:当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是挂载。
4.1 mount命令
用于挂载文件系统,格式为“mount 文件系统 挂载目录”(在系统重启后挂载就会失效)
常用参数及作用:
-t 指定文件系统的类型(对于比较新的Linux系统一般不需使用,Linux会自动进行判断)
-a 挂载所有在/etc/fstab中定义的文件系统(他会在执行后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作)
% mount /dev/sdb2 /backup
若需永久挂载,需修改/etc/fstab配置文件
用于挂载信息的指定填写格式中,各字段所表示的意义:
设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID)
挂载目录 指定要挂载到的目录,需在挂载前创建好
格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项 若设置为defaults,则默认权限为:rw,suid,dev,exec,auto,nouser,async
是否备份 若为1则开机后使用dump进行磁盘备份,为0则不备份
是否自检 若为1则开机后自动进行磁盘自检,为0则不自检
在/etc/fstab文件中写入信息格式
/dev/sdb2(设备文件) /backup(挂载目录) ext4(格式类型) defaults(权限选项) 0(是否备份) 0(是否自检)
4.2 umount命令
用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”
% umount /dev/sdb2
5 添加硬盘设备
步骤:加入新的硬盘设备 → 分区 → 格式化 → 挂载
5.1 添加硬盘设备
5.1.1 fdisk命令(分区)
用于管理磁盘分区,格式为“fdisk [磁盘名称]”,提供了添加、删除、转换分区等功能。
常用参数及作用:
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区信息
w 保存并退出
q 不保存直接退出
主要输入分区大小,添加时输入+2G,删除时输入-2G
file命令
用于查看该文件的属性
partprobe命令
用于手动将分区信息同步至内核,一般推荐连续两次执行该命令。如此命令无法解决,则重启。
5.1.2 mkfs命令(格式化)
用于格式化操作,格式为“mkfs.文件类型名称”
如要格式分区为XFS的文件系统,则命令应为
% mkfs.xfs /dev/sdb1
5.1.3 挂载
步骤:创建一个用于挂载设备的挂载点目录 → 使用mount命令将存储设备与挂载点进行关联 → 使用df -h命令来查看挂载状态和硬盘使用量信息
1 % mkdir /newFS #创建挂载目录
2 % mount /dev/sdb1 /newFS #挂载设备与挂载点关联
3 % df -h # 显示挂载状态和硬盘使用量信息
5.2 du命令
用于查看文件数据占用量,格式为“du [选项] [文件]”,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。
还可以用du -sh/*命令查看在Linux系统根目录下所有一级目录分别占用的空间大小。
6 添加交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍。
6.1 mkswap命令
SWAP分区专用的格式化命令,对新建的主分区进行格式化操作:
% mkswap /dev/sdb2
6.2 swapon命令
用于把准备好的SWAP分区设备正式挂载到系统中
% swapon /dev/sdb2
6.3 永久保存
格式如挂载:
/dev/sdb2(设备文件) swap(挂载目录) swap(文件类型) defaults(权限选项) 0(是否备份) 0(是否自检)
7 磁盘容量配额
7.1 quota命令
用于进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。此外,还有软限制和硬限制功能。
软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
早期RHEL让硬盘设备支持quota磁盘容量配额服务,使用的是usrquota参数,RHEL7系统使用的是uquota参数。
7.2 xfs_quota命令
此命令是一个专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令,格式为“xfs_quota [参数] 配额 文件系统”
常用参数及作用:
-c 用于以参数的形式设置要执行的命令
-x 专家模式,让运维人员能够对quota服务进行更多复杂的配置。
例:硬盘使用量的软限制和硬限制分别为3M、6M,创建文件数量的软限制和硬限制分别为3个和6个。
% xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
% xfs_quota -x -c report /boot
7.3 edquota命令
用于编辑用户的quota配额限制,格式为“edquota [参数] [用户]”。
常用参数及作用:
-u 表示要针对哪个用户进行设置
-g 表示要针对哪个用户组进行设置
8 软硬方式链接
8.1 软硬方式链接
类似于Windows系统中的快捷方式,Linux系统中存在硬链接和软链接两种文件:
硬链接:可以将其理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。每添加一个链接,该文件的inode连接数就会增加1,而且只有当该文件的inode连接数为0时,才算彻底删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即使原始文件被删除,依然可以通过硬链接文件来访问。由于技术的局限性,不能跨分区对目录文件进行链接。
软链接(符号链接):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接,当原始文件被删除后,链接文件也将失效,同Windows系统中的快捷方式性质相同。
8.2 ln命令
用于创建链接文件,格式为“ln [选项] 目标”
常用参数及作用:
-s 创建“符号链接”(如果不带-s参数,则默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程