第6章 存储结构与磁盘划分

章节简述:

本章节从Linux系统的存储结构引入,讲述硬盘存储结构硬件命名规则以及内核Udev设备管理器服务

让读者理解文件系统的作用,能够区分ext3,ext4,xfs有何不同并学习将硬盘设备分区格式化以及挂载等常用硬盘管理操作。

完整配置SWAP交换分区quota服务限制磁盘配额ln命令创建软/硬链接RAID磁盘阵列(01510)LVM逻辑卷管理器

本章目录结构

  • 6.1 一切从“/”开始
  • 6.2 物理设备的命名规则
  • 6.3 文件系统与数据资料
  • 6.4 挂载硬件设备
  • 6.5 添加硬盘设备
  • 6.6 添加交换分区
  • 6.7 磁盘容量配额
  • 6.8 虚拟文件系统
  • 6.9 软硬方式链接
6.1 一切从“/”开始

这是一张在Windows™操作系统中文件的属性图,你能准确的找到它吗?

第6章 存储结构与磁盘划分_第1张图片

要想找到这个镜像文件则需要依次进入“D盘”再进入“《Linux就该这么学》”目录中的“第一章”目录,但在类Unix系统中并不存在C/D/E/F盘符呦,一切的文件都是从“根(/)”目录开始的并按照文件系统目录标准FHS采用树形结构来存放文件并定义了每个区域的用途。

Linux存储架构

目录名称严格的区分大小写,例如rootrOOtRootrooT等等均代表是不同的独立目录,并且名称中不得包含反斜杠(/)。

主要常见的目录定义:

编辑
目录名称 应放置文件的内容
/boot 开机所需文件——内核,开机菜单及所需配置文件等
/dev 任何设备与接口都以文件形式存放在此目录
/etc 配置文件
/home 用户主目录
/bin 单用户维护模式下还能够被操作的命令
/lib 开机时用到的函数库及/bin与/sbin下面命令要调用的函数
/sbin 开机过程中需要的
/media 一般挂载或删除的设备
/opt 放置第三方的软件
/root 系统管理员的主文件夹
/srv 一些网络服务的数据目录
/tmp 任何人均可使用的“共享”临时目录
/proc 虚拟文件系统,例如系统内核,进程,外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin 非系统开机时需要的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件。
/var 主要存放经常变化的文件,如日志。
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里

另外一个重要的概念“路径”,这个路径指的是如何找到某个文件,分为“绝对路径”与“相对路径”:

绝对路径(absolute):由根目录(/)开始写起的目录或文件名

相对路径(relative):相对于当前路径的写法

举例来说一个美国人想找下厕所,你有两种回答的方法。

绝对路径:首先坐飞机来到中国,到了北京出首都机场做地铁到十号线潘家园站,出站坐34路到农光里下车路口左转。

相对路径:前面路口左转

如果你说的是绝对路径,那么任何一个外国人都可以按照这个提示找到厕所,但缺点是过于繁琐,如果说的是相对路径,那么这个美国人并不是在每个路口左转都能找到厕所,缺点是不具备普遍性

 

6.2 物理设备的命名规则

因为计算机中有了硬盘设备才使得我们游戏通关过后可以保存记录而不是再重新开始,硬盘设备则是由大量的“扇区”组成的,其中第一个扇区保存着主引导记录分区表信息。单个扇区容量为512bytes组成,主引导记录需要占用446bytes,分区表的为64bytes,结束符占用2bytes,而其中每记录一个分区信息需要16bytes,那么问题来了,好像只能记录4个分区信息?

硬盘的扇区

所以运维人员一般会选择用3个主分区加1个扩展分区的方法,扩展分区中能够创建无限个逻辑分区,这样我们就可以用逻辑分区来满足多分区的需求了,当然这里大家只需明白为什么主分区不能超过4个

 

Linux系统中一切都是文件,那么硬件也不外乎。既然是文件就必须有名称啦,系统内核的设备管理器(Udev)会自动将硬件名称规范起来,让我们可以通过设备名称猜出设备大致的属性以及分区信息等,Udev会一直以守护进程的形式运行并侦听来自内核发出的uevent来管理/dev目录下的设备文件。

Udev会根据内核发出的uevent来动态添加或删除/dev目录中的设备文件,命名流程如下:第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(IDE设备)

因为现在的IDE设备已经很少见啦,所以一般硬盘设备都会是以“/dev/sd”开头的,而一台主机上可以有多块硬盘,系统便会用a-p来代表16块不同的硬盘(默认从a开始分配)且分区编号也很有讲究。

