Linux上物理设备的命名规则
| 硬件设备 | 文件名称 |
|---|---|
| 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”开头,分区编号规则为:
| 文件系统 | 解释 |
|---|---|
| Ext3 | 日志文件系统,在系统宕机时防止数据丢失,自动修复数据的不一致与错误。 缺点是硬盘容量大时修复时间会很长,而且不能保证数据一定不会丢失。 工作原理:把每个写入磁盘的动作记录下来,以便在发生异常宕机时回溯到中断的地方尝试进行修复。 |
| Ext4 | Ext3的改进版,支持存储容量高达1EB,能够有无限的子目录。 能够批量分配block块,从而极大提升了读写速率。 |
| XFS | 是一种高性能的日志文件系统,优点是发生意外宕机后可以快速恢复可能损坏的文件,而且强大的日志功能只花费极低的计算和存储性能。 最大支持18EB的存储容量,几乎满足所有需求。 |
格式化后Linux会创建一个硬盘地图‘superblock’记录下文件系统的信息(inode/block的总量、使用量和剩余量,以及文件系统的格式与相关信息)
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的Block号码,默认一个inode表格128字节,一个block占4B,记录满了后会新建block用于扩展。
- 该文件的权限(read\write\excute)
- 该文件的所有者和所属组(owner\group)
- 该文件的大小(size)
- 该文件的创建或内容修改时间(ctime)
- 该文件最后一次访问时间(atime)
- 该文件的修改时间(mtime)
- 文件的特殊权限(SUID\SGID\SBIT)
- 该文件的真实数据地址
- block:用于存储数据
Linux在发展过程中产生了众多文件系统,用户在读取或写入文件时就不用关心底层的硬盘结构了。Linux内核中软件层为用户提供了一个VFS(Virtual File System)接口,这样用户在操作文件时就相当于对虚拟文件系统进行操作。
挂载硬件设备
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等 |
| 权限选项 | 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |
| 是否备份 | 若为1则开机后使用dump进行磁盘备份,为0则不备份 |
| 是否自检 | 若为1则开机后自动进行磁盘自检,为0则不自检 |
umount
撤销已挂载的文件设备:umount [挂载点/设备文件]
[root@node-1 ~]# umount /dev/sda2
添加硬件设备
fdisk:管理磁盘分区
命令格式:
fdisk [磁盘名称]
fdisk命令参数及作用:
| 参数 | 作用 |
|---|---|
| m | 查看全部可用的参数 |
| n | 添加新的分区 |
| d | 删除某个分区信息 |
| l | 列出所用可用分区的类型 |
| t | 改变某个分区的类型 |
| p | 查看分区信息 |
| w | 保存并退出 |
| q | 不保存退出 |
df:查看文件系统的磁盘空间占用情况
df -h df -ih 以inode节点数量显示磁盘空间占用情况 df-Th 列出文件系统类型
du:查看文件和目录磁盘使用的空间
du命令参数及作用
| 参数 | 作用 |
|---|---|
| -a或-all | 显示目录中个别文件的大小 |
| -b或-byte | 显示目录或文件大小时以Byte为单位 |
| -h或—human-readable | 以K,M,G为单位,提高信息的可读性。 |
| -s或—summarize | 显示总计 |
案例
要求:
- 给虚拟机添加一块10G的磁盘
- 创建出一个2G的分区sdb1
- 格式化文件系统mkfs.ext4
- 通过修改/etc/fstab文件使得开机能够自动挂载设备

