Linux 存储的基本管理

1. 实验环境的配置

在虚拟机中添加一块硬盘。
linux 中用超级用户的身份打开虚拟机控制界面,选择要添加硬盘的虚拟机;选择Add Hardware ,进入添加设别界面;

在这里插入图片描述

选择添加一块 5G 的硬盘,如图所示;

在这里插入图片描述
完成之后,会看到系统中有两块硬盘。
在这里插入图片描述

2. 设备识别

设备接入系统后都是以文件的形式存在。

设备文件名称:

SATA/SAS/USB /dev/sda, /dev/sdb ##s= SATA ,d=DISK ,a表示第一块,b 表示第二块
IDE /dev/hd0,/dev/hd1 ##h= hard
VIRTIO-BLOCK /dev/vda,/dev/vdb ##V=virtio
M2 (SSD) /dev/nvme0,/dev/nvme1 ##nvme=m2
SD/MMC/EMMC(卡) /dev/cdrom,/dev/sr0,/dev/sr1 ##mmcblk=mmc卡
光驱 /dev/cdrom,/dev/sr0,/dev/sr1

设备查看

命令含义
fdisk -l查看磁盘分区情况
lsblk设备使用情况
blkid设备管理方式及设备id
df查看正在被系统挂载的设备
cat /proc/partitions查看系统识别设备

其中 df -h 和 df -H 时以规定的方式来显示正在被系统挂载设别的大小;如图所示:

输入命令 df 查看正在被系统挂载的设备;
输入命令 df -h 是以 2 的 n 次方计算大小;
输入命令 df -H 是以 10 的 n 次方计算大小;

在这里插入图片描述
输入命令 lsblk 可以查看设备的使用情况;
输入命令 blkid 查看设备管理方式及设备id;

在这里插入图片描述

输入命令 cat /proc/partitions 查看系统识别设备;
输入命令 fdisk -l 查看磁盘分区情况;

在这里插入图片描述

3. 设备挂载

在系统中有设备 id 的设备是可以被系统使用的。

  • 设备临时挂载
命令含义
mount -o 挂载参数 设备(挂载点)指定参数挂载设备
umount 设备(挂载点)卸载挂载
mount查看挂载信息
fuser -kvm 设备(挂载点)当出现设备正忙时来卸载设备
mount -o remount,参数 挂载点转换挂载参数

输入命令 df 查看正在被系统挂载的设备;可以看到 /dev/vda1 挂载在 /boot 中;
输入命令 ls /boot 查看 boot 中的内容;
输入命令 umount /dev/vda1 表示将 /dev/vda1 挂载的设备卸载掉;在卸载完成之后,此时查看 /boot 中的内容,可以看到 /boot 中无法读取 /dev/vda1 中的数据;

在这里插入图片描述
已经卸载的设备可以挂载到其他目录上,
输入命令 mount /dev/vda1 /mnt/ 表示将设备 /dev/vda1 挂载到 /mnt/目录上;
此时在 /mnt/中可以看到和之前挂在 /boot/ 中的内容一致;

在这里插入图片描述

在卸载设备时,当设备正在被系统的程序使用,此时并不能卸载掉设备。
此时要卸载设备需要结束掉设备上进程;
输入命令 fuser -vm /mnt/-v ,其中 -v 表示显示详细信息, -m 表示显示进程;此命令的意思是查看设备上运行的程序有哪些;
输入命令 fuser -kvm /mnt/-v ,其中 -k 表示结束进程,此命令可以结束设备上运行的大多数进程。

在这里插入图片描述

输入命令 mount 可以查看挂载的信息;

在这里插入图片描述
在使用 mount 挂载设备时,挂载目录中默认对任何用户开放权限,这对于系统来说时不安全的表现;
在挂载时,可以指定挂载参数来挂载设备,如输入命令 mount -o ro /dev/vda1 /mnt/ 表示只读挂载,任何人对于挂载目录只能看不能写;
在挂载完成之后在用 mount 命令查看挂载信息时,最后一行会有详细的显示;

在完成以上操作后,输入命令 mount -o remount,rw /dev/vda1 ,表示重新挂载 /mnt/ 上的设备并激活读写参数;

