Linux学习--09

一、存储结构与管理硬盘

1、文件系统与数据资料

常见文件系统格式:Ext2、Ext3、Ext4、XFS

添加新的硬盘存储设备,需要执行的操作:

1、分区;2、格式化;3、挂载

Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:

该文件的访问权限(read、write、execute);

该文件的所有者与所属组(owner、group);

该文件的大小(size);

该文件的创建或内容修改时间(Ctime);

该文件的最后一次访问时间(Atime);

该文件的修改时间(Mtime);

文件的特殊权限(SUID、SGID、SBIT);

该文件的真实数据地址(point)。

而文件的实际内容则保存在block块中(大小一般是1KB、2KB或4KB),一个inode的默认大小仅为128字节,记录一个block则消耗4字节。当文件的inode被写满后,Linux系统会自动分配出一个block,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的block块,有下面两种常见的情况(以4KB大小的block为例进行说明)。

情况1:文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。

情况2:文件很大(5KB),那么会占用两个block(5KB−4KB后剩下的1KB也要占用一个block)。

计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个虚拟文件系统(Virtual File System,VFS)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。

第6章 存储结构与管理硬盘第6章 存储结构与管理硬盘

2、挂载硬件设备

1、mount命令:用于挂载文件系统,格式为“mount文件系统 挂载目录”。

2、umount命令:用于卸载设备或文件系统,语法格式为“umount [设备文件/挂载目录]”。

                                mount命令中的参数以及作用

参数作用
-a挂载所有在/etc/fstab中定义的文件系统
-t指定文件系统的类型

挂载是在使用硬件设备前所执行的最后一步操作。只需使用mount命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了。对于比较新的Linux系统来讲,一般不需要使用-t参数来指定文件系统的类型,Linux系统会自动进行判断。而mount中的-a参数则会在执行后自动检查/etc/fstab文件中有无被疏漏挂载的设备文件,如果有,则进行自动挂载操作。

例:要把设备/dev/sdb2挂载到/backup目录,只需要在mount命令中填写设备与挂载目录参数就行,系统会自动判断要挂载文件的类型,命令如下:

[root@localhost ~]# mount /dev/sdb2 /backup

注:如果在工作中要挂载一块网络存储设备,该设备的名字可能会变来变去,这样再写为sdb就不太合适了。这时推荐用UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作。UUID是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备。

3、blkid命令:用于显示设备的属性信息,语法格式为“blkid [设备名]”。

例:使用blkid命令来查询设备UUID的示例如下:

[root@localhost ~]# blkid
/dev/sdb1: UUID="2db66eb4-d9c1-4522-8fab-ac074cd3ea0b" TYPE="xfs" PARTUUID="eb23857a-01"
/dev/sdb2: UUID="478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG" TYPE="ext4" PARTUUID="eb23857a-02"

有了设备的UUID值之后,就可以用它挂载网络设备了:

[root@localhost ~]# mount UUID=478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG /backup

注:上述方法执行mount命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说需要每次开机后都手动挂载一下。这肯定不是我们想要的效果,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“ 设备文件 挂载目录 格式类型 权限选项 是否备份 是否校验 ”写入到/etc/fstab文件中。

用于挂载信息的指定填写格式中,各字段所表示的意义:

字段意义
设备文件一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
挂载目录指定要挂载到的目录,需在挂载前创建好
格式类型指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份若为1则开机后使用dump进行磁盘备份,为0则不备份
是否校验若为1则开机后自动进行磁盘校验,为0则不校验

写入到/etc/fstab文件中的设备信息并不会立即生效,需要使用mount -a参数进行自动挂载:

[root@localhost ~]# mount -a

4、df命令:用于查看已挂载的磁盘空间使用情况,语法格式为“df -h”。

如果系统中硬盘特别多,分区特别多,我们都不知道它们是否有被使用,又或者是做了些什么。此时,就可以用lsblk命令以树状图的形式列举一下了。

5、lsblk命令:用于查看已挂载的磁盘的空间使用情况,输入该命令后按回车键执行即可。

3、添加硬盘设备

首先把虚拟机系统关机,稍等几分钟会自动返回到虚拟机管理主界面,然后单击“编辑虚拟机设置”选项,在弹出的界面中单击“添加”按钮,新增一块硬件设备。

选择SCSI格式

 

6、fdisk命令:用于新建、修改及删除磁盘的分区表信息,语法格式为“fdisk磁盘名称”。

在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(详见下表)是交互式的一问一答的形式,因此在管理硬盘设备时特别方便,可以根据需求动态调整。

                                              fdisk命令中的参数以及作用

参数作用
m查看全部可用的参数
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区表信息
w保存并退出
q不保存直接退出

例:

下面实操分区、格式化、挂载

1、分区:

使用fdisk命令来尝试管理/dev/sdb硬盘设备。在看到提示信息后输入参数p来查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息:

m参数:查看全部可用的参数