通过 lsblk 命令查看块设备信息
[root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 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 10G 0 disksr0 11:0 1 918M 0 rom
然后使用fdsik命令分区,n新建分区,p分区类型选择主分区,输入 +2G 分区大小为2G,w保存退出
[root@localhost ~]# fdisk /dev/sdb欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。Device does not contain a recognized partition table使用磁盘标识符 0xb24f7409 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):m命令操作a toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partitiong create a new empty GPT partition tableG create an IRIX (SGI) partition tablel list known partition typesm print this menun add a new partitiono create a new empty DOS partition tablep print the partition tableq quit without saving changess create a new empty Sun disklabelt change a partition's system idu change display/entry unitsv verify the partition tablew write table to disk and exitx extra functionality (experts only)命令(输入 m 获取帮助):nPartition type:p primary (0 primary, 0 extended, 4 free)e extendedSelect (default p): p分区号 (1-4,默认 1):起始 扇区 (2048-20971519,默认为 2048):将使用默认值 2048Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G分区 1 已设置为 Linux 类型,大小设为 2 GiB命令(输入 m 获取帮助):wThe partition table has been altered!Calling ioctl() to re-read partition table.正在同步磁盘。
再通过lsblk查看一下
[root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 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 10G 0 disk└─sdb1 8:17 0 2G 0 partsr0 11:0 1 918M 0 rom
指定文件系统,使用 mkfs 命令:mkfs -t ext4 /dev/sdb1 或 mkfs.ext4 /dev/sdb1![1XJ8U]]HZIE4RLW9NX)WU1E.png](/uploads/projects/u427629@ge071f/475ed1087d5cfbcc8dd951804817acd2.png)
创建挂载目录:mkdir /mnt/sdb1
永久挂载文件系统,修改/etc/fstab文件:vim /etc/fstab
/dev/sdb1 /mnt/sdb1 ext4 defaults 0 0
刷新挂载所有文件系统:mount -a
验证挂载:
[root@localhost ~]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 17G 1.3G 16G 8% /devtmpfs devtmpfs 898M 0 898M 0% /devtmpfs tmpfs 910M 0 910M 0% /dev/shmtmpfs tmpfs 910M 9.5M 901M 2% /runtmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup/dev/sda1 xfs 1014M 146M 869M 15% /boottmpfs tmpfs 182M 0 182M 0% /run/user/0/dev/sdb1 ext4 2.0G 6.0M 1.8G 1% /mnt/sdb1
添加交换分区
交换分区可以理解为虚拟内存
SWAP(交换)分区:在硬盘中划分一个空间,将内存中不常用的数据临时存放在这个空间,以便空出物理内存提供给更活跃的程序使用。
(在生产环境中,交换分区的大小一般为物理内存的1.5~2倍)
格式化文件系统 mkswap [硬盘设备] 添加交换分区 swapon [硬盘设备]
永久添加交换分区:在/etx/fstab中写入:[设备文件] swap swap defaults 0 0
[root@localhost ~]# umount /dev/sdb2[root@localhost ~]# mkswap /dev/sdb2mkswap: /dev/sdb2: warning: wiping old ext4 signature.Setting up swapspace version 1, size = 5241852 KiBno label, UUID=6707cde0-c7df-4557-b99b-45fbf5b36dcd[root@localhost ~]# free -htotal used free shared buff/cache availableMem: 1.8G 149M 1.0G 9.5M 601M 1.4GSwap: 2.0G 0B 2.0G[root@localhost ~]# swapon /dev/sdb2[root@localhost ~]# free -htotal used free shared buff/cache availableMem: 1.8G 153M 1.0G 9.5M 601M 1.4GSwap: 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 0UUID=ff13d896-a59e-430d-8d14-3997d19f5de9 /boot xfsdefaults 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
磁盘容量配额
https://www.cnblogs.com/sddai/p/11111895.html
Linux是多用户、多任务的环境,如果有少数用户占用大量磁盘空间,就会影响其他用户的正常使用,所以要对各个用户的磁盘空间进行限定和管理。
quota命令可以限定一个用户的最大配额
- 使用限制
- 仅能针对整个文件系统
- 只对一般用户生效
- 内核必须支持
edquota [参数] [用户]
- -u参数表示要针对哪个用户进行设置
-
案例
要求:
创建用户user1,user2,user3,user4,初始组为usergrp组。
- 用户都可以取得300M的磁盘使用空间,文件数量不限。超过250M,给于提示。
- usergrp这个组内成员最大使用空间1GB。
- 如果有用户超过soft限制,给14天的宽限时间。
创建用户
[root@localhost ~]# groupadd usergrp[root@localhost ~]# setenforce 0[root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user1[root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user2[root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user3[root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user4[root@localhost ~]# yum install finger[root@localhost ~]# finger user1Login: user1 Name:Directory: /mnt/sdb1/user1 Shell: /bin/bashNever logged in.No mail.No Plan.[root@localhost ~]# id user1uid=1003(user1) gid=2335(usergrp) 组=2335(usergrp)
检查文件系统支持
[root@localhost ~]# df -Th /mnt/sdb1文件系统 类型 容量 已用 可用 已用% 挂载点/dev/sdb1 ext4 2.0G 6.0M 1.8G 1% /mnt/sdb1[root@localhost ~]# mount |grep /mnt/sdb1/dev/sdb1 on /mnt/sdb1 type ext4 (rw,relatime,seclabel,data=ordered)
让文件系统支持quota
[root@localhost ~]# yum install quota[root@localhost ~]# mount -o remount,usrquota,grpquota /mnt/sdb1[root@localhost ~]# mount |grep /mnt/sdb1/dev/sdb1 on /mnt/sdb1 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)
扫描文件系统并新建quota文件
quota主要参数
- -a: 扫描所有在/etc/mtab内含有quota参数的文件系统
- -u: 针对用户扫描文件与目录的使用情况,会新建一个aquota.user文件
- -g: 针对用户组扫描文件与目录的使用情况,会新增一个aquota.group文件
-v: 显示扫描过程的信息
[root@localhost ~]# quotacheck -avugquotacheck: 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/sdb1] donequotacheck: Cannot stat old user quota file /mnt/sdb1/aquota.user: 没有那个文件或目录. Usage will not be subtracted.quotacheck: Cannot stat old group quota file /mnt/sdb1/aquota.group: 没有那个文件或目录. Usage will not be subtracted.quotacheck: Cannot stat old user quota file /mnt/sdb1/aquota.user: 没有那个文件或目录. Usage will not be subtracted.quotacheck: Cannot stat old group quota file /mnt/sdb1/aquota.group: 没有那个文件或目录. Usage will not be subtracted.quotacheck: Checked 3 directories and 0 filesquotacheck: Old file not found.quotacheck: Old file not found.
启动quota
[root@localhost ~]# quotaon -avug/dev/sdb1 [/mnt/sdb1]: group quotas turned on/dev/sdb1 [/mnt/sdb1]: user quotas turned on
这个命令(quotaon) 几乎只需要在第一次启动quota时才需要进行,因为下次等你重新启动时,系统的/etc/rc.d/rc.sysinit这个初始化脚本就会自动执行这个命令。
如果想关闭可以使用quotaoff -avug
编辑账户的限制**[root@localhost ~]# edquota -u user1
![3(DT%%Q43W1R4]%U_RQ~R23.png](/uploads/projects/u427629@ge071f/44ae1f8458ddc0c485af7c3d7a864f66.png)
软限制: 这个值超过了基本上没事,还是可以创建文件继续使用文件,但是在指定grace天过后就不能在创建文件了。
- 硬限值: 这个值不能超过,会强制终止用户操作
对其他几个用户执行相同操作
编辑组的限制
[root@localhost ~]# edquota -g usergrp