在这里插入图片描述

  • 设备永久挂载
    编辑 /etc/fstab ,设备挂载策略文件;
    如文件的最后一行所示, /dev/vdb1 为挂载的设备 , /mnt/ 为挂载点, xfs 为文件系统类型 , default 为挂载参数,0表示不备份 ,0表示不检测。

在这里插入图片描述

在编辑完此文件后,所编写的内容并不会马上生效,此时可以输入命令 mount -a ,让系统重新读取 /etc/fstab 文件。

在这里插入图片描述

注:
此文件内容编写错误会导致系统启动失败; 按照提示在操作系统界面输入超级用户密码; 注释错误行或者修改正确; 重启系统即可。

4. 设备中文件的查找

命令含义
find -name按名称查找
find -user按用户查找
find -group按组查找
find -type按类型查找
find -perm按权限查找
find -exec对查找的内容做执行动作
find -maxdepth按最大深度查找
find -mindepth按最小深度查找
find -cmin 1 -1 +1按照修改时间查找
find -size +/-/1M按照文件大小查找
find -o按照或者的关系查找
find -a按照并且的关系查找
find -not查找不包括的内容

为了可以清楚的看到该实验的效果,建议以下的文件并修改其权限、用户和组的信息如下图所示:

在这里插入图片描述

输入命令 watch -n 1 ls -l /mnt/ 对目录中的文件进行监控,以便后面执行命令可以清楚的看到效果。

重新打开一个 shell 窗口:
输入命令 find /etc/ -name passwd 表示按名称在 /etc/中进行查找 passwd;
输入命令 find /etc/ -maxdepth 2 -name passwd 表示按照最大查找深度为2 在 /etc/中进行查找 passwd;
输入命令 find /etc/ -maxdepth 1 -name passwd 表示按照最大查找深度为1 在 /etc/中进行查找 passwd;
输入命令 find /etc/ -mindepth 2 -name passwd 表示按照最小深度为2 在 /etc/ 中查找 passwd;
输入命令 find /etc/ -mindepth 1 -name passwd 表示按照最小深度为1 在 /etc/ 中查找 passwd;
输入命令 find /mnt/ -maxdepth 1 -type d 表示按照最大深度为1 在 /mnt/ 中查找类型为目录的文件
输入命令 find /mnt/ -mindepth 2 -type d 表示按照最小深度为2 在 /mnt/ 中查找类型为目录的文件;
输入命令 find /mnt/ -mindepth 1 -type d 表示按照最小深度为1 在 /mnt/ 中查找类型为目录的文件;
输入命令 find /mnt/ -mindepth 0 -type d 表示按照最小深度为0 在 /mnt/ 中查找类型为目录的文件;

在这里插入图片描述
输入命令 find /mnt/ -user root 表示按照超级用户来查找文件;
输入命令 find /mnt/ -user root 表示按 westos 组来查找文件;
输入命令 find /mnt/ -user zxk -group westos 表示按照 zxk 用户和 westos 组的条件来查找文件;
输入命令 find /mnt/ -user zxk -group root 表示按照 zxk 用户和 root 组的条件来查找文件;
输入命令 find /mnt/ -user zxk -a -group westos 表示按照 zxk 用户和 westos 组的条件来查找文件;
输入命令 find /mnt/ -user zxk -o -group root 表示按照 zxk 用户或者 root 组的条件来查找文件;
输入命令 find /mnt/ -type -d 表示按照类型为目录的条件查找文件;

在这里插入图片描述

输入命令 find /mnt/ -not -user root 表示按照不是超级用户的条件来查找文件;

在这里插入图片描述
输入命令 touch /mnt/zxkfile4 表示修改 /mnt/zxkfile4 的时间;
输入命令 find /mnt/ -cmin 1 表示查找 1分钟以内修改的文件;
输入命令 find /mnt/ -cmin +1 表示查找修改超过 1 分钟的文件;

在这里插入图片描述

