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”开头,分区编号规则为:

  • 主分区或扩展分区从1开始,到4结束
  • 逻辑分区从5开始

    文件系统与数据资料

    文件系统的作用是方便用户规划硬盘。Linux常见的文件系统如下:
文件系统 解释
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)接口,这样用户在操作文件时就相当于对虚拟文件系统进行操作。
u=2116738331,102599865&fm=26&gp=0.jpg

挂载硬件设备

mount

挂载:让硬件设备和目录进行关联
挂载文件系统:mount 文件系统 挂载目录

参数 作用
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统类型
  • 临时挂载文件系统,系统重启后挂载会失效

    1. [root@node-1 ~]# mkdir backup
    2. [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 [挂载点/设备文件]

  1. [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 显示总计

案例

要求:

  1. 给虚拟机添加一块10G的磁盘
  2. 创建出一个2G的分区sdb1
  3. 格式化文件系统mkfs.ext4
  4. 通过修改/etc/fstab文件使得开机能够自动挂载设备

S)SBG1ZO4JH}5R9DF6M$R2N.png
通过 lsblk 命令查看块设备信息

  1. [root@localhost ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 20G 0 disk
  4. ├─sda1 8:1 0 1G 0 part /boot
  5. └─sda2 8:2 0 19G 0 part
  6. ├─centos-root 253:0 0 17G 0 lvm /
  7. └─centos-swap 253:1 0 2G 0 lvm [SWAP]
  8. sdb 8:16 0 10G 0 disk
  9. sr0 11:0 1 918M 0 rom

然后使用fdsik命令分区,n新建分区,p分区类型选择主分区,输入 +2G 分区大小为2G,w保存退出

  1. [root@localhost ~]# fdisk /dev/sdb
  2. 欢迎使用 fdisk (util-linux 2.23.2)。
  3. 更改将停留在内存中,直到您决定将更改写入磁盘。
  4. 使用写入命令前请三思。
  5. Device does not contain a recognized partition table
  6. 使用磁盘标识符 0xb24f7409 创建新的 DOS 磁盘标签。
  7. 命令(输入 m 获取帮助):m
  8. 命令操作
  9. a toggle a bootable flag
  10. b edit bsd disklabel
  11. c toggle the dos compatibility flag
  12. d delete a partition
  13. g create a new empty GPT partition table
  14. G create an IRIX (SGI) partition table
  15. l list known partition types
  16. m print this menu
  17. n add a new partition
  18. o create a new empty DOS partition table
  19. p print the partition table
  20. q quit without saving changes
  21. s create a new empty Sun disklabel
  22. t change a partition's system id
  23. u change display/entry units
  24. v verify the partition table
  25. w write table to disk and exit
  26. x extra functionality (experts only)
  27. 命令(输入 m 获取帮助):n
  28. Partition type:
  29. p primary (0 primary, 0 extended, 4 free)
  30. e extended
  31. Select (default p): p
  32. 分区号 (1-4,默认 1):
  33. 起始 扇区 (2048-20971519,默认为 2048):
  34. 将使用默认值 2048
  35. Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G
  36. 分区 1 已设置为 Linux 类型,大小设为 2 GiB
  37. 命令(输入 m 获取帮助):w
  38. The partition table has been altered!
  39. Calling ioctl() to re-read partition table.
  40. 正在同步磁盘。

再通过lsblk查看一下

  1. [root@localhost ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 20G 0 disk
  4. ├─sda1 8:1 0 1G 0 part /boot
  5. └─sda2 8:2 0 19G 0 part
  6. ├─centos-root 253:0 0 17G 0 lvm /
  7. └─centos-swap 253:1 0 2G 0 lvm [SWAP]
  8. sdb 8:16 0 10G 0 disk
  9. └─sdb1 8:17 0 2G 0 part
  10. sr0 11:0 1 918M 0 rom

指定文件系统,使用 mkfs 命令:mkfs -t ext4 /dev/sdb1 或 mkfs.ext4 /dev/sdb1
1XJ8U]]HZIE4RLW9NX)WU1E.png
创建挂载目录:mkdir /mnt/sdb1
永久挂载文件系统,修改/etc/fstab文件:vim /etc/fstab
/dev/sdb1 /mnt/sdb1 ext4 defaults 0 0
刷新挂载所有文件系统:mount -a
验证挂载:

  1. [root@localhost ~]# df -Th
  2. 文件系统 类型 容量 已用 可用 已用% 挂载点
  3. /dev/mapper/centos-root xfs 17G 1.3G 16G 8% /
  4. devtmpfs devtmpfs 898M 0 898M 0% /dev
  5. tmpfs tmpfs 910M 0 910M 0% /dev/shm
  6. tmpfs tmpfs 910M 9.5M 901M 2% /run
  7. tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
  8. /dev/sda1 xfs 1014M 146M 869M 15% /boot
  9. tmpfs tmpfs 182M 0 182M 0% /run/user/0
  10. /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

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

