Bootstrap

Linux从入门到精通(八)——Linux磁盘管理

文章篇幅较长,建议先收藏,防止迷路

文章跳转
Linux从入门到精通(八)——Linux磁盘管理go
Linux从入门到精通(九)——Linux编程go
Linux从入门到精通(十)——进程管理go
Linux从入门到精通(十一)——计划任务go
Linux从入门到精通(十二)——shell编程go

Linux磁盘管理

1. linux 文件系统类型

  1. Ext( Extended file system) :

    是为linux核 心所做的第-一个文件系统。采用Unix文件系统 ( UFS )的元数据结构,以克服MINIX文件系 统性能不佳的问题。它是在linux上,第一个利用 虚拟文件系统实现出的文件系统,在linux核心 0.96c版中首次加入支持。

  2. Ext2 :

    GNU/Linux 系统中标准的文件系统, 其特点为存取文件的性能极好,对于中小型的文件 更显示出优势,这主要得利于其簇快取层的优良设 计。

  3. ext3 :中采用了日志式的管理机制,它使文件系统; 具有很强的快速恢复能力,并且由于从ext2 转 换到ext3 无须进行格式化,因此,更加推进了 ext3文件系统的大大推广。

  4. Ext4 :

    Ext3的改进版,修改了 Ext3 中部分 重要的数据结构,而不仅仅像 Ext3对 Ext2 那样,只是增加了-一个日志功能而已。Ext4可 以提供更佳的性能和可靠性,还有更为丰富的功能;

  5. Btrfs:

    它被称为是下一代Linux文件系统。据说它采用了很多先进的文件系统设计,不仅解决了ext2/3的扩展性问题,还让人们看到了下一代文件系统所具有的许多其他特性。

  6. swap文件系统:

    该文件系统是 Linux中作为 交换分区使用的。在安装Linux 的时候,交换 分区是必须建立的,并且它所采用的文件系统类型 必须是 swa p 而没有其他选择。

  7. 支持的其他类型:

    • IS09660文件系统,光盘所使用的文件系统。
    • FAT文件系统,MSDOS 和Windows使用的文件系统。
    • NTFS文件系统是Windows NT使用的文件系统,并且可以在Windows 2000/XP上使用。NTFS文件系统比Windows以前版本使用的FAT文件系统拥有更好的稳定性、更高的磁盘利用率及更好的性能。

2. linux 文件系统配置文件

  • /etc/filesystems:系统指定的测试挂载文件系统类型
  • /proc/filesystems:Linux 系统已经加载的文件系统类型
  • /lib/modules/2.6.18-274.el5/kernel/fs/ 文件系统类型的驱动所在目录
  • /etc/fstab
  • /etc/mtab
linux 文件类型的颜色

​ linux文件颜色的含义:蓝色代表目录 绿色代表可执行文件 红色表示压缩文件 浅蓝色表示链接文件 灰 色表示其他文件 红色闪烁表示链接的文件有问题了 黄色表示设备文件:

  • 蓝色文件----------目录
  • 白色文件----------一般性文件,如文本文件,配置文件,源码文件等
  • 浅蓝色文件----------链接文件,主要是使用 ln 命令建立的文件
  • 绿色文件----------可执行文件,可执行的程序
  • 红色文件-----------压缩文件或者包文件
Linux 下用字符表示的文件类型
  • -:普通文件
  • d:目录文件
  • l:链接文件
  • b:块设备文件
  • c:字符设备文件
  • p:管道文件

3. 文件系统操作命令

3.1 df:

列出文件系统的整体磁盘使用情况

[root@localhost ~]# df [选项] [目录或文件名]
  • -a 显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统;
  • -m 以 MB 为单位显示容量;
  • -k 以 KB 为单位显示容量,默认以 KB 为单位;
  • -h 使用人们习惯的 KB、MB 或 GB 等单位自行显示容量;
  • -T 显示该分区的文件系统名称;
  • -i 不用硬盘容量显示,而是以含有 inode 的数量来显示。
例子

【例1】

​ 不使用任何选项的 df 命令,默认会将系统内所有的文件系统信息,以 KB 为单位显示出来。