(1)输入n参数:添加新的分区,系统会要求用户是选择继续输入参数p来创建主分区,还是输入参数e来创建扩展分区。这里输入参数p来创建一个主分区:

(2)在确认创建一个主分区后,系统要求用户先输入主分区的编号。

(3)分区的编号范围是1~4,因此这里直接回车默认就可以了。

(4)接下来系统会提示定义起始的扇区位置,这不需要改动,敲击回车键保留默认设置即可,系统会自动计算出最靠前的空闲扇区的位置。

(5)最后,系统会要求定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不用去计算扇区的个数,只需要输入+2G即可创建出一个容量为2GB的硬盘分区。


(6)再次使用参数p来查看硬盘设备中的分区信息,就能看到一个名称为/dev/sdb1、起始扇区位置为2048、结束扇区位置为4196351的主分区了。 

 (7)最后,输入参数w后按回车键,这样分区信息才是真正地写入成功。

保存并退出。

注:在上述步骤执行完毕之后,Linux系统会自动把这个硬盘主分区抽象成/dev/sdb1设备文件。可以使用file命令查看该文件的属性。但有些时候系统并没有自动把分区信息同步给Linux内核,这时可以输入partprobe命令手动将分区信息同步到内核,而且一般推荐连续两次执行该命令,效果会更好。当然,也可以使用“重启大法”~

