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) 32 | 64byte | 主分区4个, 所有分区16个 | 2.2TB |
UEFI | (GPT) 64 | 128byte | 理论上无限制, windows 128 | 8ZiB |
-
MBR 分区方式:
-
主分区
主分区表记录分区的信息并可以直接使用的分区 -
扩展分区
主分区表记录的分区,不可以直接使用,只是逻辑分区容器 -
逻辑分区
扩展分区之上划分的分区叫做逻辑分区 -
分区方法
- 交互模式分区方法
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 删除新建的分区;当删除设备时,一定确保设备在系统中未被使用,否则系统很有可能崩溃。按照提示依次删除需要删除的设备即可。
- 非交互模式设定分区方式:
命令 | 含义 |
---|---|
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;即可删除第二块分区。
- 常用文件系统对比
文件系统 | FAT16 | FAT32 | NTFS | NTFS | EXT3 | EXT4 | XFS |
---|---|---|---|---|---|---|---|
最大卷 | 2GB | 4GB | 256TB | 32TB | 1EB | 16EB | |
最大单个文件 | 4GB | 8TB | 16TB | 2TB | 16TB | 8EB | |
最大文件个数 | 65536 | 4177920 | 4294967295 | 32000个子目录 | 无限子目录 | ||
代表系统 | DOS | Win95 | Win98 | Win2000以后 | RHEL5 | RHEL6 | HEL7~ |
mkfs.xfs -K /dev/sdb1 ## 格式化设备为xfs 文件系统(相当于在/dev/sdb1 上安装设备管理软件); -K 不丢弃空数据块。
在对设备分区之后,可以将分区设备进行挂载;当再输入 mount /dev/vdb1 /mnt/ 将分区挂载到 /mnt/ 上时,会提示无法识别文件系统,不知道是什么类型的;
此时需要输入命令来对文件系统格式化,如输入 mkfs.xfs /dev/vdb1 ,表示将文件系统格式化成 xfs 格式;如果格式化硬盘时,上面有文件,那么就需要加参数 -f ;
在格式化好文件系统之后,便可将其挂载;
- 永久挂载
在完成上述格式化之后,便可将其挂载,但是此种挂载方式为临时挂载,当重启系统之后,挂载便不再存在。
mount /dev/sdb1 /mnt/westos ,mount 命令在挂载为临时挂载;
如果需要永久挂载需要编写 /etc/fstab 配置文件。
输入命令 vim /etc/fstab ,编写内容如下所示,表示将文件系统格式为 xfs 的设备 /dev/vdb1 以默认的方式挂载到 /mnt/上,无备份不检测。
注:此文件千万不能编写错误,编写错误之后,系统就起不来。
在编写完成之后,文件并不会立即生效,此时可以输入命令 mount -a 使其立即生效。
- 设备删除
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 分区
- 删除配置文件的内容;
- 输入命令 swapoff /dev/vdb1 关闭 swap 分区;
- 删除 swap 分区;
完成以上设定之后, swap 分区就被彻底的删除成功。
7. 磁盘配额
以上挂载设备之后,所设定主机的用户对挂载的设备有使用权限,但是如果不做设定,当好几个用户同时使用一个设备时,很可能一个用户便将此设备占满,这种是不合理的设置,需要做磁盘配额的设定。
作用:
设定用户能写入指定设备的最大额度
设定方法:
- 临时设定配额
输入命令 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的数据。
- 永久开启配额
以上设定只时临时设定,当再次开启系统时还是会回到之前的状态。
输入命令 vim /etc/fstab 编辑配置文件;添加配额参数,此参数的添加,会在开机时自动开启配额,否则配额不会自动激活。如图所示:
永久关闭配额:
vim /etc/fstab , 去掉配额参数 usrquota;
然后将设备卸载就成功了;
此时再挂载上去,可以看到挂载信息中并没有开启配额。