[root@VM-24-17-centos ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G   28K  1.9G   1% /dev/shm
tmpfs           1.9G  540K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1        79G   15G   61G  20% /
tmpfs           374M     0  374M   0% /run/user/
  • Filesystem:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
  • 1K-blocks:此列表示文件系统的总大小,默认以 KB 为单位;
  • Used:表示用掉的硬盘空间大小;
  • Available:表示剩余的硬盘空间大小;
  • Use%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;
  • Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置。

【例2】

[root@VM-24-17-centos ~]# df -ahT
Filesystem     Type         Size  Used Avail Use% Mounted on
sysfs          sysfs           0     0     0    - /sys
proc           proc            0     0     0    - /proc
devtmpfs       devtmpfs     1.9G     0  1.9G   0% /dev
securityfs     securityfs      0     0     0    - /sys/kernel/security
tmpfs          tmpfs        1.9G   28K  1.9G   1% /dev/shm
devpts         devpts          0     0     0    - /dev/pts
tmpfs          tmpfs        1.9G  540K  1.9G   1% /run
tmpfs          tmpfs        1.9G     0  1.9G   0% /sys/fs/cgroup
cgroup         cgroup          0     0     0    - /sys/fs/cgroup/systemd
pstore         pstore          0     0     0    - /sys/fs/pstore
bpf            bpf             0     0     0    - /sys/fs/bpf
cgroup         cgroup          0     0     0    - /sys/fs/cgroup/blkio
....

注意,使用 -a 选项,会将很多特殊的文件系统显示出来,这些文件系统包含的大多是系统数据,存在于内存中,不会占用硬盘空间,因此你会看到,它们所占据的硬盘总容量为 0。

3.2 du:

​ 列出目录所占空间。

[root@VM-24-17-centos ~]# ls -lh
total 40K
drwxr-xr-x 5 root root 4.0K Oct 17 21:26 goprojects
-rw-r--r-- 1 root root  25K Nov 18  2021 install.sh
drwxr-xr-x 2 root root 4.0K Nov  7 20:58 linuxstudy
drwxr-xr-x 5 root root 4.0K May  4  2022 mysql

​ 需要注意的是,使用"ls -lh"命令是可以看到文件的大小的。但是大家会发现,在使用"ls -lh"命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。

​ 大家可以将其想象成图书馆的书籍目录和实际书籍。如果我们用"ls-lh"命令査看,则只能看到这些书籍占用了 1 页纸的书籍目录,但是实际书籍到底有多少是看不到的,哪怕它堆满了几个房间。

​ 但是我们在统计目录时,不是想看父目录下的子目录名和子文件名到底占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小。

​ du 命令的格式如下:

[root@localhost ~]# du [选项] [目录或文件名]

选项:

  • -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量;
  • -h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;
  • -s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量;
例子

【例1】

​ 统计当前目录的总磁盘占用量大小,同时会统计当前目录下所有子目录的磁盘占用量大小,不统计子文件磁盘占用量的大小。默认单位为KB。

[root@VM-24-17-centos linuxstudy]# du -h
4.0K	./a # 统计每个子目录的大小
4.0K	./b
72K	. # 统计当前目录总大小

【例2】

​ 统计当前目录的总大小,同时会统计当前目录下所有子文件和子目录磁盘占用量的大小。默认单位为 KB

[root@VM-24-17-centos linuxstudy]# du -ha
4.0K	./.test.txt.swo
24K		./test1.log
0		./a/testa.txt
4.0K	./a
24K		./test.log
4.0K	./.test.txt.swp
0		./b/testb.txt
4.0K	./b
4.0K	./test.txt
72K		.

【例3】

​ 只统计磁盘占用量总的大小,同时使用习惯单位显示

[root@VM-24-17-centos linuxstudy]# du -sh
72K		.
3.3 Fdisk

给硬盘分区

​ 我们在安装操作系统的过程中已经对系统硬盘进行了分区,但如果新添加了一块硬盘,想要正常使用,难道需要重新安装操作系统才可以分区吗?

​ 当然不是,在 Linux 中有专门的分区命令 fdisk parted。其中 fdisk 命令较为常用,但不支持大于 2TB 的分区;如果需要支持大于 2TB 的分区,则需要使用 parted 命令,当然 parted 命令也能分配较小的分区。我们先来看看如何使用 fdisk 命令进行分区。

​ fdisk 命令的格式如下:

[root@localhost ~]# fdisk [~l] 设备文件名
  • -l选项会将设备名称对应的设备的所有分区信息,显示后退出,不指定设备时显示系统能够识别的所有设备。

  • 不使用参数时,则进入fdisk命令的交互界面,可按提示进行操作。

    注意: fdisk 以设备名称作为参数,而不是文件系统名称。

实例
1、新增硬盘:

一直下一步,最后重启虚拟机即可。

2、磁盘分区:

注意,千万不要在当前的硬盘上尝试使用 fdisk,这会完整删除整个系统,一定要再找一块硬盘,或者使用虚拟机。这里给大家举个例子:

# 查询本机可以识别的硬盘和分区
[root@hyy ~]# fdisk -l 

Disk /dev/sda: 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: 0x000058a3 

Device 	   Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      616447      307200   83  Linux
/dev/sda2          616448     4810751     2097152   82  Linux swap / Solaris
/dev/sda3         4810752    41943039    18566144   83  Linux

# 第二个硬盘识别,这个硬盘的信息
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
  • Device:分区的设备文件名。
  • Boot:是否为启动引导分区,在这里 /dev/sda1 为启动引导分区。
  • Start:起始柱面,代表分区从哪里开始。
  • End:终止柱面,代表分区到哪里结束。
  • Blocks:分区的大小,单位是 KB。
  • id:分区内文件系统的 ID。在 fdisk 命令中,可以 使用 “i” 查看。
  • System:分区内安装的系统是什么。

如果这个分区并没有占满整块硬盘,就会提示 “Partition 1 does not end on cyl inder boundary”,表示第一个分区没有到硬盘的结束柱面。大家发现了吗?/dev/sda 已经分配完了分区,没有空闲空间了。而第二块硬盘 /dev/sdb 已经可以被识别了,但是没有可分区。

我们以硬盘 /dev/sdb 为例来做练习,命令如下:

对设备实施分区操作,进入交互界面

  1. 执行命令 fdisk -l查看是否添加了新设备

    [root@hyy ~]# fdisk -l
     
    Disk /dev/sda: 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: 0x000058a3
    
    Device    Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048      616447      307200   83  Linux
    /dev/sda2          616448     4810751     2097152   82  Linux swap / Solaris
    /dev/sda3         4810752    41943039    18566144   83  Linux
    
    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 /dev/sdb

  2. 执行 fdisk /dev/sdb

     fdisk /dev/sdb
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxubsNxz-1669206638802)(images/image-20221109113044084.png)]

  3. 在显示出的界面中,“m”查看帮助菜单

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-khP6UpHK-1669206638804)(images/image-20221109113722134.png)]

    • d 删除分区

    • n 添加新分区

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KoIhnYwu-1669206638806)(images/image-20221109113801212.png)]

      • p :primary主分区

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GzY23WyS-1669206638807)(images/image-20221109130243046.png)]

        输入分区号—> 输入起始柱面号—> 输入结束柱面号(或者+size{K,M,G})

      • e :extend 扩展分区

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qp70uyzE-1669206638808)(images/image-20221109130318913.png)]

      • l :逻辑分区(创建扩展分区之后才出现)

        创建了扩展分区之后,再创建分区,提示命令会发生改变,出现逻辑分区(分区号从5):

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fHP8S2Z2-1669206638812)(images/image-20221109125220876.png)]

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMvE1v9G-1669206638813)(images/image-20221109130350593.png)]

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzBNqyjW-1669206638816)(images/image-20221109130401327-16679702426961.png)]

      注意:

      • Linux系统主分区最多4个,多数情况下采用3个主分区+扩展分区。
      • 扩展分区最多只能有一个(os限制)
      • 能够被格式化后作为数据访问的分区为主分区与逻辑分区。扩展分区无法格式化。
      • 逻辑分区的数量依据操作系统而不同,在linux 系统中,IDE硬盘最多有59个逻辑分区 (5- 63号) SATA硬盘最多11个逻辑分区( 5- 15 )
    • p 打印分区表

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Scu7DhJi-1669206638821)(images/image-20221109130435298.png)]

    • q 退出而不保存更改

    • w 将表写入磁盘并退出