以上新建的文件都是空文件,用以下命令给文件写入内容;
输入命令 dd if=/dev/zero of=/mnt/zxkfile1 bs=1M count=10 表示给 zxkfile1 文件中写入大小为 10 M 的内容;
输入命令 dd if=/dev/zero of=/mnt/zxkfile2 bs=1M count=20 表示给 zxkfile2 文件中写入大小为 20 M 的内容;
输入命令 dd if=/dev/zero of=/mnt/zxkfile3 bs=1M count=40 表示给 zxkfile3 文件中写入大小为 40 M 的内容;

在这里插入图片描述

输入命令 find /mnt/ -size 20M,表示在 /mnt/ 中查找文件大小为20M 的文件;
输入命令 find /mnt/ -size -20M,表示在 /mnt/ 中查找文件大小小于20M 的文件;
输入命令 find /mnt/ -size +20M,表示在 /mnt/ 中查找文件大小大于20M 的文件;

在这里插入图片描述
输入命令 find /mnt/ -perm 222,表示查找文件权限为 222 的文件;

输入命令 find /mnt/ -perm /222,表示查找文件权限 u位、g位或者 o位含有2的文件;
输入命令 find /mnt/ -perm -222,表示查找文件权限 u 位有2 ,G位有2 和o 位有2 的文件;

在这里插入图片描述

对于文件的查找,并不是目的;对查找到的文件执行命令才是目的;
如输入 find /mnt/ -perm -002 -exec chmod 554 { } ; 表示在 /mnt/中查找文件权限 u 位有0 ,g位有0 和o 位有 2 的文件,并将查到的文家权限修改为 554。{ }表示find 命令查找结果,\ 是为了解释“;”。

在这里插入图片描述

5. 分区

分区方式:

位数分区表大小支持分区个数支持单个分区大小
legacy(MBR) 3264byte主分区4个, 所有分区16个2.2TB
UEFI(GPT) 64128byte理论上无限制, windows 1288ZiB
  • MBR 分区方式:

  • 主分区
    主分区表记录分区的信息并可以直接使用的分区

  • 扩展分区
    主分区表记录的分区,不可以直接使用,只是逻辑分区容器

  • 逻辑分区
    扩展分区之上划分的分区叫做逻辑分区

  • 分区方法

  1. 交互模式分区方法
    fdisk /dev/sdb

输入命令 fdisk /dev/sdb , /dev/sdb 为要分区的设别名称;
输入 m 可以获得帮助;

在这里插入图片描述

命令含义
m获得帮助
d删除
l列出所有分区类型
n新建
p显示分区表
t更改分区类型
w保存更改
q退出
g设定分区方式为 GPT
o设定分区方式为 mbr

如再输入命令 fdisk /dev/sdb ,对设备进行分区时,输入命令 g ,表示设定分区方式为 GPT 格式;当输入 p 来显示分区表的时候,会看到类型为 gpt;当输入 o ,表示设定分区方式为 mbr 格式;当输入 p 来显示分区表的时候,会看到类型为 dos;

在这里插入图片描述
如再输入命令 fdisk /dev/sdb ,对设备进行分区时;输入参数 n 表示新建分区;
会有如下的提示:
Partition type
p primary (0 primary, 0 extended, 4 free) ## 主分区
e extended (container for logical partitions) ## 扩展分区

Select (default p): p ## 表示建立主分区,此处直接回车会默认设定为主分区
Partition number (1-4, default 1): ## 分区表位置,默认会依次排序
First sector (2048-10485759, default 2048): ## 分区起始位置推荐使用默认
Last sector, +sectors or +size{K,M,G,T,P} (2048-10485759, default 10485759): +200M ##分区结束位置,+200M 表示设定此分区大小为200M;

在这里插入图片描述

当用 mbr 格式对设备进行分区时,只能分4个区,; 当4个主分区出现时,硬盘即使有容量也不能再新建分区,此时要新建就要删除一个;当删除设备时,一定确保设备在系统中未被使用,否则系统很有可能崩溃;

在这里插入图片描述

当删除最后一个分区后,再新建分区时,将最后一个分区新建为扩展分区,划分扩展分区时,要将所有剩余容量都给扩展分区;扩展分区建成之后,此时再新建分区时,所新建的为逻辑分区;

在这里插入图片描述