主分区编号从1开始至4结束,按顺序(也可指定分配数字)。

逻辑分区从编号5开始按顺序(也可指定分配数字)。

那么来分析下"/dev/sda5"代表着什么硬件设备吧~

硬盘命名规则

1.首先/dev目录下的都是硬件。
2.其次sd开头的是存储设备。
3.然后a代表第一个被识别到的设备。
4.最后5代表它是逻辑分区。

简单来讲:“这是第一块硬盘设备中编号为5的逻辑分区”,物理中的存储会是这样的:

逻辑分区

读者们来试着解读下/dev/hdc8代表着什么?答案模式

答案:这是第三块IDE设备(比较少见了)中的编号为8的逻辑分区。

6.3 文件系统与数据资料

文件管理系统的作用是将硬盘合理的规划,使得用户能够在上面正常建立文件写入读取修改转存文件控制文件,而在Linux系统中支持超过数十种文件管理系统可供选择,常见的如下:

Ext3是一款日志文件系统能够在异常停机中避免文件系统资料不一致的情况,自动修复数据的不一致与错误,然而一般重整文件系统相当耗费时间(尤其容量大的硬盘),当然也不能保证100%资料不流失。它将会将整个磁盘的写入动作预先记录下来(每个细节),所以在异常停机后可以回溯追踪到被中断的部分。

Ext4可以成为Ext3的后继版本,作为RHEL6系统的默认文件管理系统,其支持更大的文件系统到1EB(1EB=1,073,741,824GB且能够有无限多的子目录),另外Ext4文件系统能够批量分配block块并作"Extents"极大的提高了读写效率。

XFS作为RHEL7默认的文件管理系统,它的日志型文件管理系统的优势在意外关机后尤其明显,可以快速的恢复可能被破坏的文件,另外经过优化后日志功能对硬盘性能影响非常小,同时最大支持18EB的存储容量满足了几乎所有需求。

讲课的时候我喜欢举得一个例子,希望能够帮助大家理解这个概念。
当我们拿到了一张大白纸,首先为了使用方便要裁剪,然后为了书写工整要先画格。
这里的“白纸”就是原始的硬盘而“裁剪”意味着分区,然后的“画格”就是格式化啦,最后写入内容。

因为硬盘要保存的数据实在太多了,所以一定要有个叫super block的“硬盘地图”并在上面记录着整个文件系统的信息,但绝不可能把数据直接写到这个大地图中,因为这样的话会导致它“很大”,查询与写入速度会变得非常慢,于是每个文件的权限与属性都会记录在inode table中(每个文件都会占用一个独立的inode表格,默认为128bytes),记录着:

该文件的访问权限(read,write,execute)
该文件的所属主与组(owner,group)
该文件的大小(size)
该文件的创建或状态修改时间(ctime)
该文件的最后一次访问时间(atime)
该文件的修改时间(mtime)
文件的特殊权限(SUID,SGID,SBIT)
该文件的真实数据地址(point)

而实际的数据则保存在block块中(大小可以是1K、2K或4K),下面的说明中,我们以4K为例。

情况一:文件体积很小(1K),那么依然会占用一个block,潜在的浪费3K。
情况二:文件体积很大(5K),那么会占用两个(5K-4K剩下的1K也要占用一个block)。

一个inode大小仅为128bytes(Ext3),但记录一个block则消耗4bytes,当写inode被占满后会取出一个block用于号码记录而不再是保存实际的文件系统。

6.4 挂载硬件设备

挂载操作指的是当用户需要使用硬盘设备分区数据时,需要先将与一个已存在的目录文件做关联,而这个动作就叫“挂载”。

mount命令用于挂载文件系统,格式为:“mount 文件系统 挂载目录”。
将光盘文件挂载:“mount /dev/cdrom /media/cdrom”。
编辑
参数 作用
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型

如果需要将设备"/dev/sdb2"挂载到"/backup"目录,文件格式为ext4,该如何操作那?

执行命令:mount /dev/sdb2 /backup

很惊讶吗?mount命令只需要填写设备与挂载目录参数即可,一般来讲系统会自动去判断要挂载文件的类型~

使用mount命令执行挂载操作后立即就可以使用该文件系统了,但重启后则失效。如果想让重启后依然生效,我们就必须将挂载信息按照指定的格式写入到/etc/fstab文件中。
/etc/fstab”包含着文件系统挂载信息等内容,因为过于重要,所以只有root用户才可以编辑它。

填写格式如下:“设备文件 挂载目录 格式类型 权限选项 自检 优先级”

