我们在计算机中保存的文件大都是保存在电脑硬盘中,部分同学还会将自己的文件存储在网盘中,网盘中的文件只能说是用来做备份,并不能像本地硬盘上的数据那样随时使用,我们在学习存储管理的时候主要学习的就是如何对自己计算机上的硬盘进行管理,目前我们主流的硬盘主要有两种形态,一种是及机械硬盘(HDD),一种是的固态硬盘(SSD)

硬盘工作原理

机械硬盘HDD

机械硬盘是靠机械马达以固定的速度转动磁盘,然后再有机械臂的摆动,让磁头可以读取盘片上的磁性信息,这种工作原理的硬盘我们成为机械硬盘。

img

由于机械硬盘是依靠机械的运动来读写数据的,大家都知道机械在长时间运转的过程中是会产生一定的损耗,所以机械硬盘虽然理论上寿命很长,但随着时间的变长,机械磨损变大,导致磁头定位的误差变大,从而影响到硬盘的速度,这个就是为什么你的老电脑开机缓慢,运行卡顿的原因了。

固态硬盘SSD

固态硬盘依靠主控芯片来将数据的二进制信息写入浮栅晶体管中,以这样的原理实现数据的读取和写入。

img

固态硬盘在读取和写入数据的时候完全是依靠数字电路实现的,所以并没有机械硬盘的机械磨损,而且也没有在磁盘上定位读写的延迟,所以固态硬盘的数据读写效率是远远高于机械硬盘的,但是也有一定的缺点,由于浮栅晶体管的设计原理,每次数据的读写,都会让浮栅晶体管所需要的电压更高,一定寿命以后,固态硬盘就会失效。并且固态硬盘如果发生了损坏,数据恢复的难度是大于机械硬盘的,所以为了可靠性,企业目前还是在大量使用机械硬盘的。

image-20191214142929008

image-20191214143122989

image-20191214142552504

硬盘设备命名

一台服务器往往会配备有多块硬盘,Linux中为了区分不同的硬盘,会使用不同的命名来将硬盘设备标识,Linux系统对物理设备会使用sd[a-z]的方式来命名。物理硬盘上的详细分区会使用数字的方式来进行标识,比如sda设备上的多个分区会标识为sda[1,2,3....]

分区表

为了让系统能够识别和管理物理设备上的不同分区,需要在物理设备前加上一些数据用于记录分区的情况,这些数据就是分区表数据,目前分区表有两种主流的格式:

  • MBR
    • 管理的硬盘大小不能超过2T
    • 有主分区和扩展分区两种,不管是哪种分区,总数不能超过4个分区
    • 扩展分区内部可以逻辑上划分多个区域,但是在分区表中都算在一个分区内
    • 如果作为系统盘,必须要设置一个激活分区,用于存放系统的引导文件

img

  • GPT
    • 管理硬盘大小不能超过18EB,目前人类还没制造出单块这么大的硬盘
    • 理论上支持无限分区,在win10系统上,最多可以分128个分区
    • 如果作为系统盘,必须要创建一个EFI分区,用于存放系统的引导文件建议ESP分区512M,对齐8扇区4096字节

image-20210714095241528

image-d1

电脑启动的时候:

MBR分区表会找到活动的分区,从里面加载系统启动;

GTP分区表会查找EFI分区,没有是开不了机的,所以GPT分区表情况下需要建立ESP,MSR分区。

MSR是微软保留的引导分区,分区一般不会坏因此一般不需要。

ESP建立512MB,对齐到扇区整数倍是指一次读写几个扇区(例如新建个txt只写一个字符,依旧占用4K,除非越写越大超过4K,占4K的整数倍),并不是越大越好也不是越小越好,根据实际需求,一般是4KB。

管理分区

  • 列出块设备
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part
  ├─centos-root 253:0    0   47G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
sr0              11:0    1 1024M  0 rom
  • 创建分区命令
fdisk  管理MBR分区
gdisk  管理GPT分区
parted 高级分区操作
  • 重新设置内存中的内核分区表版本
partprobe

parted 命令

  • parted的操作都是实时生效的,小心使用
  • 格式:
parted [选项]... [设备 [命令 [参数]...]...]
  • 操作命令:
cp [FROM-DEVICE] FROM-MINOR TO-MINOR           #将文件系统复制到另一个分区 
help [COMMAND]                                 #打印通用求助信息,或关于 COMMAND 的信息 
mklabel 标签类型                               #创建新的磁盘标签 (分区表) 
mkfs MINOR 文件系统类型                        #在 MINOR 创建类型为“文件系统类型”的文件系统 
mkpart 分区类型 [文件系统类型] 起始点 终止点   #创建一个分区 
mkpartfs 分区类型 文件系统类型 起始点 终止点   #创建一个带有文件系统的分区 
move MINOR 起始点 终止点                       #移动编号为 MINOR 的分区 
name MINOR 名称                                #将编号为 MINOR 的分区命名为“名称” 
print [MINOR]                                  #打印分区表,或者分区 
quit                                           #退出程序 
rescue 起始点 终止点                           #挽救临近“起始点”、“终止点”的遗失的分区 
resize MINOR 起始点 终止点                     #改变位于编号为 MINOR 的分区中文件系统的大小 
rm MINOR                                       #删除编号为 MINOR 的分区 
select 设备                                    #选择要编辑的设备 
set MINOR 标志 状态                            #改变编号为 MINOR 的分区的标志
  • 查看分区情况
[root@localhost ~]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  标志
 1      1049kB  1075MB  1074MB  primary  xfs          启动
 2      1075MB  53.7GB  52.6GB  primary               lvm

[root@localhost ~]# parted /dev/sdb print
错误: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
  • 设置磁盘的分区表
# [root@localhost ~]# parted /dev/sdb mklabel msdos
[root@localhost ~]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  标志
  • 对磁盘进行分区
[root@localhost ~]# parted /dev/sdb mkpart primary 1 200M
信息: You may need to update /etc/fstab.

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     标志
 1      1049kB  200MB  199MB               primary
  • 删除分区
[root@localhost ~]# parted /dev/sdb rm 1
信息: You may need to update /etc/fstab.

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  标志
  • 修改磁盘为mbr分区,注意会丢失所有数据
[root@localhost ~]# parted /dev/sdb mklabel msdos
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do
you want to continue?
是/Yes/否/No? yes
信息: You may need to update /etc/fstab.

fdisk工具

管理磁盘分区

fdisk [磁盘名称]

fdisk命令中的参数以及作用

参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区信息
w 保存并退出
q 不保存直接退出

录制_2019_04_12_16_51_11_910.gif