在创建好所有的分区之后,要输入命令 wq 来保存退出,如果直接 q 表示不保存退出;
在保存退出之后 输入命令 udevadm settle ,同步分区表到系统;
在同步之后再输入命令 cat /proc/partitions 即可看到所有的分区信息;

在这里插入图片描述

输入命令 fdisk /dev/sdb ,对设备分区进行管理;输入参数 d 删除新建的分区;当删除设备时,一定确保设备在系统中未被使用,否则系统很有可能崩溃。按照提示依次删除需要删除的设备即可。

在这里插入图片描述

  1. 非交互模式设定分区方式:
命令含义
parted /dev/vdb mklabel msdos将 /dev/vdb设备设为 dos 格式
parted /dev/vdb mklabel gpt将 /dev/vdb设备设为 gpt 格式
parted /dev/vdb mkpart primary 1 100划分 /dev/vdb设备的第一个主分区大小为100M
parted /dev/vdb rm 2删除 /dev/vdb设备上的第二个分区

输入命令 parted /dev/vdb mklabel msdos ,将/dev/vdb设备设为 dos 格式 ;
输入命令 fdisk -l 来查看设别信息,可以看到信息标识为 dos;

在这里插入图片描述

输入命令 parted /dev/vdb mklabel gpt ,将/dev/vdb设备设为 gpt 格式 ;
输入命令 fdisk -l 来查看设别信息,可以看到信息标识为 gpt;

在这里插入图片描述

输入命令 parted /dev/vdb mkpart primary 1 100,即可建立一块大小为 100M的主分区;
输入命令 parted /dev/vdb mkpart primary 101 500,即可建立一块大小为400M 的分区;
注:用非交互的模式建立分区时,从第二块开始要做计算。如上就是在第一块的基础上加上400,建立400M分区的格式。

在这里插入图片描述

在建立好分区之后,输入命令 parted /dev/vdb rm 2;即可删除第二块分区。

在这里插入图片描述

  1. 常用文件系统对比
文件系统FAT16FAT32NTFSNTFSEXT3EXT4XFS
最大卷2GB4GB256TB32TB1EB16EB
最大单个文件4GB8TB16TB2TB16TB8EB
最大文件个数655364177920429496729532000个子目录无限子目录
代表系统DOSWin95Win98Win2000以后RHEL5RHEL6HEL7~

mkfs.xfs -K /dev/sdb1 ## 格式化设备为xfs 文件系统(相当于在/dev/sdb1 上安装设备管理软件); -K 不丢弃空数据块。

在对设备分区之后,可以将分区设备进行挂载;当再输入 mount /dev/vdb1 /mnt/ 将分区挂载到 /mnt/ 上时,会提示无法识别文件系统,不知道是什么类型的;
此时需要输入命令来对文件系统格式化,如输入 mkfs.xfs /dev/vdb1 ,表示将文件系统格式化成 xfs 格式;如果格式化硬盘时,上面有文件,那么就需要加参数 -f ;
在格式化好文件系统之后,便可将其挂载;

在这里插入图片描述

  1. 永久挂载
    在完成上述格式化之后,便可将其挂载,但是此种挂载方式为临时挂载,当重启系统之后,挂载便不再存在。

mount /dev/sdb1 /mnt/westos ,mount 命令在挂载为临时挂载;
如果需要永久挂载需要编写 /etc/fstab 配置文件。

输入命令 vim /etc/fstab ,编写内容如下所示,表示将文件系统格式为 xfs 的设备 /dev/vdb1 以默认的方式挂载到 /mnt/上,无备份不检测。

:此文件千万不能编写错误,编写错误之后,系统就起不来。

在这里插入图片描述

在编写完成之后,文件并不会立即生效,此时可以输入命令 mount -a 使其立即生效。

  1. 设备删除
    dd if=/dev/zero of=/dev/vdb bs=1M count=1

在被一个设备上的所有分区删除完毕时,此时输入 fdisk -l 对设备信息查看,可以看到即使已经将新建的分区删除完毕,此时建立过分区的设备上还有标识信息存在;
可以输入命令 dd if=/dev/zero of=/dev/vdb bs=1M count=1 ,表示从无限零字节的文件中截取一块大小为1M的数据放在该设备上,便可将标识信息删除;将其完全删除成初始的样子。
此时再输入 fdisk -l 对设备信息查看时,便不再看到标识信息;

