• 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 [选项] [目录或文件名]
    
    • 1
    • -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/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 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
    ....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    注意,使用 -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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

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

    ​ du 命令的格式如下:

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

    选项:

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

    【例1】

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

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

    【例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		.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    【例3】

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

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

    给硬盘分区

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

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

    ​ fdisk 命令的格式如下:

    [root@localhost ~]# fdisk [~l] 设备文件名
    
    • 1
    • -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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      可以看到刚刚新增的Disk /dev/sdb

    2. 执行 fdisk /dev/sdb

       fdisk /dev/sdb
      
      • 1

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 文件系统格式] 分区设备文件名
    
    • 1
    • -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 文件系统了!简单明了!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    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]
    
    • 1

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

    [root@localhost ~]# mount -a
    
    • 1

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

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

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

    各选项的含义分别是:

    • -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)
    ....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    【例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
    #记得改回来,否则会影响系统启动
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    【例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
    
    • 1
    • 2
    • 3
    • 4

    ​ 可能有人会想,为什么使用 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    不可以,系统开机时会自动读取/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果你想要实现这三个分区,启动的时候自动挂载,需要修改/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    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
      
      • 1

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

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

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

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

      [root@hyy diskstudy]# quotacheck -acuv
      
      • 1
      • -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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    3. 开启磁盘限额的功能,第一步是使其具备该功能而非开启。

      [root@hyy diskstudy]# quotaon ./web
      
      • 1
    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
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • blocks:限制空间大小
      • inodes:限制文件数目
        • soft:符号限制,不出错,但会提醒超出,一般不起作用
        • hard:硬限制,不可以超出,否则出错
    5. 查看用户对应限额:

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

      或者

      使用root用户:

      repquota ./web
      
      • 1
    验证操作

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

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

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

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

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

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

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

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

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

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

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

    3.8 实例:添加硬盘分区步骤
    1. 划分分区(fdisk)
    2. 创建文件系统(mkfs)
    3. 尝试挂载(mount)
    4. 写入配置文件(/etc/fstab)
  • 相关阅读:
    Web APIs第01天笔记——Web API介绍
    go-zero 成长之路—微服务电商实战系列(七、并发处理工具MapReduce的使用)
    TOP10-k8s-安全措施
    Lecture 13 File system(文件系统)
    F. Kirei and the Linear Function(思维 + 哈希 + 预处理)
    SpringCloud之Sentinel概述和安装及简单整合
    3招学会TikTok电商选品,速看
    95后阿里P7晒出工资单:狠补了这个,真香....
    .NET MVC第七章、jQuery插件验证
    CMakeLists.txt上OpenCV库配置
  • 原文地址:https://blog.csdn.net/weixin_52000204/article/details/128007218