设备文件:一般为设备的路径+名称,也可以写UUID值等。
挂载目录:指定要挂载到的目录,需挂载前创建好。
格式类型:即指定文件系统的格式,比如有ext3/ext4/xfs/iso9660/swap等。
权限选项:默认为defaults(rw,suid,dev,exec,auto,nouser,async),可指定acl或quota等。
自检:若为1则开机后进行磁盘自检,0为不自检。
优先级:若“自检”为1,则可对多块硬盘进行优先级设置。

定义设备"/dev/sdb2"开机自动挂载到"/backup"目录,文件格式为ext4默认权限且无需开机自检:

正确写法:“/dev/sdb2 /backup ext4 defaults 0 0”。

当读者挂载光盘镜像的时候请将文件类型设置为iso9660,其余设备类型请结合实际情况灵活使用。

umount命令用于撤销已经挂载的设备文件,格式为:“umount [挂载点/设备文件]”。

取消对/dev/sdb2设备文件的挂载:

[root@linuxprobe ~]# umount /dev/sdb2

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),点此查看全国群。

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

6.5 添加硬盘设备

当全新安装了一块新的硬盘设备后,为了更充分、安全的利用硬盘空间首先要进行磁盘的分区,然后格式化,最后挂载使用。

模拟训练:对新添加的硬盘设备进行分区、格式化并挂载到/newFS目录。
第1步: 在虚拟机中添加用来做逻辑卷实验的硬盘。
在虚拟机中添加硬盘
请您按照下面的幻灯片逐步操作,可点击图片两侧箭头或下方小圆点“○”切换步骤。
  • 第6章 存储结构与磁盘划分_第3张图片
    第2步:选择磁盘。
  • 第6章 存储结构与磁盘划分_第4张图片
    第3步:选择磁盘类型。
  • 第6章 存储结构与磁盘划分_第5张图片
    第4步:选择创建新的磁盘。
  • 第6章 存储结构与磁盘划分_第6张图片
    第5步:设置磁盘的大小。
  • 第6章 存储结构与磁盘划分_第7张图片
    第6步:默认的磁盘名称即可。
  • 第6章 存储结构与磁盘划分_第8张图片
    第7步:成功添加的硬盘出现在列表中。

 

第2步:将新添加的硬盘进行分区。
fdisk命令用于管理磁盘分区,格式为:“fdisk [磁盘名称]”。
管理某硬盘的分区:“fdisk /dev/sda”
编辑
参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区表信息
w 保存并退出
q 不保存直接退出

使用fdisk命令对sdb硬盘进行分区:

