zoukankan      html  css  js  c++  java
  • 存储结构与磁盘划分

    1.一切从“/”开始

    Linux系统中,一切文件都是从根(/)目录开始的,并按照文件系统层次化结构(FHS)采用树形结构存放文件,以及定义了常见目录的用途。

    Linux系统中的名称是严格区分大小写的,比如,root、Root、rOOt、rooT都是不同的目录,并且文件名称中不能有斜杠(/)。Linux系统的文件存储结构如下:

    Linux系统中常见的目录名称及相应内容:

    路径:分为绝对路径和相对路径。绝对路径是从根目录(/)开始写起的文件或目录名称,相对路径则是相对于当前路径的写法。

    2.物理设备的命令规则

    Linux系统中常见的硬件设备的文件名称如下:

    现在的IDE设备已经很少了,所以硬盘设备一般都是以“/dev/sd”开头的。一台主机可以有多个硬盘,采用a-p来代表16块不同的硬盘(默认从a开始分配),硬盘的分区编号:主分区和扩展分区编号从1开始,到4结束;逻辑分区编号从5开始。

    设备名称是由系统内核的识别顺序决定的,而非插槽顺序,只不过很多插槽顺序和系统内核的识别顺序相同。分区名称可以是顺延下来的,也可以是手动指定的,所以 sda3 只能表示编号为3的分区,不能表示设备上的第三个分区。

    /dev/sda5 这个设备文件名包含如下信息:硬件设备文件所在目录(dev),SCSI设备(sd,如果是hd、表示IDE设备),硬盘的顺序号(a,以字母表示),分区的顺序号(5,以数字表示),/dev/sda5 表示的含义就是:这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件。

    硬盘设备是由大量的扇区组成,每个扇区容量为512字节,第一个扇区很重要,存储主引导记录和分区表信息。就第一个扇区来讲,主引导记录需要占用446字节,分区表为64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。第一个扇区信息如下:

    第一个扇区最多只能创建出4个分区,于是为了解决分区个数不够的问题,可以将第一个扇区的分区表中16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用16字节分区表空间的指针—一个指向另外一个分区的指针。这样一来,用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于4个)的需求。硬盘分区规划如下:

    3.文件系统与数据资料

    用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,常见的文件系统如下:

    • Ext3:一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
    • Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
    • XFS:一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

    计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。VFS架构如下图,从中可见,实际文件系统在VFS下隐藏了自己的特性和细节,这样用户在日常使用时会觉得“文件系统都是一样的”,也就可以随意使用各种命令在任何文件系统中进行各种操作了。

    4.挂载硬件设备

    在拿到一块全新的硬盘存储设备后要先分区,然后格式化,最后才能挂载并正常使用。当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,这个关联动作就是“挂载”。

    4.1 mount命令

    用于挂载文件系统,格式:mount 文件系统 挂载目录。mount中可用参数及作用如下:

    • -a:挂载所有在/etc/fstab中定义的文件系统
    • -t:指定文件系统的类型

    挂载是在使用硬件设备前所执行的最后一步操作。只需使用mount命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了。对于比较新的Linux系统来讲,一般不需要使用-t参数来指定文件系统的类型,Linux系统会自动进行判断。而mount 中的-a参数则会在执行后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。如,把设备/dev/sdb2挂载到/backup目录,只需执行命令 mount /dev/sdb2 /backup 就可以了,但是这种挂载在重启电脑后就会失效,为了避免每次重启电脑都要手动挂载的麻烦,可以将挂载信息按如下格式写入到/etc/fstab文件中,格式:设备文件 挂载目录 格式类型 权限选项 自检 优先级。字段含义如下:

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

    若想把文件系统为ext4的硬件设备/dev/sdb2在开机后自动挂载到/backup目录上,并保持默认权限且无需开机自检,就需要在/etc/fstab文件的最后加入一行(通过vim操作):

    这样在系统重启后就会成功挂载。

    4.2 umount命令

    用于撤销挂载,格式为:umount [挂载点/设备文件],如 umount /dev/sdb2

    5.添加硬盘设备

    添加硬盘设备的操作思路:首先需要在虚拟机中模拟添加入一块新的硬盘存储设备,然后再进行分区、格式化、挂载等操作,最后通过检查系统的挂载状态并真实地使用硬盘来验证硬盘设备是否成功添加。

    5.1 fdisk命令

    管理磁盘分区的命令,格式:fdisk [磁盘名称]。它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(见下表)是交互式的,因此在管理硬盘设备时特别方便,可以根据需求动态调整。

    如上图,使用fdisk命令来尝试管理/dev/sdb2硬盘,看到提示信息后输入参数 p 来查看硬盘内已有的分区信息,包括硬盘容量、扇区个数等信息。

    同样也可以输入参数 n 尝试添加新的分区。系统会提示输入创建分区的参数,p 创建主分区,e 创建扩展分区。

    然后输入主分区编号(范围 1-4),接下来系统会提示定义起始的扇区位置,无需改动,敲击回车键保持默认设置,系统会自动计算出最靠前的空闲扇区的位置。最后,需要定义分区的结束扇区位置,这其实就是要去定位整个扇区的大小,输入 +2G 表示创建一个容量为2G的硬盘分区。

    最后通过 p 查看硬盘的分区信息,发现分区信息已经存在,然后敲击参数 w ,分区信息写入成功。

    上述步骤执行完毕之后,Linux系统会自动把这个硬盘主分区抽象成 /dev/sdb1 设备文件。可以使用file命令查看该文件的属性,有些时候系统并没有自动把分区信息同步到Linux内核,这时可以使用partprobe命令手动同步信息到内核,而且推荐执行两次。如果仍无法解决问题,重启系统。

    在对存储设备分区后还需要格式化操作,格式化的命令为mkfs。

    按两下Tab键即会出现若干命令文件,用起来很简单——mkfs.文件类型名。如:要格式化分区为XFS的文件系统,命令为 mkfs.xfs /dev/sdb1

    完成分区和格式化操作后,就是挂载并使用了。步骤:首先创建一个用于挂载设备的挂载点目录,然后使用mount命令将存储设备与挂载点关联,最后使用df -h 命令查看挂载状态和硬盘使用量信息。

    5.2 du命令

    顺利挂载后,就可以尝试通过挂载点目录向存储设备中写入文件了。du命令可以用于查看文件数据占用量,即一个或多个文件占了多大的硬盘空间,格式:du [选项] [文件]。du -sh /* 可以查看Linux系统根目录下所有一级目录分别占用的空间大小。

    为了使重启系统后挂载不失效,需把挂载信息写入配置文件中:

    末尾加上

    6.添加交换分区

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

    交换分区的划分建议:在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍。这里取出一个大小为5GB的主分区作为交换分区资源。在分区创建完毕后保存并退出。


    使用SWAP分区专用的格式化命令mkswap,对新建的主分区进行格式化操作:

    如果出现

    则使用partprobe命令运行两次即可

    然后即可使用mkswap命令

    使用swapon命令把准备好的SWAP分区设备正式挂载到系统中。可以使用free -m 命令查看交换分区的大小变化

    为了能让新的交换分区设备在重启系统后生效,仍然需要把相关信息写入配置文件并保存。

    7.磁盘容量配额

    Linux系统的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统。但是,硬件资源是固定且有限的,如果某些用户不断地在Linux系统上创建文件或者存放电影,硬盘空间总有一天会被占满。针对这种情况,root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota命令还有软限制和硬限制的功能。软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
    RHEL 7系统中已经安装了quota磁盘容量配额服务程序包,但存储设备却默认没有开启对quota的支持,此时需要手动编辑配置文件,让RHEL 7系统中的/boot目录能够支持quota磁盘配额技术。


    在重启系统后使用mount命令查看,即可发现/boot目录已经支持quota磁盘配额技术了:

    7.1 xfs_quota命令

    该命令是一个专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令,格式:quota [参数] 配额 文件系统。-c参数用于以参数的形式设置要执行的命令;-x参数是专家模式,能够对quota服务进行更多复杂的配置。接下来使用xfs_quota命令来设置用户tom对/boot目录的quota磁盘容量配额。具体的限额控制包括:硬盘使用量的软限制和硬限制分别为3MB和6MB;创建文件数量的软限制和硬限制分别为3个和6个。

    首先创建用户tom,并针对/boot目录增加其他人的写权限,保证用户能够正常写入数据:

    然后使用xfs_quota命令进行配置

    配置完成后,切换到普通用户tom,创建5MB文件成功、创建8MB文件失败:

    7.2 edquota命令

    用于编辑用户的quota配额限制,格式为:edquota [参数] [用户]。在为用户设置了quota磁盘容量配额限制后,可以使用edquota命令按需修改限额的数值。-u 参数表示要针对哪个用户设置,-g 参数表示要针对哪个用户组设置。edquota命令会调用Vi或Vim编辑器来让root管理员修改要限制的具体细节。

    这里是把上文tom硬盘的硬限额从6MB修改为8MB。

    8.软硬方式链接

    在Linux系统中存在硬链接和软链接两种文件。

    硬链接(hard link):可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此,即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。

    软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。

    ln命令

    用于创建链接文件,格式:ln [选项] 目标,可用参数及作用如下:

    接下来创建一个软链接:

    可以看到,当原始文件删除后,软链接的文件也无法读取了。

    创建一个硬链接:

    可以看到,原始文件的硬盘链接数增加到了2,当原始文件删除后,硬链接仍可以读取。

  • 相关阅读:
    依赖注入与控制反转
    Java NIO(三)
    Java NIO(二)
    Java NIO(一)
    Jetty 的基本架构
    spring IOC
    java代理
    spring AOP
    linux 添加用户并授权可以操作文件夹
    Centos6.5 yum 安装jdk1.8
  • 原文地址:https://www.cnblogs.com/achangblog/p/8433302.html
Copyright © 2011-2022 走看看