[root@localhost~]# file /dev/sdb1
/dev/sdb1: cannot open `/dev/sdb1' (No such file or directory)
[root@localhost~]# partprobe
[root@localhost~]# partprobe
[root@localhost~]# file /dev/sdb1
/dev/sdb1: block special

2、格式化

 如果硬件存储设备没有进行格式化,则Linux系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。

mkfs命令:用于格式化操作。在Shell终端中输入mkfs名后再敲击两下Tab键,会有如下所示的效果:mkfs命令将常用的文件系统名称用后缀的方式保存成了多个命令文件。

例如要将分区为XFS的文件系统进行格式化,则命令应为mkfs.xfs /dev/sdb1。

 3、挂载

终于完成了存储设备的分区和格式化操作,接下来就是要来挂载并使用存储设备了。

(1)首先是创建一个用于挂载设备的挂载点目录;然后使用mount命令将存储设备与挂载点进行关联;最后使用df -h命令来查看挂载状态和硬盘使用量信息。

du命令:用查看分区或目录所占用的磁盘容量大小,语法格式为“du -sh目录名称”。

既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,可以先查看文件数据占用量。

在使用Window系统时,我们总会遇到“C盘容量不足,清理垃圾后又很快被占满”的情况。

可以使用du -sh /*命令来查看在Linux系统根目录下所有一级目录分别占用的空间大小:

前面在讲解mount命令时提到,使用mount命令挂载的设备文件会在系统下一次重启的时候失效。如果想让这个设备文件的挂载永久有效,则需要把挂载的信息写入配置文件中:

编辑文件/etc/fstab

然后重启大法:

重启后可以看到/dev/sdb1

4、添加交换分区

       交换(SWAP)分区是一种通过在硬盘中预先划分一定的空间,然后把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。通俗来讲就是让硬盘帮内存分担压力。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。

       交换分区的创建过程与前文讲到的挂载并使用存储设备的过程非常相似。在对/dev/sdb存储设备进行分区操作前,有必要先说一下交换分区的划分建议:在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍。

例:

(1)首先输入参数n,添加新的分区;

(2)输入参数e,创建拓展分区;

(3)然后继续使用参数n创建逻辑分区,此逻辑分区编号5,分配2GB空间;

(4)使用p参数,查看分区情况;

(5)最后w参数,保存并退出。

下面来看一下两个与交换分区相关的简单命令。

1、mkswap命令:用于对新设备进行交换分区格式化,语法格式为“mkswap设备名称”。

2、swapon命令:用于激活新的交换分区设备,语法格式为“swapon设备名称”。

使用swapon命令把准备好的SWAP硬盘设备正式挂载到系统中。可以使用free -m命令查看交换分区的大小变化,从原来的2GB增加了2GB,变为4GB的交换分区。

/devsdb5 swap swap defaults 0 0

重启看效果,是否永久生效,增加了2GB的交换分区:

若要卸载交换分区,则使用swapoff命令。先用swapoff再编辑/etc/fstab,删除配置。

5、磁盘容量配额

       Linux系统的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统。但是,硬件资源是固定且有限的,如果某些用户不断地在Linux系统上创建文件或者存放电影,硬盘空间总有一天会被占满。针对这种情况,root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。

        可以使用quota技术进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota技术还有软限制和硬限制的功能。

软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。

硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

RHEL 8系统中已经安装了quota磁盘容量配额服务程序包,但存储设备却默认没有开启对quota技术的支持,此时需要手动编辑配置文件并重启一次系统,让系统中的启动目录(/boot)能够支持quota磁盘配额技术。

先编辑配置文件,然后重启:

此时已经添加quota:

xfs_quota命令:用于管理设备的磁盘容量配额,语法格式为“xfs_quota [参数] 配额 文件系统”。

-c参数用于以参数的形式设置要执行的命令;

-x参数是专家模式,让运维人员能够对quota服务进行更多复杂的配置。

在Linux系统中每个文件都会使用一个独立的inode信息块来保存属性信息,一个文件对应一个inode信息块,所以isoft和ihard就是通过限制系统最大使用的inode个数来限制了文件数量。bsoft和bhard则是代表文件所占用的block大小,也就是文件占用的最大容量的总统计。

soft是软限制,超过该限制后也只是将操作记录写到日志中,不对用户行为进行限制。而hard是硬限制,一旦超过系统就会马上禁止,用户再也不能创建或新占任何的硬盘容量。

例:先将/boot目录加上777权限,使其他用户具有写入权限。

输入命令:

xfs_quota -x -c 'limit isoft=3 ihard=6 bsoft=3M bhard=6M rhel8' /boot

使用户rhel8对/boot目录的操作具有限制,首先对创建文件个数(i--inode)进行限制,软限制和硬限制分别为3个和6个;再对硬盘使用量(b--block)的软限制和硬限制分别为3MB和6MB。

当配置好上述各种软硬限制后,尝试切换到一个普通用户,然后分别尝试创建7个文件、5M的文件、7MB的文件。可以发现,在创建7MB的文件时受到了系统限制:

edquota命令:用于管理系统的磁盘配额,语法格式为“edquota [参数] 用户名”。

在为用户设置了quota磁盘容量配额限制后,可以使用edquota命令按需修改限额的数值。

其中,-u参数表示要针对哪个用户进行设置;-g参数表示要针对哪个用户组进行设置。

                                             edquota命令中可用的参数以及作用

参数作用
-u对某个用户进行设置
-g对某个用户组进行设置
-p复制原有的规则到新的用户/组
-t限制宽限期限

edquota命令会调用Vi或Vim编辑器来让root管理员修改要限制的具体细节,记得用wq保存退出。

例:修改用户rhel8的硬盘限额从6M至60M

修改6144->61440:

查看效果,创建超过60M的文件时,会提示。

6、VDO虚拟数据优化

        VDO(Virtual Data Optimize,虚拟数据优化)是一种通过压缩或删除存储设备上的数据来优化存储空间的技术。

        VDO技术的关键就是对硬盘内原有的数据进行删重操作,它有点类似于我们平时使用的网盘服务,在第一次正常上传文件时速度特别慢,在第二次上传相同的文件时仅作为一个数据指针,几乎可以达到“秒传”的效果,无须再多占用一份空间,也不用再漫长等待。除了删重操作,VDO技术还可以对日志和数据库进行自动压缩,进一步减少存储浪费的情况。

VDO技术支持本地存储和远程存储,可以作为本地文件系统、iSCSI或Ceph存储下的附加存储层使用。简而言之,VDO技术能省空间!

有两种特殊情况需要提前讲一下。其一,公司服务器上已有的dm-crypt之类的技术是可以与VDO技术兼容的,但记得要先对卷进行加密再使用VDO。因为加密会使重复的数据变得有所不同,因此删重操作无法实现。要始终记得把加密层放到VDO之下,如图6-14所示。

第6章 存储结构与管理硬盘第6章 存储结构与管理硬盘

                                                                 VDO技术拓扑图

其二,VDO技术不可叠加使用,1TB的物理存储提升成10TB的逻辑存储没问题,但是再用10TB翻成100TB就不行了。左脚踩右脚,真的没法飞起来。

(1)RHEL/CentOS 8系统中默认已经启用了VDO技术。如果没有安装VDO的话,使用dnf命令:

[root@localhost ~]# dnf install kmod-kvdo vdo

(2)然后新添加一块硬盘用于创建vdo卷。

新添加进来的物理设备就是使用vdo命令来管理的,其中name参数代表新的设备卷的名称;device参数代表由哪块磁盘进行制作;vdoLogicalSize参数代表制作后的设备大小。依据红帽公司推荐的原则,20GB硬盘将翻成200GB的逻辑存储:

注:如果上述命令无法记忆,可以使用man命令结合grep命令搜索Logical,命令格式就在最后。

(3)在创建成功后,使用status参数查看新建卷的概述信息:

[root@localhost ~]# vdo status --name=storage

(4)接下来,对新建卷进行格式化操作并挂载使用。

新建的VDO卷设备会被存放在/dev/mapper目录下,并以设备名称命名,对它操作就行。另外,挂载前可以用udevadm settle命令对设备进行一次刷新操作,避免刚才的配置没有生效:

(5)最后,将设备设置成永久挂载生效,一直提供服务。

VDO设备卷在创建后会一直存在,但需要手动编辑/etc/fstab文件后才能在下一次重启后自动挂载生效。

 

(6)如果想查看设备的实际使用情况,使用vdostats命令即可。human-readable参数的作用是将存储容量自动进位,以人们更易读的方式输出(比如,显示20G而不是20971520K):

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值