[root@linuxprobe ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x47d24a34.

敲击字符p查看分区表信息(当前为空):

Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x47d24a34
Device Boot Start End Blocks Id System

敲击字符n创建新的分区信息:

Command (m for help): n

敲击字符p,这个p代表是主分区,e为扩展分区:

Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p

敲击数字1代表分区编号为1:

Partition number (1-4, default 1): 1

磁盘的起始扇区,直接回车即可:

First sector (2048-41943039, default 2048):

键入+2G,代表该分区的大小为2G:

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

再看下分区表信息(增加了sdb1分区信息):

Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x47d24a34
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux

敲击字符w,将上述分区信息保存:

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

让内核同步分区信息(此步骤仅在没有找到分区设备的情况下才需要执行,非必要动作。):

[root@linuxprobe ~]# partprobe

第3步:格式化为xfs文件系统。

在Linux系统中用于格式化的命令是mkfs,它支持的文件类型有:

cramfs,ext2,ext3,ext4,fat,msdos,xfs,btrfs,minix,vfat
使用方法非常的简单:" mkfs.文件类型名称",例如要格式分区为 ext4,则命令为" mkfs.ext4 硬盘分区名称"。

使用mkfs.xfs来对/dev/sdb1进行格式化:

[root@linuxprobe ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
第4步:将硬盘设备挂载到/newFS目录。

[root@linuxprobe ~]# mkdir /newFS

[root@linuxprobe ~]# mount /dev/sdb1 /newFS/

第5步:设置系统启动后自动挂载该硬盘设备。
[root@linuxprobe ~]# vim /etc/fstab
/dev/sdb1 /newFS xfs defaults 0 0
第6步: 查看文件系统的使用情况。

好棒!我们现在就可以通过访问/newFS目录来使用硬盘资源啦!另外多教给您几条用于日常了解硬盘使用情况的命令:

df命令用于查看挂载点信息与磁盘使用量,格式为:“df [选项] [文件]”。
查看挂载信息与硬盘使用量:“df -h”
编辑
参数 作用
-a 显示出所有的文件系统(包括虚拟的)
--total 展出出总体使用量
-h 更易读的容量格式如1K,234M,2G…
-i 展示出Inode的信息(默认是磁盘使用信息)
-T 显示出文件系统的类型

查看到所有已挂载的挂载信息与硬盘使用情况:

[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.5G 15G 20% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/sdb1 2.0G 33M 2.0G 2% /newFS
du命令用于查看磁盘的使用量,格式为:“ du [选项] [文件]”。

查看根目录的总占用空间:du -sh /
查看当前目录下各文件所占空间:du -sh *

编辑
参数 作用
-a 评估每个文件而非目录整体占用量。
-c 评估每个文件并计算出总占用量总和。
-h 更易读的容量格式如1K,234M,2G…
-s 仅显示占用量总和。

复制一些文件到新的分区(省略部分复制过程信息):

[root@linuxprobe ~]# cp /etc/* /newFS/
cp: omitting directory ‘/etc/abrt’
cp: omitting directory ‘/etc/alsa’
cp: omitting directory ‘/etc/festival’
cp: omitting directory ‘/etc/yum’
cp: omitting directory ‘/etc/yum.repos.d’

查看到该挂载目录的占用硬盘量:

[root@linuxprobe ~]# du -sh /newFS/
1.3M /newFS/
6.6 添加交换分区

SWAP即交换分区是一种类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为SWAP毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢很多,一般只有当真实物理内存耗尽时才会调用SWAP。

第1步:在虚拟机中添加用来做逻辑卷实验的硬盘。
在虚拟机中添加硬盘
请您按照下面的幻灯片逐步操作,可点击图片两侧箭头或下方小圆点“○”切换步骤。
  • 第6章 存储结构与磁盘划分_第9张图片
    第2步:选择磁盘。
  • 第6章 存储结构与磁盘划分_第10张图片
    第3步:选择磁盘类型。
  • 第6章 存储结构与磁盘划分_第11张图片
    第4步:选择创建新的磁盘。
  • 第6章 存储结构与磁盘划分_第12张图片
    第5步:设置磁盘的大小。
  • 第6章 存储结构与磁盘划分_第13张图片
    第6步:默认的磁盘名称即可。
  • 第6章 存储结构与磁盘划分_第14张图片
    第7步:成功添加的硬盘出现在列表中。

 

第2步:将新添加的硬盘进行分区。

对新添加的硬盘设备分区:

[root@linuxprobe ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xb3d27ce1.

创建新的分区信息:

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended

类型为主分区:

Select (default p): p

分区号为1。

Partition number (1-4, default 1): 1

其实扇区直接敲击回车,默认为2048即可:

First sector (2048-41943039, default 2048):
Using default value 2048

结束扇区部分输入+5G,设置分区大小为5G:

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G
Partition 1 of type Linux and of size 5 GiB is set

修改分区的类型:

Command (m for help): t
Selected partition 1

查看可用的分区类型:

Hex code (type L to list all codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Extd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix

输入82代表swap分区:

Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'

再次查看分区表信息(已有分区信息):

Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xb3d27ce1
Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 82 Linux swap / Solaris

保存分区表的设置:

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

让内核同步分区信息(此步骤仅在没有找到分区设备的情况下才需要执行,非必要动作。):

[root@linuxprobe ~]# partprobe

将sdb1分区设备格式化为swap类型:

[root@linuxprobe ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=2972f9cb-17f0-4113-84c6-c64b97c40c75

查看当前的内存使用量情况,SWAP大小为2047:

[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1483 782 701 9 0 254
-/+ buffers/cache: 526 957
Swap: 2047 0 2047

将sdb1的SWAP分区启用:

[root@linuxprobe ~]# swapon /dev/sdb1

再次查看当前系统的内存使用量情况(此时SWAP为7167m):

[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1483 785 697 9 0 254
-/+ buffers/cache: 530 953
Swap: 7167 0 7167

设置为开机后自动挂载该SWAP分区设备:

[root@linuxprobe ~]# vim /etc/fstab
/dev/sdb1 swap swap defaults 0 0
6.7 磁盘容量配额

如前面介绍章节讲到的类Unix系统最初设计理念就让许多人一起使用,多任务的操作系统,但是硬件的资源是固定有限的,如果出现个小破坏份子不断的创建文件或下载电影,那么硬盘空间总有一天会被占满的吧,这时就需要quota服务帮助我们为每个用户限制可以使用的硬盘空间,一旦超出预算就不再允许他们使用。

quota的磁盘配额可以限制用户的硬盘可用空间或最大创建文件数量,并且还有软/硬限制的区别:

软限制:当达到软限制时会提示用户,但允许用户在规定期限内继续使用。

硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

查看内核是否支持quota功能:

[root@linuxprobe ~]# dmesg | grep quota
[ 3.140241] VFS: Disk quotas dquot_6.5.2

查看quota程序包是否已经安装:

[root@linuxprobe ~]# rpm -q quota
quota-4.01-11.el7.x86_64

查看boot目录是否支持quota功能(noquota表示暂时不支持):

[root@linuxprobe ~]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

让/boot目录支持quota功能:

[root@linuxprobe ~]# vim /etc/fstab
UUID=6e97ef8f-51f1-4781-8f1c-0acb9f631b32 /boot xfs defaults,uquota 0 0

重启主机后即可生效:

[root@linuxprobe ~]# reboot

查看boot目录是否支持quota功能(usrquota表示已经支持):

[root@linuxprobe Desktop]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)

创建两个用于quota实验的用户tom:

[root@linuxprobe ~]# useradd tom

需要允许其他用户对/boot目录写入文件操作:

[root@linuxprobe ~]# chmod -Rf o+w /boot

xfs_quota命令用于管理XFS文件系统的quota硬盘配额,格式为:“quota [参数] 配额 文件系统”。

编辑
参数 作用
-c 命令 以交换式或参数的形式设置要执行的命令。
-p 设置提示或报错信息的程序名称,默认为xfs_quota。
-x 专家模式,能够对quota做更多复杂的配置。

使用xfs_quota命令设置对tom用户在/boot目录的磁盘配额,具体要求如下:

使用quota专家模式限制磁盘软限制为3m、磁盘硬限制为6m、文件软限制为3个且文件硬限制为6个。

[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot

获取当前/boot目录上的quota配额限制:

[root@linuxprobe ~]# 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 [--------]

切换至tom用户:

[root@linuxprobe ~]# su - tom

正常创建了一个为5M的文件:

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB) copied, 0.123966 s, 42.3 MB/s

创建8M文件时强制终止并报错了:

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
6291456 bytes (6.3 MB) copied, 0.0201593 s, 312 MB/s

查看当前用户的quota限制(显示硬盘配额已占满):

[tom@linuxprobe ~]$ quota
Disk quotas for user tom (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda1 6144* 3072 6144 6days 1 3 6

edquota命令用于超级用户编辑其他用户的quota配额限制,格式为:“edquota [参数] [用户]”。

编辑
参数 作用
-u 编辑用户的配额限制。
-g 编辑用户组的配额限制。
-r 通过RPC协议编辑远程的配额。

编辑tom的配额限制,将硬盘的硬限制修改为8m(8192k):

[root@linuxprobe ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 6144 3072 8192 1 3 6

切换至tom用户:

[root@linuxprobe ~]# su - tom
Last login: Mon Sep 7 16:43:12 CST 2015 on pts/0

再来创建8m的文件就不会有问题了:

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0268044 s, 313 MB/s

6.8 虚拟文件系统

随着计算机系统的发展产生出了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,于是在Linux内核中的软件层为用户程序提供了一个文件系统接口(VFS,Virtual File System),这样就转而统一对这个虚拟文件系统进行操作啦。即实际文件系统在VFS下隐藏了自己的特性和细节,使得我们在日常使用时觉得“文件系统都是一样的”。
虚拟文件系统VFS

 

6.9 软硬方式链接

在Linux系统中的ln命令能够让用户创建出两种不同类型的文件快捷方式,一定要注意区分:

硬链接(hard link)可以被理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode与文件,所以实际上来讲硬链接文件与原始文件其实是同一个文件,只是名字不同。于是每添加一个硬链接,该文件的inode连接数就会增加1,直到该文件的inode连接数归0才是彻底删除。概括来说因为硬链接实际就是指向原文件inode的指针,即便原始文件被删除依然可以通过链接文件访问,但是不能跨文件系统也不能链接目录文件。

软链接也称为符号链接(symbolic link)“仅仅包含它索要链接文件的路径名”因此能做目录链接也可以跨越文件系统,但原始文件被删除后链接文件也将失效,如同Winodw™中的“快捷方式”。

ln命令用于创建链接文件,格式为:“ln [选项] 目标”。
创建硬链接:“ln 文件名 链接名”
创建软链接:“ln -s 文件名 连接名”
编辑
参数 作用
-s 创建"符号链接"(默认是硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程
对/etc目录做出一个名为etc的软连接。
[root@linuxprobe ~]# ln -s /etc etc

你可能感兴趣的:(第6章 存储结构与磁盘划分)