存储结构:
➢ 一切从“/”开始;
➢ 物理设备的命名规则;
➢ 文件系统与数据资料;
➢ 挂载硬件设备;
➢ 添加硬件设备;
➢ 添加交换分区;
➢ 磁盘容量配额;
➢ 软硬方式链接。
6.1 一切从“/”开始
Linux 系统中常见的目录名称以及相应内容
目录名称 应放置文件的内容
/boot 开机所需文件 — 内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户家目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin 与/sbin 下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的“共享”临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbinLinux 系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
6.2 物理设备的命名规则
常见的硬件设备及其文件名称
硬件设备 文件名称
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
硬盘分区:
硬盘的分区编号也很有讲究:
➢ 主分区或扩展分区的编号从 1 开始,到 4 结束;
➢ 逻辑分区从编号 5 开始。
硬盘设备是由大量的扇区组成的,每个扇区的容量为 512 字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446 字节,分区表为 64 字节,结束符占用 2 字节;其中分区表中每记录一个分区信息就需要 16字节,这样一来最多只有 4个分区信息可以写到第一个扇区中,这 4 个分区就是 4 个主分区。第一个扇区中的数据信息如图
将第一个扇区的分区表中 16 字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用 16 字节分区表空间的指针,一个指向另外一个分区的指针。这样一来,用户一般会选择使用 3 个主分区加 1 个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于 4 个)的需求。
注意:所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。
6.3 文件系统与数据资料
硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。常见的文件系统数十种:
常见的有:
➢ Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
➢ Ext4:Ext3 的改进版本,作为 CentOS 6 系统中的默认文件管理系统,它支持的存储容量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4 文件系统能够批量分配 block 块,从而极大地提高了读写效率。
➢ XFS:是一种高性能的日志文件系统,而且是 CentOS 7 中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB,这几乎满足了所有需求。
日常在硬盘需要保存的数据实在太多了,因此 Linux 系统中有一个名为 super block 的“硬盘地图”。Linux 并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。Linux 只是把每个文件的权限与属性记录在 inode 中,而且每个文件占用一个独立的 inode 表格,该表格的大小默认为 128 字节,里面记录着如下信息:
➢ 该文件的访问权限(read、write、execute);
➢ 该文件的所有者与所属组(owner、group);
➢ 该文件的大小(size);
➢ 该文件的创建或内容修改时间(ctime);
➢ 该文件的最后一次访问时间(atime);
➢ 该文件的修改时间(mtime);
➢ 文件的特殊权限(SUID、SGID、SBIT);
➢ 该文件的真实数据地址(point)。
而文件的实际内容则保存在 block 块中(大小可以是 1 KB、2KB 或 4KB),一个 inode 的默认大小仅为 128B(Ext3),记录一个 block 则消耗 4B。当文件的 inode 被写满后,Linux 系统会自动分配出一个 block 块,专门用于像 inode 那样记录其他 block 块的信息,这样把各个 block 块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的 block 块,有下面两种常见情况(以 4KB )block 大小为例进行说明)。
➢ 情况 1:文件很小(1KB),但依然会占用一个 block,因此会潜在地浪费 3KB。
➢ 情况 2:文件很大(5KB),那么会占用两个 block(5KB-4KB 后剩下的 1KB 也要占用一个 block)。
VFS(Virtual File System,虚拟文件系统)
为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux 内核中的软件层为用户程序提供了一个 VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。
6.4 挂载硬件设备
当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。
6.4.1 mount命令
mount命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。
mount 命令中的参数以及作用
参数 作用
-a 挂载所有在/etc/fstab 中定义的文件系统
-t 指定文件系统的类型
永久挂载(开机挂载)/etc/fstab
用于挂载信息的指定填写格式中,各字段所表示的意义
字段 意义
设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
挂载目录 指定要挂载到的目录,需在挂载前创建好
格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项 若设置为 defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份 若为 1 则开机后使用 dump 进行磁盘备份,为 0 则不备份
是否自检 若为 1 则开机后自动进行磁盘自检,为 0 则不自检
例子:挂载光盘
[root@wen ~]# vim /etc/fstab
/dev/sda /mnt iso9660 defaults 0 0
6.4.2 umount 命令
umount 命令用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”
例子:卸载光盘
[root@wen ~]# umount /dev/sda
6.5 添加硬盘设备
关闭虚拟机–添加硬盘SCSI–分区–格式化–挂载
6.5.1 fdisk 命令
fdisk 命令中的参数以及作用
参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区信息
w 保存并退出
q 不保存直接退出
分区步骤:
A.查询硬盘信息 [root@wen ~]# fdisk /dev/sdb 提示信息后输入参数 p 来查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息:
B.输入参数 n 尝试添加新的分区。系统会要求您是选择继续输入参数 p 来创建主分区,还是输入参数 e 来创建扩展分区
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
c.主分区的编号范围是1~4,输入+2G 即可创建出一个容量为2GB 的硬盘分区
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 此处敲击回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set
D.成功创建/dev/sdb1
[root@wen ]# file /dev/sdb1 //查看文件属性
/dev/sdb1: cannot open (No such file or directory)
[root@wen ]# partprobe //手动将分区信息同步到内核
[root@wen ]# file /dev/sdb1
/dev/sdb1: block special //成功同步到内核
格式化文件系统:
在 Linux 系统中用于格式化操作的命令是 mkfs,如果硬件存储设备没有进行格式化,则 Linux 系统无法得知怎么在其上写入数据。
例如:要格式分区为 XFS 的文件系统
[root@wen ]# mkfs.xfs /dev/sdb1
挂载:
首先是创建一个用于挂载设备的挂载点目录;然后使用 mount 命令将存储设备与挂载点进行关联;最后使用 df -h 命令来查看挂载状态和硬盘使用量信息。
设备文件挂载永久有效,需要把挂载信息写入配置文件(/etc/fstab)
6.5.2 du 命令
用于查看文件数据占用量的 du 命令,其格式为“du [选项] [文件]”。 du -Th
6.6 添加交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。
交换分区的大小一般为真实物理内存的 1.5~2 倍,
创建交换分区
格式化交换分区(mkswap) [root@wen ~]# mkswap /dev/sdb2
使用 swapon 命令把准备好的 SWAP 分区设备正式挂载到系统中。我们可以使用 free -m 命令查看交换分区的大小变化(由2047MB 增加到7167MB):
6.7 磁盘容量配额
使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用 quota 命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota 命令还有软限制和硬限制的功能。
➢ 软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
➢ 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
例子:创建一个用于检查 quota 磁盘容量配额效果的用户 tom,并针对/boot 目录增加其他人的写权限,保证用户能够正常写入数据:
[root@wen ~]# useradd tom
[root@wen ~]# chmod -Rf o+w /boot
6.7.1 xfs_quota 命令
xfs_quota 命令是一个专门针对 XFS 文件系统来管理quota 磁盘容量配额服务而设计的命令,格
式为“xfs_quota [参数] 配额 文件系统”。其中,-c 参数用于以参数的形式设置要执行的命令;-x 参数
是专家模式,让运维人员能够对 quota 服务进行更多复杂的配置。
例子:使用 xfs_quota 命令来设置用户 tom 对/boot 目录的 quota 磁盘容量配额。具体的限额控制包括:硬盘使用量的软限制和硬限制分别为3MB 和6MB;创建文件数量的软限制和硬限制分别为3 个和6个
[root@nebulalinux ~]# xfs_quota -x -c ‘limit bsoft=3m bhard=6m isoft=3 ihard=6
tom’ /boot
[root@nebulalinux ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1) Blocks
User ID Used Soft Hard Warn/Grace
root 95084 0 0 00 [——–]
tom 0 3072 6144 00 [——–]
6.7.2 edquota 命令
edquota 命令用于编辑用户的 quota 配额限制,格式为“edquota [参数] [用户] ”。在为用户设置了 quota 磁盘容量配额限制后,可以使用 edquota 命令按需修改限额的数值。其中,-u 参数表示要针对哪个用户进行设置;-g 参数表示要针对哪个用户组进行设置。edquota 命令会调用 Vi 或Vim 编辑器来让 root 管理员修改要限制的具体细节。下面把用户 tom 的硬盘使用量的硬限额从5MB 提升到 8MB:
[root@wen ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda 6144 3072 8192 1 3 6
[root@wen ~]# su - tom
Last login: Mon Sep 7 16:43:12 CST 2017 on pts/0
[tom@wen ~]
ddif=/dev/zeroof=/boot/tombs=8Mcount=11+0recordsin1+0recordsout8388608bytes(8.4MB)copied,0.0268044s,313MB/s[tom@wen ]
d
d
i
f
=
/
d
e
v
/
z
e
r
o
o
f
=
/
b
o
o
t
/
t
o
m
b
s
=
8
M
c
o
u
n
t
=
1
1
+
0
r
e
c
o
r
d
s
i
n
1
+
0
r
e
c
o
r
d
s
o
u
t
8388608
b
y
t
e
s
(
8.4
M
B
)
c
o
p
i
e
d
,
0.0268044
s
,
313
M
B
/
s
[
t
o
m
@
w
e
n
]
dd if=/dev/zero of=/boot/tom bs=10M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
8388608 bytes (8.4 MB) copied, 0.167529 s, 50.1 MB/s
6.8 软硬方式链接
在 Windows 系统中,快捷方式就是指向原始文件的一个链接文件,可以让用户从不同的位置来访问原始的文件;原文件一旦被删除或剪切到其他地方后,会导致链接文件失效。但是,这个看似简单的东西在 Linux 系统中可不太一样.
在 Linux 系统中存在硬链接和软连接两种文件。
➢ 硬链接(hard link):可以将它理解为一个“指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
➢ 软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,软链接文件也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。
6.8.1 ln 命令
ln 命令用于创建链接文件,格式为“ln [选项] 目标”
ln 命令中可用的参数以及作用
参数 作用
-s 创建“符号链接”(如果不带-s 参数,则默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程
创建软链接:
[root@wen ~]# echo “Welcome to nebulalinux.com” > readme.txt
[root@wen ~]# ln -s readme.txt readit.txt //-s创建软链接文件
[root@wen ~]# cat readme.txt
Welcome to nebulalinux.com
[root@wen ~]# cat readit.txt
Welcome to nebulalinux.com
[root@wen ~]# ls -l readme.txt
-rw-r–r– 1 root root 26 Jan 11 00:08 readme.txt
[root@wen ~]# rm -f readme.txt //删除原文件
[root@wen ~]# cat readit.txt //软链接中,原文件删除,软链接文件失效
cat: readit.txt: No such file or directory
创建硬链接:
[root@wen ~]# echo “Welcome to nebulalinux.com” > readme.txt
[root@wen ~]# ln readme.txt readit.txt //-s创建硬链接文件
[root@wen ~]# cat readme.txt
Welcome to nebulalinux.com
[root@wen ~]# cat readit.txt
Welcome to nebulalinux.com
[root@wen ~]# ls -l readme.txt
-rw-r–r– 1 root root 26 Jan 11 00:08 readme.txt
[root@wen ~]# rm -f readme.txt //删除原文件
[root@wen ~]# cat readit.txt //硬链接中,原文件删除,硬链接文件失效
Welcome to nebulalinux.com
练习题:
1./home 目录与/root 目录内存放的文件有何相同点以及不同点?
答:这两个目录都是用来存放用户的家目录数据的,但是,/root 目录存放的是 root 管理员的家目录数据,/home目录用来存放普通用户目录数据的
2.假如一个设备的文件名称为/dev/sdb,可以确认它是主板第二个插槽上的设备吗?
答:不一定,因为设备的文件名称是由系统的识别顺序来决定的。
3.如果硬盘中需要 5 个分区,至少需要几个逻辑分区?
答:可以选用创建 3 个主分区+1 个扩展分区的方法,然后把扩展分区再分成 2 个逻辑分区,即 5 个分区
4./dev/sda5 是主分区还是逻辑分区?
答:逻辑分区。
5.哪个服务决定了设备在/dev 目录中的名称?
答:udev 设备管理器服务。
6.用一句话来描述挂载操作。
答:当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。
7.在配置 quota 磁盘容量配额服务时,软限制数值必须小于硬限制数值么?
答:不一定,软限制数值可以小于等于硬限制数值。
8.若原始文件被改名,那么之前创建的硬链接还能访问到这个原始文件么?
答:可以。硬链接中,原文件删除、修改,链接文件依然可以访问。