3.4 Mkfs:

格式化分区(为分区写入文件系统)

Mkfs 命令的格式如下:

[root@hyy ~]# mkfs [-t 文件系统格式] 分区设备文件名
  • -t 文件系统格式:用于指定格式化的文件系统,如 ext3、ext4;
例子

​ 我们建立了 /dev/sdb1(主分区)、/dev/sdb2(扩展分区)、/dev/sdb5(逻辑分区)和 /dev/sdb6(逻辑分区)这几个分区,其中 /dev/sdb2 不能被格式化,剩余的三个分区都需要格式化之后使用。

​ 这里我们以格式化 /dev/sdb1 分区作为演示,其余分区的格式化方法一样。

​ 格式化 /dev/sdb1 分区的执行命令如下:

# 初始化分区,为主分区写入ext3的文件系统
[root@hyy ~]# mkfs -t ext3 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label= # 这里指的是卷标名,我们没有设置卷标
OS type: Linux
Block size=4096 (log=2) # block 的大小配置为 4K
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621184 blocks # 由此配置决定的inode/block数量
131059 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 
# 这样就创建起来所需要的 Ext3 文件系统了!简单明了!
3.5 Mount:

挂载命令。

​ 所有的硬件设备必须挂载之后才能使用,只不过,有些硬件设备(比如硬盘分区)在每次系统启动时会自动挂载,而有些(比如 U 盘、光盘)则需要手动进行挂载。