磁盘容量配额

https://www.cnblogs.com/sddai/p/11111895.html
Linux是多用户、多任务的环境,如果有少数用户占用大量磁盘空间,就会影响其他用户的正常使用,所以要对各个用户的磁盘空间进行限定和管理。

quota命令可以限定一个用户的最大配额

  • 使用限制
    • 仅能针对整个文件系统
    • 只对一般用户生效
    • 内核必须支持

edquota [参数] [用户]

  • -u参数表示要针对哪个用户进行设置
  • -g参数表示要针对哪个用户组进行设置

    案例

    要求:

  • 创建用户user1,user2,user3,user4,初始组为usergrp组。

  • 用户都可以取得300M的磁盘使用空间,文件数量不限。超过250M,给于提示。
  • usergrp这个组内成员最大使用空间1GB。
  • 如果有用户超过soft限制,给14天的宽限时间。

创建用户

  1. [root@localhost ~]# groupadd usergrp
  2. [root@localhost ~]# setenforce 0
  3. [root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user1
  4. [root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user2
  5. [root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user3
  6. [root@localhost ~]# useradd -g usergrp -b /mnt/sdb1 user4
  7. [root@localhost ~]# yum install finger
  8. [root@localhost ~]# finger user1
  9. Login: user1 Name:
  10. Directory: /mnt/sdb1/user1 Shell: /bin/bash
  11. Never logged in.
  12. No mail.
  13. No Plan.
  14. [root@localhost ~]# id user1
  15. uid=1003(user1) gid=2335(usergrp) 组=2335(usergrp)

检查文件系统支持

  1. [root@localhost ~]# df -Th /mnt/sdb1
  2. 文件系统 类型 容量 已用 可用 已用% 挂载点
  3. /dev/sdb1 ext4 2.0G 6.0M 1.8G 1% /mnt/sdb1
  4. [root@localhost ~]# mount |grep /mnt/sdb1
  5. /dev/sdb1 on /mnt/sdb1 type ext4 (rw,relatime,seclabel,data=ordered)

让文件系统支持quota

  1. [root@localhost ~]# yum install quota
  2. [root@localhost ~]# mount -o remount,usrquota,grpquota /mnt/sdb1
  3. [root@localhost ~]# mount |grep /mnt/sdb1
  4. /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:  显示扫描过程的信息

    1. [root@localhost ~]# quotacheck -avug
    2. 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.
    3. quotacheck: Scanning /dev/sdb1 [/mnt/sdb1] done
    4. quotacheck: Cannot stat old user quota file /mnt/sdb1/aquota.user: 没有那个文件或目录. Usage will not be subtracted.
    5. quotacheck: Cannot stat old group quota file /mnt/sdb1/aquota.group: 没有那个文件或目录. Usage will not be subtracted.
    6. quotacheck: Cannot stat old user quota file /mnt/sdb1/aquota.user: 没有那个文件或目录. Usage will not be subtracted.
    7. quotacheck: Cannot stat old group quota file /mnt/sdb1/aquota.group: 没有那个文件或目录. Usage will not be subtracted.
    8. quotacheck: Checked 3 directories and 0 files
    9. quotacheck: Old file not found.
    10. quotacheck: Old file not found.

    启动quota

    1. [root@localhost ~]# quotaon -avug
    2. /dev/sdb1 [/mnt/sdb1]: group quotas turned on
    3. /dev/sdb1 [/mnt/sdb1]: user quotas turned on

    这个命令(quotaon) 几乎只需要在第一次启动quota时才需要进行,因为下次等你重新启动时,系统的/etc/rc.d/rc.sysinit这个初始化脚本就会自动执行这个命令。
    如果想关闭可以使用quotaoff -avug

    编辑账户的限制**

    1. [root@localhost ~]# edquota -u user1

    3(DT%%Q43W1R4]%U_RQ~R23.png

  • 软限制: 这个值超过了基本上没事,还是可以创建文件继续使用文件,但是在指定grace天过后就不能在创建文件了。

  • 硬限值: 这个值不能超过,会强制终止用户操作

对其他几个用户执行相同操作
编辑组的限制

  1. [root@localhost ~]# edquota -g usergrp

429277-20170926085920792-581331946.jpg
修改宽限时间

  1. [root@localhost ~]# edquota -t

429277-20170926090043010-983008431.jpg
查看quota限制

  1. [root@localhost ~]# quota -uvs user1
  2. Disk quotas for user user1 (uid 1003):
  3. Filesystem space quota limit grace files quota limit grace
  4. /dev/sdb1 0K 245M 293M 0 0 0

quota测试
输出造0机,制造一个270M的文件bigfile,超出软限制会报警告
再制造一个270M的bigfile2,会出错:超出磁盘限额。

  1. [root@localhost ~]# su - user1
  2. 上一次登录:五 1 29 22:27:05 CST 2021pts/0
  3. [user1@localhost ~]$ dd if=/dev/zero of=bigfile bs=1M count=270
  4. sdb1: warning, user block quota exceeded.
  5. 记录了270+0 的读入
  6. 记录了270+0 的写出
  7. 283115520字节(283 MB)已复制,4.71575 秒,60.0 MB/秒
  8. [user1@localhost ~]$ dd if=/dev/zero of=bigfile2 bs=1M count=270
  9. sdb1: write failed, user block limit reached.
  10. dd: 写入"bigfile2" 出错: 超出磁盘限额
  11. 记录了23+0 的读入
  12. 记录了22+0 的写出
  13. 24064000字节(24 MB)已复制,0.43076 秒,55.9 MB/秒
  14. [user1@localhost ~]$ ll -h /mnt/sdb1/user1
  15. 总用量 293M
  16. -rw-r--r--. 1 user1 usergrp 270M 1 29 22:31 bigfile
  17. -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个。

  1. [root@localhost ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6
  2. test' /boot
  3. [root@localhost ~]# xfs_quota -x -c report /boot
  4. User quota on /boot (/dev/sda1)
  5. Blocks
  6. User ID Used Soft Hard Warn/Grace
  7. ---------- --------------------------------------------------
  8. root 115516 0 0 00 [--------]
  9. test 0 3072 6144 00 [--------]
  10. [root@localhost ~]# su - test
  11. [test@localhost ~]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
  12. 1+0 records in
  13. 1+0 records out
  14. 5242880 bytes (5.2 MB) copied, 0.00350676 s, 1.5 GB/s
  15. [test@localhost ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
  16. dd: error writing ‘/boot/tom’: Disk quota exceeded
  17. 1+0 records in
  18. 0+0 records out
  19. 4194304 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 号是重新计算的,硬链接不能连接目录
  • 软链接特点
    • 不论是修改源文件(check),还是修改软链接文件(check-soft),另一个文件中的数据都会发生改变。
    • 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显 示文件不存在。
    • 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件 名inode 号
    • 软链接可以链接目录。 软链接可以跨分区

      ln:创建链接文件

      ln 选项 目标

参数 作用
-f 强制创建链接
-s 创建“符号链接”,如果不带-s参数默认创建硬链接
-i 覆盖前先询问
-v 显示创建链接的详细过程

软链接演示:

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

硬链接演示:

  1. [root@localhost ~]# echo "hello" > test
  2. [root@localhost ~]# ln test test123
  3. [root@localhost ~]# cat test123
  4. hello
  5. [root@localhost ~]# ls -l test
  6. -rw-r--r--. 2 root root 6 Apr 12 06:12 test
  7. [root@localhost ~]# rm -f test
  8. [root@localhost ~]# cat test123
  9. hello