• Linux学习基础篇(磁盘管理、文件系统选择及NFS)


    1、磁盘管理

    1.1、MBR与GPT

    MBR(Master Boot Record):磁盘主引导记录。由三部分组成,主引导程序(boot loader),446字节;分区表项(Disk Partition Table,DPT),负责说明磁盘上的分区情况,64字节;结束标志(Magic Number),2字节,固定为55AA。。

    GPT(GUID Partition Table):全局唯一标识分区列表,是一个物理硬盘的分区结构。它用来替代BIOS中的主引导记录分区表(MBR)。

    MBR由传统的BIOS支出,而GPT则由UEFI支持。

    MBR由于分区表只有64字节大小,所以只能有四个表项,表现为硬盘只能有4个主分区,如果需要超过4个分区,则必须使用3个主分区加一个扩展分区,在扩展分区中使用逻辑分区;几乎所有的操作系统都支持MBR;MBR支持32位和64位操作系统;MBR无法识别大于2T的分区,也无法支持大于2T的硬盘

    GPT没有4个主分区的限制,对分区的数量无限制;GPT可管理最大18EB的硬盘;要使用GPT作为启动盘,需要UEFI主板和操作系统的支持;GPT只支持64位操作系统。

    UEFI的目标是取代传统BIOS,它不支持MBR,仅支持GPT。不过,近年出现的UEFI主板,采用UEFI+BIOS共存模式,并且BIOS中集成UEFI启动项。

    1.2、使用fdisk工具对磁盘进行分区

    fdisk是Linux下一款功能强大的磁盘分区管理工具,可以查看磁盘的使用情况,也可以对磁盘进行分区。fdisk仅支持MBR,不支持GPT,若要对GPT进行分区需要使用parted工具。

    fdisk分为两个部分,查询模式和交互模式。使用命令fdisk –l可查看分区状况,使用命令fdisk 磁盘设备可进入交互操作模式。

    交互操作模式下的常用命令如下:

    • d:删除一个分区
    • l :查看支持的磁盘分区类型
    • m:显示fdisk每个交互命令的详细含义
    • n:增加一个新的分区
    • p:显示分区信息
    • q:不保存退出
    • t:改变分区类型
    • w:保存退出

    注意:在使用fdisk工具完成分区后,需要使用mkfs.命令将分区格式化之后才可以挂载使用,mkfs.命令语法如下:

    mkfs.文件系统类型 分区

    例如,将/dev/sdb1分区格式化成xfs类型,可以使用以下命令:

    [root@localhost ~]# mkfs.xfs /dev/sdb1
    一个例子:添加一个15GB的硬盘,并将该硬盘分成一个10GB和一个5GB的分区。

    在未添加硬盘前使用fdisk –l查看分区信息:

    1

    添加一个15GB的硬盘后使用fdisk –l查看分区信息(新添加的磁盘见红框处):

    2

    使用fdisk /dev/sdb命令进入交互模式:

    3

    先输入p查看该磁盘的分区信息:

    4

    从返回的信息可以看到该磁盘尚未分区,此时先输入n创建一个10GB大小的分区:

    5

    fdisk工具提示创建主分区或者是扩展分区,这里会显示已经创建了几个主分区及扩展分区,输入p创建一个主分区:

    6

    提示输入分区号,fdisk工具会显示可以使用的分区号,这里我们输入1:

    7

    提示输入起始扇区,这里从头开始,即输入2048:

    8

    提示输入结束扇区,fdisk工具给出提示这里可以接受的参数,我们要划分的分区大小为10GB,这里可以输入+10G:

    9

    显示我们创建的分区信息,此时使用p查看该磁盘的分区信息:

    10

    此时已经可以看到我们划分的10GB的分区了,重复上面的动作继续划分一个大小为5GB的分区,然后使用p查看该磁盘的分区信息:

    11

    完成分区后,使用w保存退出fdisk工具:

    12

    此时使用fdisk –l命令查看磁盘信息(红框处):

    13

    分区完成后,我们使用mkfs命令将/dev/sdb1格式化成xfs类型,/dev/sdb2格式化成ext4类型,然后使用mount命令将/dev/sdb1挂载到/data1、/dev/sdb2挂载到/data2,挂载完成后使用df -Th命令查看分区挂载信息(注意红框处信息):

    14

    至此,分区结束。

    1.3、使用parted工具对磁盘进行分区

    由于fdisk工具只支持MBR,不支持GPT,所以fdisk只能对不大于2TB的硬盘进行分区,大于2TB的硬盘或者GPT的硬盘就需要使用parted工具进行分区。

    parted工具也分为查询模式和交互模式,使用parted –l查看磁盘及分区信息,使用parted 磁盘设备可以进入交互模式,常用的交互命令如下:

    • mklabel:创建分区表,设置磁盘使用MBR(parted下表示为msdos)或GPT。例如:mklable gpt
    • mkpart:创建新分区,命令格式为mkpart 分区类型 [文件系统类型] 起始位置 结束位置。其中,分区类型主要有primary(主分区)、extended(扩展分区)、logical(逻辑分区);文件系统类型有FAT32、ext3、ext4等
    • print:输出分区信息,可简写为p。该命令有三个选项,选项free显示该磁盘的所以信息,并显示磁盘剩余空间;number显示指定分区的信息,如print 1;all或list显示所以磁盘信息
    • rm:删除分区
    • select:选择硬盘。输入parted命令进入交互模式时,默认使用的是第一块硬盘,如果需要使用其他硬盘可使用该命令进行切换。
    • quit:退出parted(parted会自动保存对硬盘的修改)

    一个例子:使用parted工具对新添加的一块15GB硬盘进行分区,使用GPT格式,并划分一个10GB大小和一个5GB大小的分区。

    使用parted -l查看磁盘及分区信息(注意红框处):

    1

    使用parted /dev/sdb命令进入交互模式:

    2

    该磁盘使用GPT,输入命令mklabel gpt:

    3

    parted工具的警告,提示改变该磁盘的格式会使数据全部丢失,是否继续,这里输入yes,之后输入print查看该磁盘的信息(注意红框处):

    4

    磁盘已经改变成为GPT格式,接下去输入mkpart primary 0G 10G(这里不指定文件系统类型,等分区完成后使用mkfs命令格式化):

    5

    输入命令print查看分区情况:

    6

    此时可以看到10GB的分区已经创建完毕,接下去重复上面的动作创建一个5GB的分区,创建完成后使用命令print查看分区信息:

    7

    两个分区已经创建,接下去使用mkfs格式化后使用mount挂载即可使用。

    1.4、LVM逻辑卷管理

    LVM,Logical Volume Manage,逻辑卷管理。是Linux下对磁盘分区进行管理的一种机制,LVM是建立在磁盘分区和文件系统之间的一个逻辑层,管理员利用LVM可以在磁盘不用重新分区的情况下动态调整分区大小。如果系统新增了一块硬盘,通过LVM即可将新增的硬盘空间直接扩展到原来的磁盘分区上。

    LVM有以下几个概念:

    • 物理存储设备(physical media):存储设备文件,如/dev/sda等
    • PV(physical volume):物理卷
    • VG(Volume Group):卷组
    • LV(logical volume):逻辑卷
    • PE(physical extent):PV中可以分配的最小存储单元
    • LE(logical extent):LV中可以分配的最小存储单元

    它们之间的关系如下图所示:

    图片1

    要使用LVM,系统中需要安装以下软件包:

    lvm2
    lvm2-libs
    e2fsprogs
    e2fsprogs-libs
    xfsprogs

    创建LVM:

    1. 对磁盘进行分区
    2. 创建物理卷:使用命令pvcreate 分区将指定的分区创建成PV,使用命令pvdisplay可以查看PV的信息
    3. 创建卷组:使用命令vgcreate 卷组名称 PV分区将指定的PV创建加入卷组,使用命令vgdisplay可以查看卷组信息
    4. 激活卷组:使用命令vgchange –a y 卷组名激活指定的卷组
    5. 创建逻辑卷:使用命令lvcreate –L 容量大小|-l PE数量 –n 逻辑卷名称 卷组创建逻辑卷,使用命令lvdisplay可以查看逻辑卷信息
    6. 使用命令mkfs.文件系统类型 /dev/卷组/逻辑卷格式化逻辑卷
    7. 使用mount挂载逻辑卷

    卷组的扩展:

    使用命令vgextend 卷组名 PV分区扩展卷组

    逻辑卷的扩展:

    使用命令lvextend –l +PE数量|-L +容量大小 逻辑卷路径扩展逻辑卷

    删除LVM:

    1. 卸载逻辑卷对应的分区
    2. 删除逻辑卷:使用命令lvremove 逻辑卷路径删除逻辑卷
    3. 删除卷组:使用命令vgremove 卷组删除卷组
    4. 删除物理卷:使用命令pvremove PV分区删除物理卷

    额外的:

    使用命令xfs_growfs 挂载点可以在线扩展xfs分区;使用命令resize2fs 设备名可以在线扩展ext4分区。

    一个创建LVM的例子:添加两块15GB大小的硬盘,一块划分成10GB大小和5GB大小的两个分区,另一块划分成10GB大小的一个分区,将这三个分区创建成PV,并加入到名为VG1的卷组中,VG1卷组中分别创建大小为15GB和9GB的LV,15GB大小的LV挂载到/data1,9GB大小的LV挂载到/data2

    使用fdisk工具对两块硬盘进行分区,分区后的结果如下:

    1

    使用pvcreate将/dev/sdb1、/dev/sdb2和/dev/sdc1创建成PV:

    2

    通过pvdisplay命令可以看到新创建的三个PV:

    3

    使用vgcreate命令创建卷组VG1,并将刚才创建的三个PV加入该卷组:

    4

    使用vgdisplay命令查看刚创建的VG1:

    5

    使用命令vgchange激活VG1:

    6

    在卷组中分别创建大小为15GB和9GB的两个LV:

    78

    格式化这两个LV:

    9

    使用mount挂载这两个LV,然后使用df –Th命令查看挂载后的结果:

    10

    可以看到两个LV已经挂载完成,至此LVM的创建已完成。

    扩展卷组及逻辑卷的一个例子:将/dev/sdc剩下的5GB空间分区,并将其加入卷组VG1,逻辑卷LV2扩展5GB的空间

    使用vgdisplay命令查看VG1的信息:

    11

    注意Free PE栏的信息,该栏为VG1的剩余空间。使用vgextend命令将/dev/sdc2加入到卷组VG1中:

    12

    使用vgdisplay命令查看扩展后的VG1信息,注意Free PE栏:

    13

    使用lvdisplay命令查看逻辑卷LV2的信息,注意LV Size栏的信息:

    14

    使用lvextend命令为逻辑卷LV2扩展5GB大小的空间:

    15

    使用lvdisplay命令查看逻辑卷LV2的信息,此时LV Size的值已经扩大了:

    16

    至此,扩展卷组和逻辑卷完成。

    2、生产环境文件系统选择

    Linux下常见的的文件系统有DOS文件系统msdos,Windows下的FAT和NTFS,光盘文件系统ISO-9660,单一文件系统ext2和日志文件系统ext3、ext4、xfs,集群文件系统gfs(Red Hat Global File System)、ocfs2(oracle cluster File System)、虚拟文件系统(如 /proc),网络文件系统(NFS)。

    对于读操作频繁,同时小文件众多的环境,使用ext4文件系统是个不错的选择。由于ext3的目录结构是线型的,因此当一个目录下文件的数量较多时,ext3的性能下降比较厉害,而ext4的延迟分配、多块分配和盘区功能使ext4适合对大量小文件的操作。大量实践证明,如果生产环境需要对文件进行大量的创建和删除操作的话,ext4是更高效的文件系统,接下来依次是xfs、ext3。例如网站应用,邮件系统等,都可使用ext4文件系统来达到最优性能。

    对于写操作频繁的环境,如果是一些大数据文件操作,同时应用本身需要大量的写日志操作,那么xfs是最佳的选择。根据实际应用经验,对xfs、ext4、ext3块写入性能对比,整体上性能差不多,但在效率上(CPU利用率)最好的是xfs,接下来依次是ext4和ext3。

    对性能要求不高、数据安全要求不高的环境,ext3/ext2文件系统是比较好的选择,因为ext2没有日志记录功能,这样就节省了很多磁盘性能。例如linux系统下的/tmp分区就可以采用ext2文件系统。

    3、网络文件系统NFS

    3.1、什么是NFS

    NFS,Network File System,网络文件系统。它允许网络上的不同操作系统通过TCP/IP网络共享数据。使用NFS,首先在服务端共享出文件或目录,然后客户端将共享的文件或目录挂载到本地,这样在客户端上就可以很方便的使用服务端提供的文件,实现数据共享。

    3.2、NFS服务端配置

    NFS服务端的运行需要以下的软件包支持:

    rpcbind
    nfs-utils

    确定安装好需要的软件包后,需要启动rpc服务和NFS服务,使用以下命令启动这两个服务:

    systemctl start rpcbind
    systemctl start nfs

    可以使用以下命令查看所需的服务的运行状况:

    systemctl status rpcbind
    systemctl status nfs

    /etc/exports文件为NFS服务端的配置文件,文件默认为空,该文件的格式为:

    共享路径 客户端地址(选项)
    • 共享路径:服务端上共享出来以供客户端使用的目录
    • 客户端地址:允许访问服务端资源的客户端,可以是IP地址、主机名或域名,支持匹配
    • 选项:ro,read only,客户端对共享资源只有读的权限;rw,read write,客户端对共享资源有读写权限;no_root_squash,信任客户端root用户,即如果登录的客户端用户为root,那么此用户拥有共享资源的最高权限;root_squash,不信任客户端root用户,即如果登录的客户端用户为root,那么该用户将被映射成nfsnobody,对于共享资源只有只读权限;all_squash,不管客户端登录的是什么用户,都将被映射成nfsnobody;no_all_squash,默认值,只有当客户端用户的UID和GID与服务端共享文件的UID和GID相同时,才对该文件有读写权限;sync,默认值,资料同步写入磁盘;async,资料暂时存放在内存,不写入磁盘

    一个例子:服务端共享/mnt目录,允许客户端192.168.0.23登录并将登录的所有用户映射成nfsnobody,客户端对该目录只有只读的权限

    在/etc/exports中做如下配置:

    /mnt 192.168.0.23(ro,all_squash)

    在完成/etc/exports文件的配置后,使用以下命令可以使配置立即生效:

    exportfs [选项]

    常用选项:

    • -r:重新挂载/etc/exports中定义的共享目录
    • -v:在屏幕上输出详细信息

    3.3、NFS客户端配置

    客户端需要安装的软件包即运行的服务与服务端相同。

    使用以下命令挂载NFS服务端共享的目录:

    mount -t nfs NFS服务端:目录 本地目录

    例如:在NFS服务端192.168.0.22上共享/mnt目录,客户端需将其挂载在本机的/nfs目录下,使用命令如下

    mount -t nfs 192.168.0.22:/mnt /nfs

    使用以下命令可以查看NFS服务端上的共享目录:

    showmount -e NFS服务端

    4、反删除工具extundelete

    4.1、简介及恢复原理

    由于Linux没有类似Windows中回收站的功能,所以一旦误删除文件就只能通过数据恢复工具来找回。在Linux下有很多开源的数据恢复工具,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,但是ext3grep仅支持ext3的恢复,且恢复速度较慢,extundelete支持ext3/ext4,恢复速度更快,功能更加强大。

    extundelete的恢复原理如下:

    首先通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。

    4.2、extundelete的使用

    访问extundelete官网:http://extundelete.sourceforge.net/下载extundelete的源码包,通过源码编译安装extundelete。注意:extundelete的编译安装需要依赖包e2fsprogs、e2fsprogs-devel,请先确保已安装这两个包。

    extundelete的常用选项:

    • --restore-inode :恢复指定节点的文件,恢复的文件会自动放在软件运行目录下的RESTORED_FILES文件夹中,使用节点编号作为参数
    • --restore-file:恢复指定目录的文件,恢复的文件会自动放在软件运行目录下的RESTORED_FILES文件夹中,使用目录作为参数
    • --restore-all:恢复所有的目录和文件
  • 相关阅读:
    多进程交替控制输出
    最长不重复子串
    const关键字的使用
    C++类的内存分布
    shell编程--awk 、sed 命令介绍
    gcc 6.0编译opencv出错
    NTP同步网络时间
    树莓派配置RTC时钟(DS3231,I2C接口)
    浏览器播放rtmp流
    nginx配置hls
  • 原文地址:https://www.cnblogs.com/yu2006070/p/9313680.html
Copyright © 2020-2023  润新知