什么叫挂载:

​ Linux 系统中 “一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。

​ 因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。

​ 纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。

​ 举个例子,我们想通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32cJJQnI-1669206638831)(images/image-20221109131811820.png)]

​ 图 1 中可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。

​ 接下来,我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果如图 2 所示。

​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCBvoVS1-1669206638840)(images/image-20221109131851932.png)]

可以看到,U 盘文件系统已经成为 Linux 文件系统目录的一部分,此时访问 /sdb-u/ 就等同于访问 U 盘。

​ 前面讲过,根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。

总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

​ 通过学习 Linux 文件系统,我们可以对挂载的含义进行引申,挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。而要将文件系统挂载到 Linux 系统上,就需要使用 mount 挂载命令。

mount 命令的常用格式有以下几种:

root@localhost ~]# mount [-l]

单纯使用 mount 命令,会显示出系统中已挂载的设备信息,使用 -l 选项,会额外显示出卷标名称.

[root@localhost ~]# mount -a

-a 选项的含义是自动检查 /etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。

这里简单介绍一下 /etc/fstab 文件,此文件是自动挂载文件,系统开机时会主动读取/etc/fstab这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。有关自动挂载(修改此文件)的具体介绍,会在后续文章中讲解。

[root@localhost ~]# mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点

各选项的含义分别是:

  • -t 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。
  • -L 卷标名:除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载。
  • -n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项;
  • -o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则使用默认值(defaults)。具体的特殊选项参见表 1;
    • rw/ro:是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。
    • async/sync:此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。
    • dev/nodev:是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。
    • auto/noauto:是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。
    • suid/nosuid:设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。
    • exec/noexec:设定在文件系统中是否允许执行可执行文件,默认是允许。
    • user/nouser:设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。
    • defaults:定义默认值,相当于 rw、async 、dev、auto、suid、exec、nouser、这 7 个选项。
    • remount:重新挂载已挂载的文件系统,一般用于指定修改特殊权限。
例子

【例1】

​ 查看系统中已经挂载的文件系统,注意有虚拟文件系统

[root@localhost ~]# mount
/dev/sda3 on / type ext4 (rw) 
# 含义是,将 /dev/sda3 分区挂载到了 / 目录上,文件系统是 ext4,具有读写权限
proc on /proc type proc (rw)
sysfe on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw, gid=5, mode=620)
/dev/sda1 on /boot type ext4 (rw)
....