在这里插入图片描述

6. swap 分区

  • 作用:
    程序在运行时所有数据是在 RAM,当 RAM使用量超过了限额,为了使系统更加稳定,我们在硬盘上划分一部分空间来作内存缓冲区 swap;此时当内存使用超过限额,内核会把内存中闲置的数据存放到 swap 分区中,当程序需要 swap 分区中的数据时内核将 swap 分区中的数据再交还给内存进程处理

  • swap 分区大小建议:

    内存大小			swap分区建议大小		当允许HIBERNATE
    2GiB以下		        内存两倍			   内存3倍
    2-8GiB			  等于物理内存	     物理内存2倍
    8-64GiB				 4GiB			 1.5倍物理内存
    64GiB以上			 4GiB			 HIBERNATE不开
    
  • swap管理
    swapon -s ##查看swap分区信息
    swapon -a /dev/vdb1 ##打开swap分区
    mkswap /dev/sda1 ##格式化设备位swap格式
    swapon /dev/sda1 -p 0-32767 ## -p表示指定swap的优先级
    swapoff /dev/sda1 ##关闭swap分区

输入命令 fdisk /dev/vdb 新建一个分区,并将新建的分区修改为 swap 分区类型;操作过程如下图所示:

在这里插入图片描述

在这里插入图片描述
当 swap 分区创建成功之后,输入命令 udevadm settle 加载分区信息表;再输入命令 mkswap /dev/vdb1 来格式化新建的分区为 swap 格式;再输入命令 swapon -a 来开启 swap 分区;此时再输入命令 swapon -s 就可以看到新建的 swap 分区信息;

在这里插入图片描述

以上对于分区的设定是临时的;如果永久的添加 swap 分区就需要编辑配置文件 /etc/fstab ;编辑内容如图所示,编辑完配置文件之后,再次开机时便还可以看到分区信息;

如果需要设定分区的优先级,可以将 defaults 修改为优先级的 id 即可永久指定成功。

在这里插入图片描述

  • 删除 swap 分区
  1. 删除配置文件的内容;
  2. 输入命令 swapoff /dev/vdb1 关闭 swap 分区;
  3. 删除 swap 分区;

完成以上设定之后, swap 分区就被彻底的删除成功。

在这里插入图片描述

7. 磁盘配额

以上挂载设备之后,所设定主机的用户对挂载的设备有使用权限,但是如果不做设定,当好几个用户同时使用一个设备时,很可能一个用户便将此设备占满,这种是不合理的设置,需要做磁盘配额的设定。

作用:
设定用户能写入指定设备的最大额度

设定方法:

  1. 临时设定配额

输入命令 mount -o usrquota /dev/vdb1 /mnt/ ,表示挂载设备并激活配额参数,防止一个用户占用一个硬盘;
输入命令 edquota -u zxk ,表示设定 zxk 用户的配额;

默认的设置如下所示:Filesystem 设备名称,blocks 表示用户已经创建数据,soft 软限, hard (最大大小)硬限, inodes 表示用户可以创建数据 ;
在这里插入图片描述
设定如下 :表示 zxk 这个用户最多只能写入50M。

在这里插入图片描述
测试:

输入命令 su - zxk,切换用户;
输入命令 dd if=/dev/zero of=/pub/leefile bs=1M count=40 ,截取数据小于54M成功;
输入命令 dd if=/dev/zero of=/pub/leefile bs=1M count=52 ,截取失败,只能写入小于50M的数据。

在这里插入图片描述

  1. 永久开启配额
    以上设定只时临时设定,当再次开启系统时还是会回到之前的状态。
    输入命令 vim /etc/fstab 编辑配置文件;添加配额参数,此参数的添加,会在开机时自动开启配额,否则配额不会自动激活。如图所示:

在这里插入图片描述

永久关闭配额:

vim /etc/fstab , 去掉配额参数 usrquota;
然后将设备卸载就成功了;
此时再挂载上去,可以看到挂载信息中并没有开启配额。

在这里插入图片描述