修改宽限时间
[root@localhost ~]# edquota -t

查看quota限制
[root@localhost ~]# quota -uvs user1Disk quotas for user user1 (uid 1003):Filesystem space quota limit grace files quota limit grace/dev/sdb1 0K 245M 293M 0 0 0
quota测试
输出造0机,制造一个270M的文件bigfile,超出软限制会报警告
再制造一个270M的bigfile2,会出错:超出磁盘限额。
[root@localhost ~]# su - user1上一次登录:五 1月 29 22:27:05 CST 2021pts/0 上[user1@localhost ~]$ dd if=/dev/zero of=bigfile bs=1M count=270sdb1: warning, user block quota exceeded.记录了270+0 的读入记录了270+0 的写出283115520字节(283 MB)已复制,4.71575 秒,60.0 MB/秒[user1@localhost ~]$ dd if=/dev/zero of=bigfile2 bs=1M count=270sdb1: write failed, user block limit reached.dd: 写入"bigfile2" 出错: 超出磁盘限额记录了23+0 的读入记录了22+0 的写出24064000字节(24 MB)已复制,0.43076 秒,55.9 MB/秒[user1@localhost ~]$ ll -h /mnt/sdb1/user1总用量 293M-rw-r--r--. 1 user1 usergrp 270M 1月 29 22:31 bigfile-rw-r--r--. 1 user1 usergrp 23M 1月 29 22:32 bigfile2
我们可以发现第二个bigfile2只有23M,只是因为超出硬限制被终止操作了。
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=6test' /boot[root@localhost ~]# xfs_quota -x -c report /bootUser quota on /boot (/dev/sda1)BlocksUser 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=11+0 records in1+0 records out5242880 bytes (5.2 MB) copied, 0.00350676 s, 1.5 GB/s[test@localhost ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1dd: error writing ‘/boot/tom’: Disk quota exceeded1+0 records in0+0 records out4194304 bytes (4.2 MB) copied, 0.00760235 s, 552 MB/s
软硬方式链接
在Linux中存在硬链接和软链接两种文件。
- 硬链接(hard link):
- 硬链接可以理解为“指向原文件inode的一个指针”,系统不会为硬链接文件再分配inode,所以硬链接与原文件其实是同一个文件,只是名字不同。每添加一个硬链接,原文件inode的链接数就会增加一,只有当该文件的inode链接数为0时才算彻底把他删除(即使把原文件删除了,依然可以通过硬链接文件访问)。
- 注意:不能跨分区对目录文件进行链接。
![2WK8NLK_VG8D52A$8EMK.png
- 软链接(也称为符号链接[symbolic link]):
- 软链接类似于Windows的快捷方式,仅包含链接文件的路径名,因此能够跨文件系统链接目录名。但是原文件被删除后,链接文件也将失效。
![~GBORM0R7(}%Z`OQIH][VL.png](https://cdn.nlark.com/yuque/0/2020/png/614741/1607229223069-a59aae48-8400-456d-96ab-823cc409cb1a.png#align=left&display=inline&height=278&margin=%5Bobject%20Object%5D&name=~GBORM0R7%28%7D%25Z%60OQIH%5D%5BVL.png&originHeight=278&originWidth=531&size=15339&status=done&style=none&width=531)
- 硬链接特点
- 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的 数据都会发生改 变。
- 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。
- 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
- 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的,硬链接不能连接目录
- 软链接特点
| 参数 | 作用 |
|---|---|
| -f | 强制创建链接 |
| -s | 创建“符号链接”,如果不带-s参数默认创建硬链接 |
| -i | 覆盖前先询问 |
| -v | 显示创建链接的详细过程 |
软链接演示:
[root@localhost ~]# echo "hello" > test[root@localhost ~]# ln -s test test123[root@localhost ~]# cat test123hello[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 test123cat: test123: No such file or directory
硬链接演示:
[root@localhost ~]# echo "hello" > test[root@localhost ~]# ln test test123[root@localhost ~]# cat test123hello[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 test123hello