[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Apr 12 04:20:38 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=ff13d896-a59e-430d-8d14-3997d19f5de9 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1                               /data1  ext4    defaults        0 0
/dev/sdb2                               /data2  ext4    defaults        0 0

gdisk工具

  • 类fdisk 的GPT分区工具

存储结构与磁盘划分

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 当文件系统发生错误时,将一些丢失的文件片段存放在这里

表示路径的方式:

  • 绝对路径指的是从根目录(/)开始写起的文件或目录名称
  • 相对路径则指的是相对于当前路径的写法

物理设备的命名规则

常见的硬件设备及其文件名称

硬件设备 文件名称
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

一般的硬盘设备都会是以“/dev/sd”开头,分区编号按照如下规则:

  • 主分区或扩展分区的编号从1开始,到4结束;
  • 逻辑分区从编号5开始。

设备文件名称

image.png

文件系统与数据资料

文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。

日志式与索引式区别

image-d2

image-d3

文件系统 解释
Ext3 是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4 Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS 是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

格式化后会发生如下事情

  • 日志式文件系统先干掉inode表,索引式文件系统先干掉第一个索引,表示空间可用。

  • Linux创建一个硬盘地图'superblock',记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block 号码,默认一个inode表格128字节,一个block记录消耗4B,记录满了后会新建inode用于扩展。
    • 该文件的访问权限(read、write、execute);
    • 该文件的所有者与所属组(owner、group);
    • 该文件的大小(size);
    • 该文件的创建或内容修改时间(ctime);
    • 该文件的最后一次访问时间(atime);
    • 该文件的修改时间(mtime);
    • 文件的特殊权限(SUID、SGID、SBIT);
    • 该文件的真实数据地址(point)。
  • block:用于存储数据

计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。 image.png

mkfs工具

  • Linux mkfs(英文全拼:make file system)命令用于在特定的分区上建立 linux 文件系统。

  • 格式:

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
  • 选项:

    • device : 预备检查的硬盘分区,例如:/dev/sda1
    • -V : 详细显示模式
    • -t : 给定档案系统的型式,Linux 的预设值为 ext2
    • -c : 在制做档案系统前,检查该partition 是否有坏轨
    • -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
    • block : 给定 block 的大小
  • 实例,使用parted分区,然后使用mkfs创建ext4文件系统

[root@localhost ~]# parted /dev/sdb mklabel gpt
[root@localhost ~]# parted /dev/sdb mkpart primary 0 10G
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     标志
 1      1049kB  10.0GB  9999MB  ext4         primary

mount

挂载文件系统mount 文件系统 挂载目录

mount命令中的参数以及作用

参数 作用
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型

临时挂载文件系统

系统在重启后挂载就会失效

[root@node-1 ~]# mkdir backup
[root@node-1 ~]# mount /dev/sda2 /root/backup

如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”,写入到/etc/fstab文件中。

用于挂载信息的指定填写格式中,各字段所表示的意义

字段 意义
设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
挂载目录 指定要挂载到的目录,需在挂载前创建好
格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份 若为1则开机后使用dump进行磁盘备份,为0则不备份
是否自检 若为1则开机后自动进行磁盘自检,为0则不自检
  • 实例,挂载分区/dev/sdb1/mnt/volume1下,并且设置为永久自动挂载
[root@localhost ~]# mkdir -p /mnt/volume1
[root@localhost ~]# mount /dev/sdb1 /mnt/volume1
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  995M   46G    3% /
devtmpfs                 979M     0  979M    0% /dev
tmpfs                    991M     0  991M    0% /dev/shm
tmpfs                    991M  8.5M  982M    1% /run
tmpfs                    991M     0  991M    0% /sys/fs/cgroup
/dev/sda1               1014M  133M  882M   14% /boot
tmpfs                    199M     0  199M    0% /run/user/0
/dev/sdb1                9.1G   37M  8.6G    1% /mnt/volume1
# 先卸载sdb1
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# vim /etc/fstab
# 最后一行加上
/dev/sdb1 /mnt/volume1 ext4 defaults 0 0

[root@localhost ~]# mount -a
# 测试是否正确配置,fstab上的设备挂一遍试试看,万一错了重启系统会失败。
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  995M   46G    3% /
devtmpfs                 979M     0  979M    0% /dev
tmpfs                    991M     0  991M    0% /dev/shm
tmpfs                    991M  8.5M  982M    1% /run
tmpfs                    991M     0  991M    0% /sys/fs/cgroup
/dev/sda1               1014M  133M  882M   14% /boot
tmpfs                    199M     0  199M    0% /run/user/0
/dev/sdb1                9.1G   37M  8.6G    1% /mnt/volume1

umount

撤销已经挂载的设备文件umount [挂载点/设备文件]

[root@node-1 ~]# umount /dev/sda2

挂载实验:

#进行了格式化后
#[root@localhost ~]# mkfs.ext4 /dev/sdb1
#未挂载sdb1前,此时file0创建在sda1上
[root@localhost ~]# mkdir /mnt/disk1
[root@localhost ~]# touch /mnt/disk1/file0
[root@localhost ~]# ll /mnt/disk1/
-rw-r--r--  1 root root 0 6月   9 19:44 file0
#挂载sdb1,file0消失
[root@localhost ~]# mount /dev/sdb1 /mnt/disk1/
[root@localhost ~]# ll /mnt/disk1/
drwx------ 2 root root 16384 6月   9 19:42 lost+found
#此时file0创建在sda1
[root@localhost ~]# touch /mnt/disk1/file1
[root@localhost ~]# ll /mnt/disk1/
-rw-r--r-- 1 root root     0 6月   9 19:48 file1
drwx------ 2 root root 16384 6月   9 19:42 lost+found
#卸载sdb1,file1消失,file0出现
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# ll /mnt/disk1/
-rw-r--r--  1 root root 0 6月   9 19:44 file0

df

用于显示文件系统的磁盘空间使用情况

df [选项]

常用选项

  • -h:以人类可读的格式显示磁盘空间,使用K、M、G等单位。
  • -T:显示文件系统类型。
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  995M   46G    3% /
devtmpfs                 979M     0  979M    0% /dev
tmpfs                    991M     0  991M    0% /dev/shm
tmpfs                    991M  8.5M  982M    1% /run
tmpfs                    991M     0  991M    0% /sys/fs/cgroup
/dev/sda1               1014M  133M  882M   14% /boot
tmpfs                    199M     0  199M    0% /run/user/0
/dev/sdb1                9.1G   37M  8.6G    1% /mnt/volume1

du

查看某个目录下文件数据的占用量

du [选项] [文件]

[root@localhost ~]# du -sh /etc
23M     /etc

添加交换分区

SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术

在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍

[root@localhost ~]# umount /dev/sdb2
[root@localhost ~]# mkswap /dev/sdb2
mkswap: /dev/sdb2: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 5241852 KiB
no label, UUID=6707cde0-c7df-4557-b99b-45fbf5b36dcd
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        149M        1.0G        9.5M        601M        1.4G
Swap:          2.0G          0B        2.0G
[root@localhost ~]# swapon /dev/sdb2
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        153M        1.0G        9.5M        601M        1.4G
Swap:          7.0G          0B        7.0G
[root@localhost ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Fri Apr 12 04:20:38 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=ff13d896-a59e-430d-8d14-3997d19f5de9 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1                /data1    ext4    defaults    0 0
/dev/sdb2                swap  swap    defaults    0 0

磁盘容量配额

简单理解就是可以通过磁盘配额限制某个用户能够使用多大的空间

quota

实例切入

描述:

  • 创建5个用户user1,user2,user3,user4,user5,密码和用户名相同,初始组为usergrp组。
  • 5个用户都可以取得300M的磁盘使用空间,文件数量不限。超过250M,给于提示。
  • usergrp这个组内成员最大使用空间1GB。
  • 如果有用户超过soft限制,给14天的宽限时间。

准备磁盘

  • 创建分区
[root@atopos ~]# 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.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 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

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: 0x29af810b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
  • lsblk 查看当前分区情况
[root@atopos ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0    2G  0 part 
sr0              11:0    1 1024M  0 rom
  • 格式化分区的文件系统
[root@atopos ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
  • 创建目录并挂载
[root@atopos ~]# mkdir /mnt/mountpoint1
[root@atopos ~]# mount /dev/sdb1 /mnt/mountpoint1/
[root@atopos ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  2.2G   15G  13% /
devtmpfs                devtmpfs  898M     0  898M   0% /dev
tmpfs                   tmpfs     910M     0  910M   0% /dev/shm
tmpfs                   tmpfs     910M  9.7M  901M   2% /run
tmpfs                   tmpfs     910M     0  910M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  146M  869M  15% /boot
tmpfs                   tmpfs     182M     0  182M   0% /run/user/0
overlay                 overlay    17G  2.2G   15G  13% /var/lib/docker/overlay2/ea6bd330b5a7154860e3e7b90affaf8b12673a6f71ff35665ecea39a47e3bce0/merged
/dev/sdb1               ext4      2.0G  6.0M  1.8G   1% /mnt/mountpoint1

准备用户

[root@atopos ~]# setenforce 0
# 临时关闭SELinux
[root@atopos ~]# getenforce 
Permissive
[root@atopos ~]# groupadd usergrp
[root@atopos ~]# for i in {1..5}; do useradd -g usergrp -b /mnt/mountpoint1 user$i; done

确保文件系统支持

  • 检查挂载点是否支持quota配置
[root@atopos ~]#  mount | grep mountpoint1
/dev/sdb1 on /mnt/mountpoint1 type ext4 (rw,relatime,seclabel,data=ordered)
  • 重新挂载,让文件系统支持quota配置
[root@atopos ~]#  mount -o remount,usrquota,grpquota /mnt/mountpoint1/
[root@atopos ~]#  mount | grep mountpoint1
/dev/sdb1 on /mnt/mountpoint1 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)

安装 quota

  • 软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
  • 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

quotacheck主要参数

  • -a:扫描所有在/etc/mtab内含有quota参数的文件系统
  • -u:针对用户扫描文件与目录的使用情况,会新建一个aquota.user文件
  • -g:针对用户组扫描文件与目录的使用情况,会新增一个aquota.group文件
  • -v:显示扫描过程的信息
[root@atopos ~]# yum install -y quota

开启 quota

[root@atopos ~]# quotacheck -avug
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/sdb1 [/mnt/mountpoint1] done
quotacheck: Cannot stat old user quota file /mnt/mountpoint1/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /mnt/mountpoint1/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file /mnt/mountpoint1/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /mnt/mountpoint1/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 8 directories and 15 files
quotacheck: Old file not found.
quotacheck: Old file not found.
[root@atopos ~]# quotaon -avug
/dev/sdb1 [/mnt/mountpoint1]: group quotas turned on
/dev/sdb1 [/mnt/mountpoint1]: user quotas turned on

编辑配额配置

[root@atopos ~]# edquota -u user1

  • 可以将针对user1的限制复制给user2
[root@atopos ~]# edquota -p user1 -u user2
  • 查看限制情况
[root@atopos ~]# repquota -as
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     20K      0K      0K              2     0     0       
user1     --     16K    245M    293M              4     0     0       
user2     --     16K    245M    293M              4     0     0       
user3     --     16K      0K      0K              4     0     0       
user4     --     16K      0K      0K              4     0     0       
user5     --     16K      0K      0K              4     0     0

测试

[user1@atopos ~]$ dd if=/dev/zero of=bigfile bs=10M count=50
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: 写入"bigfile" 出错: 超出磁盘限额
记录了30+0 的读入
记录了29+0 的写出
307183616字节(307 MB)已复制,1.96853 秒,156 MB/秒
[user1@atopos ~]$ du -sh *
293M bigfile
[user1@atopos ~]$

quota 命令

Linux quota命令用于显示磁盘已使用的空间与限制。

执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间

选项:

  • -g 列出群组的磁盘空间限制。
  • -q 简明列表,只列出超过限制的部分。
  • -u 列出用户的磁盘空间限制。
  • -v 显示该用户或群组,在所有挂入系统的存储设备的空间限制。
  • -V 显示版本信息。

xfs_quota

专门针对XFS文件系统来管理quota磁盘容量配额服务

xfs_quota [参数] 配额 文件系统

  • -c参数用于以参数的形式设置要执行的命令

  • -x参数是专家模式

硬盘使用量的软限制和硬限制分别为3MB和6MB;创建文件数量的软限制和硬限制分别为3个和6个。

[root@localhost ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 test' /boot
[root@localhost ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root           115516          0          0     00 [--------]
test                0       3072       6144     00 [--------]
[root@localhost ~]# su - test
[test@localhost ~]$ 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.00350676 s, 1.5 GB/s
[test@localhost ~]$ 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
4194304 bytes (4.2 MB) copied, 0.00760235 s, 552 MB/s

软硬方式链接

在Linux系统中存在硬链接和软连接两种文件。

  • 硬链接(hard link):
    • 可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
  • 软链接(也称为符号链接[symbolic link]):
    • 仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。

ln

用于创建链接文件

ln [选项] 目标

ln命令中可用的参数以及作用

参数 作用
-s 创建“符号链接”(如果不带-s参数,则默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程

软链接演示

[root@localhost ~]# echo "hello" > test
[root@localhost ~]# ln -s test test123
[root@localhost ~]# cat test123
hello
[root@localhost ~]# ls -l test
-rw-r--r--. 1 root root 6 Apr 12 06:10 test
[root@localhost ~]# rm -f test
[root@localhost ~]# cat test123 
cat: test123: No such file or directory

硬链接演示

[root@localhost ~]# echo "hello" > test
[root@localhost ~]# ln test test123
[root@localhost ~]# cat test123
hello
[root@localhost ~]# ls -l test
-rw-r--r--. 2 root root 6 Apr 12 06:12 test
[root@localhost ~]# rm -f test
[root@localhost ~]# cat test123
hello
学前沿IT,到英格科技!本文发布时间: 2024-05-17 22:36:46

results matching ""

    No results matching ""