【例2】

​ 修改特殊权限。通过例 1 我们查看到,/boot 分区已经被挂载了,而且采用的是 defaults 选项。这里我们重新挂载分区,并采用 noexec 权限禁止执行文件执行,看看会出现什么情况(注意不要用 / 分区做实验,否则系统命令也就不能执行了)。

​ 重新挂载 /boot 分区,并使用 noexec 权限

[root@localhost ~]# mount -o remount noexec /boot

[root@localhost sh]# cd /boot
#写一个 shell 脚本,看是否会运行
[root@localhost boot]#vi hello.sh
#!/bin/bash
echo "hello!!"
[root@localhost boot]# chmod 755 hello.sh
[root@localhost boot]# ./hello.sh
-bash:./hello.sh:权限不够
#虽然赋予了hello.sh执行权限,但是仍然无法执行
[root@localhost boot]# mount -o remount exec /boot
#记得改回来,否则会影响系统启动

​ 对于特殊选项的修改,除非特殊场景下需要,否则不建议大家随意修改,非常容易造成系统出现问题,而且还找不到问题的根源。

【例3】

挂载分区。

# 将刚才创建的三个分区(1主,2逻辑)分别挂载到 /diskstudy目录下的web、bak、test目录下
[root@hyy diskstudy]# mount /dev/sdb1 ./web
[root@hyy diskstudy]# mount /dev/sdb5 ./bak
[root@hyy diskstudy]# mount /dev/sdb6 ./test

​ 可能有人会想,为什么使用 Linux 系统的硬盘分区这么麻烦,而不能像 Windows 系统那样,硬盘安装上就可以使用?

​ 其实,硬盘分区(设备)挂载和卸载(使用 umount 命令)的概念源自 UNIX,UNIX 系统一般是作为服务器使用的,系统安全非常重要,特别是在网络上,最简单有效的方法就是“不使用的硬盘分区(设备)不挂载”,因为没有挂载的硬盘分区是无法访问的,这样系统也就更安全了。

​ 另外,这样也可以减少挂载的硬盘分区数量,相应地,也就可以减少系统维护文件的规模,当然也就减少了系统的开销,即提高了系统的效率。

自动挂载

查看是否挂载:

[root@hyy diskstudy]# cat /etc/mtab
....
/dev/sdb1 /diskstudy/web ext3 rw,seclabel,relatime,data=ordered 0 0
/dev/sdb5 /diskstudy/bak ext2 rw,seclabel,relatime 0 0
/dev/sdb6 /diskstudy/test ext2 rw,seclabel,relatime 0 0

那么重新启动虚拟机,这三个分区是否还可以使用?

不可以,系统开机时会自动读取/etc/fstab这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。

[root@hyy diskstudy]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jun  1 00:21:21 2021
#
# 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
#
UUID=47a5bc34-1592-4c26-9409-73f14d3770e9 /                       xfs     defaults        0 0
UUID=dffed75c-4132-4782-893a-e282d515e2f7 /boot                   xfs     defaults        0 0
UUID=4b6a9d5f-1029-4c6b-b443-98150efe360c swap                    swap    defaults        0 0

如果你想要实现这三个分区,启动的时候自动挂载,需要修改/etc/fstab

[root@hyy diskstudy]# vi /etc/fstab
....
# 磁盘管理学习
# 设备名        挂载目录        文件系统        选项            备份    检测
/dev/sdb1       /web            ext3            defaults        0       0
/dev/sdb5       /bak            ext2            defaults        0       0
/dev/sdb6       /test           ext2            defaults        0       0

这样启动的 时候就会自动挂载了。

3.6 磁盘配额:

针对某个用户,限制其对某个分区的使用大小,防止用户创建过大的文件,造成空间不足。

  1. usrquota:针对单个用户进行空间限制
  2. grpquota:针对用户组进行空间限制
  3. quotacheck:自检测并创建用户(组)的磁盘配额文件。
    • quota.usr:用户的磁盘配额文件
    • quota.group:用户组的磁盘配额文件
  4. quotaon:开启限额功能
  5. edquota 用户名 : 针对某个用户限额
案例:

给ls用户和ww用户进行磁盘配额,步骤:

  1. 修改要限制使用分区 的挂载选项,使其具备限额功能。

    [root@hyy diskstudy]# mount -o remount,usrquota ./web
    

    修改后查看/etc/mtab,可以看到多了usrquota

    [root@hyy diskstudy]# cat /etc/mtab
    ...
    /dev/sdb1 /diskstudy/web ext3 rw,seclabel,relatime,quota,usrquota,data=ordered 0 0
    ...
    

    此时还是临时挂载,上面说了,如果需要自动挂载,需要修改/etc/fstab文件:

    [root@hyy diskstudy]# vi /etc/fstab
    /dev/sdb1       /web            ext3            defaults,usrquota        0       0
    
  2. 生成一个磁盘配额文件:

    [root@hyy diskstudy]# quotacheck -acuv
    
    • -a:扫描/etc/mtab文件所有挂载的文件系统。
    • -c:忽略现有的配置文件
    • -u:计算每个用户占用空间,创建quota.usr
    • -g:计算每个用户组占用空间,创建quota.group
    • -v:以交互的方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxDWQj1w-1669206638846)(images/image-20221109150846141.png)]

    执行后发现报错,没有生成成功,需要:

    [root@hyy diskstudy]# setenforce 0
    
    [root@hyy diskstudy]# quotacheck -acuv
    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 [/diskstudy/web] done
    quotacheck: Old group file name could not been determined. Usage will not be subtracted.
    quotacheck: Checked 3 directories and 1 files
    
    [root@hyy diskstudy]# ls web
    aquota.user  lost+found
    
  3. 开启磁盘限额的功能,第一步是使其具备该功能而非开启。

    [root@hyy diskstudy]# quotaon ./web
    
  4. 针对某个用户进行限制:

    [root@hyy diskstudy]# edquota #ls #用户名
    
    # 进入一个vi界面,限制ls用户,限额20M
    Disk quotas for user ls (uid 1003):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sdb1                         0          0         20480          0        0        0
    
    
    • blocks:限制空间大小
    • inodes:限制文件数目
      • soft:符号限制,不出错,但会提醒超出,一般不起作用
      • hard:硬限制,不可以超出,否则出错
  5. 查看用户对应限额:

    用户登录之后,使用quota命令查看限额

    或者

    使用root用户:

    repquota ./web
    
验证操作

创建指定大小文件(在./web目录下):

[root@hyy diskstudy]# dd if=/dev/zero of=./test.txt bs=1024 count=51200
+ bs=1024 1K
+ count 多少个bs
  1. 如果需要对其他用户实施同样的 限制,无需重新走一遍:

    edquota -p 已有限制用户 待限制用户
    
    
3.7 umount:

umount 命令用于卸载已经挂载的硬件设备,该命令的基本格式如下:

[root@localhost ~]# umount 设备文件名或挂载点
例子

注意,卸载命令后面既可以加设备文件名,也可以加挂载点,不过只能二选一,比如:

[root@localhost ~]# umount /dev/sdb6  # 使用设备名卸载
[root@localhost ~]# umount /diskstudy/test # 使用挂载点卸载

另外,我们在卸载时有可能会出现以下情况:

[root@localhost ~]# cd /diskstudy/test # 进入sdb6分区挂载目录
[root@localhost cdrom]# umount /diskstudy/test
umount: /diskstudy/test: device is busy.
#报错,设备正忙

这种报错是因为我们已经进入了挂载点,因此,如果要卸载某硬件设备,在执行 umount 命令之前,用户须退出挂载目录。

卸载硬件设备成功与否,除了执行 umount 命令不报错之外,还可以使用 df 命令或 mount -l 来查看目标设备是否还挂载在系统中。

3.8 实例:添加硬盘分区步骤
  1. 划分分区(fdisk)
  2. 创建文件系统(mkfs)
  3. 尝试挂载(mount)
  4. 写入配置文件(/etc/fstab)
;