您的位置:首页 > 其它

存储结构与磁盘划分

2020-03-01 21:25 141 查看

 

  • 一切从“/”开始(系统目录结构)
  • 物理设备的命名规则
  • 文件系统与数据资料
  • 挂载硬件设备
  • 添加硬盘设备
  • 添加交换分区
  • 磁盘容量配额
  • 软硬方式链接

 

 

 

 

 

系统目录结构

 

FHS ( Filesystem Hierarchy Standard)文件系统层次化标准  

 一切从 / 开始

在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件

/  全局总根

/root      特权用户的家目录

/home   普通用户的家目录,下隶属多个用户

/bin       可执行的命令文件

/sbin     开机时所需要的系统级命令(root权限才有权限执行)

/boot    系统启动文件,内核 (轻易勿动)

/dev      专门放置硬件设备文件

/etc       系统配置文件,服务,类似注册表地位

/var       经常变化数据的文件夹,下隶属log文件,数据库,或web动态html页面

/lib        系统调用的函数库文件(轻易勿动)

/usr       存放安装程序

/media( mnt) 挂载设备文件的目录

/tmp     每个人的临时文件目录(全局共享自带SBIT特殊权限,仅自己可删除自己文件)

 

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

目录名称

应放置文件的内容

/boot

开机所需文件—内核、开机菜单以及所需配置文件等

/dev

以文件形式存放任何设备与接口

/etc

配置文件

/home

用户主目录

/bin

存放单用户模式下还可以操作的命令

/lib

开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数

/sbin

开机过程中需要的命令

/media

用于挂载设备文件的目录

/opt

放置第三方的软件

/root

系统管理员的家目录

/srv

一些网络服务的数据文件目录

/tmp

任何人均可使用的“共享”临时目录

/proc

虚拟文件系统,例如系统内核、进程、外部设备及网络状态等

/usr/local

用户自行安装的软件

/usr/sbin

Linux系统开机时不会使用到的软件/命令/脚本

/usr/share

帮助与说明文件,也可放置共享文件

/var

主要存放经常变化的文件,如日志

/lost+found

当文件系统发生错误时,将一些丢失的文件片段存放在这里

 

 

    在Linux系统中另外还有一个重要的概念—路径。路径指的是如何定位到某个文件,分为绝对路径与相对路径。绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。我们来看下面这个例子,以帮助大家理解。假如有位外国游客来到中国潘家园旅游,当前内急但是找不到洗手间,特意向您问路,那么您有两种正确的指路方法。

绝对路径(absolute path):首先坐飞机来到中国,到了北京出首都机场坐机场快轨到三元桥,然后换乘10号线到潘家园站,出站后坐34路公交车到农光里,下车后路口左转。

相对路径(relative path):前面路口左转。

    这两种方法都正确。如果您说的是绝对路径,那么任何一位外国游客都可以按照这个提示找到潘家园的洗手间,但是太繁琐了。如果您说的是相对路径,虽然表达很简练,但是这位外国游客只能从当前位置(不见得是潘家园)出发找到洗手间,因此并不能保证在前面的路口左转后可以找到洗手间,由此可见,相对路径不具备普适性。

 

 

 

 

物理设备的命名规则

 

 

根据udev服务定义的一套规则来命名设备名称

 

linux下磁盘命名规则:

   根据不同的硬盘接口 Centos4.x,5.x格式为:

IDE接口:/dev/hda,/dev/hdb

SATA/SCSI接口:/dev/sda, /dev/sdb(sda,sdb,sdc,sdd  abcd不是对应的硬盘插槽或者分区而是系统内核识别分区的顺序)

 

Centos6开始统一变更为:
/dev/sda

/dev/sdb

/dev/sdc

 

虚拟机环境下硬盘命名格式:

/dev/vda, /dev/vdb

 

 

 

光驱命名规则:

/dev/cdrom

/dev/sr0 ( 链接的形式 )

 

硬件:

/dev/mouse   鼠标

/dev/sd  硬盘

                                    

      常见的硬件设备及其文件名称

硬件设备

文件名称

IDE设备

/dev/hd[a-d]

SCSI/SATA/U盘

/dev/sd[a-p]

软驱

/dev/fd[0-1]

打印机

/dev/lp[0-15]

光驱

/dev/cdrom

鼠标

/dev/mouse

磁带机

/dev/st0或/dev/ht0

 

 

磁盘分区:

磁盘第一扇区512字节 

系统引导记录(mbr&gpt)占用  446字节

4段分区信息占用   64字节

结束符   2字节

 

主分区     编号1-4  写入到第一个扇区的信息就是主分区,在第一个扇区上建立的磁盘分区 

扩展分区  编号1-4(存放的是指针,无法存实际数据,承载逻辑分区与主分区的连接)

逻辑分区   编号5~  (扩展分区中创建出来的,可以存东西)

 

国内很多Linux培训讲师以及很多知名Linux图书在讲到设备和分区名称时,总会讲错两个知识点:

      第一个比如/dev/sda表示主板上第一个插槽上的存储设备,学员或读者在实践操作的时候会发现果然如此,因此也就对这条理论知识更加深信不疑。但真相不是这样的,/dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。大家以后在使用iSCSI网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb这个设备就是这个道理

 

     第二个知识点是对分区名称的理解错误。很多Linux培训讲师会告诉学员,分区的编号代表分区的个数。比如sda3表示这是设备上的第三个分区,而学员在做实验的时候确实也会得出这样的结果,但是这个理论知识是错误的,因为分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区

 

   首先,/dev/目录中保存的应当是硬件设备文件;其次,sd表示是存储设备;然后,a表示系统中同类接口中第一个被识别到的设备,最后,5表示这个设备是一个逻辑分区。一言以蔽之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件”

 

 

 

 

 

 

文件系统与数据资料

 

文件系统格式:

rhel4       ext2       断电数据会丢失

rhel5       ext3       增加了日志系统,保存系统操作日志与故障日志

rhel6       ext4       对ext3性能提升版本

rhel7        xfs         云计算,大数据,集群火热催生全新文件系统格式(支持18EB的存储空间)

 

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

Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。

Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。

 

XFS:是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

RHEL 7系统中一个比较大的变化就是使用了XFS作为文件系统,这不同于RHEL 6使用的Ext4。从红帽公司官方发布的说明来看,这确实是一个不小的进步,但是刘遄老师在实测中发现并不完全属实。因为单纯就测试一款文件系统的“读取”性能来说,到底要读取多少个文件,每个文件的大小是多少,读取文件时的CPU、内存等系统资源的占用率如何,以及不同的硬件配置是否会有不同的影响,因此在充分考虑到这些不确定因素后,实在不敢直接照抄红帽官方的介绍。我个人认为XFS虽然在性能方面比Ext4有所提升,但绝不是压倒性的,因此XFS文件系统最卓越的亮点应该当属可支持高达18EB的存储容量吧。

在拿到了一块新的硬盘存储设备后,也需要先分区,然后再格式化文件系统,最后才能挂载并正常使用。

 

       日常在硬盘需要保存的数据实在太多了,因此Linux系统中有一个名为super block的“硬盘地图”。Linux并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:

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

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

该文件的大小(size);

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

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

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

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

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

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

 

 

文件保存的过程由两部分组成

 

inode----保存文件的名称,大小,所有者,组,权限rws,suid,sgid,sbid,属性信息,指针(指针指向block块设备上真正的对应文件数据实体)

 

block----保存真正的文件数据实体

 

     当执行数据删除的时候,仅删除inode文件,而不会删除真正的数据文件并实体填充底层,在没有二次写入依然可以恢复数据,除非利用隐藏权限s参数命令删除chattr -s 会删除并填充底层,即无法恢复(硬盘低格六次以上也无法恢复)

 

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

 

VSF架构图:

 

 

 

 

挂载硬件设备

 

挂载:(技术原理就是将硬盘设备与系统上的某个目录文件关联的动作,通过目录去访问设备)

 

Mount 挂载概念类似windos映射和插入优盘读取数据的背后过程

挂载:mount   /dev/sdb3    /cisco     将硬盘sdb3(或者用该设备的uuid)来挂载到cisco目录下,即可在cisco中看到使用它

卸载:umount  跟  /dev/sdb3 或者 目录  二选一的方式

 

uuid     设备唯一标识符     blkid 查看设备uuid编号

wwid     scsi磁盘的地址类似网卡mac地址

monut   设备类型查看

 

本地挂载用设备名,远程挂载建议用UUID挂载

 

/etc/fstab    编辑该文件以后 重启服务器挂载也生效实现永久挂载,否则重启后需要重新做挂载

例:

硬盘挂载格式   /dev/sdb5  /cisco  xfs defaults 0 0 [defaults (默认有读写权限)0代表不自动备份  不自动自检0 ]  或/dev/uuid编号/   cisoc

 

光盘挂载格式   /dev/cdrom/media/cdrom iso9660

 

 

挂载配置:

 mkdir    /ccie    创建ccie挂载点

 mount   /dev/sdb1 /ccie     将sdb1分区挂载到ccie挂载点

 vim /etc/fstab      /dev/sdb1 /ccie ext4 defaults 0 0    编辑fstab文件实现永久挂载

 

                                    mount命令中的参数以及作用

参数

作用

-a

挂载所有在/etc/fstab中定义的文件系统

-t

指定文件系统的类型

 

 

 

添加硬盘设备

 

添加硬盘---格式化--分区---挂载使用

fdisk命令

在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。fdisk命令用于管理磁盘分区,格式为“fdisk  [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同

     fdisk命令中的参数以及作用

参数

作用

m

查看全部可用的参数

n

添加新的分区

d

删除某个分区信息

l

列出所有可用的分区类型

t

改变某个分区的类型

p

查看分区表信息

w

保存并退出

q

不保存直接退出

 

fidsk 硬盘管理命令

 

新增虚拟硬盘显示为sdb

ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb

 

fdisk /dev/sdb

 

Command (m for help): m

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   g   create a new empty GPT partition table

   G   create an IRIX (SGI) partition table

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)

 

 

新建分区:

P进入磁盘配置交互模式 ,输入m查看命令使用帮助

n       (partition)添加新分区

p       (partition table)划分主分区表

1       (输入分区编号)

回车   (无需输入起始扇区)

+5G    (最后一个扇区大小)

P        (显示新分区)

 Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    10487807     5242880   83  Linux

w        (保存退出)

 

 

 

新分区查看

ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1

 

 

格式化新分区

mkfs.ext4 /dev/sdb1     格式化为ext4

 

 

挂载新分区

 mkdir    /ccie    创建ccie挂载点

mount   /dev/sdb1 /ccie     将sdb1分区挂载到ccie挂载点

 vim /etc/fstab      /dev/sdb1 /ccie ext4 defaults 0 0    编辑fstab文件实现永久挂载(重启以后sdb1依然能存在)

 

 

df-h    查看当前挂载的设备信息

Filesystem             Size  Used Avail Use% Mounted on

/dev/mapper/rhel-root   18G  3.0G   15G  17% /

devtmpfs               985M     0  985M   0% /dev

tmpfs                  994M  140K  994M   1% /dev/shm

tmpfs                  994M  8.9M  986M   1% /run

tmpfs                  994M     0  994M   0% /sys/fs/cgroup

/dev/sda1              497M  119M  379M  24% /boot

/dev/sr0               3.5G  3.5G     0 100% /run/media/root/RHEL-7.0 Server.x86_64

/dev/sdb1              4.8G   20M  4.6G   1% /ccie

 

 

 

 

 

 

添加交换分区

 

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

 

Swap linux交换分区 等同windows虚拟内存,利用磁盘文件充当内存使用,一般为内存大小2倍

 

 

Swap 交换空间,用一部分硬盘空间充当内存交换

 

 

swap扩容

创建分区

fdisk  分区sdb

创建扩展分区15G-----sdb4

创建逻辑分区3G------sdb5

 ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1  /dev/sdb4  /dev/sdb5

扩容完看不到分区 使用partprobe命令 把分区信息同步给Linux内核(小bug)

 

格式化分区格式:

mkswap /dev/sdb5    格式化分区为swap格式

 

挂载分区:

swapon /dev/sdb5     将sdb5添加到sawp分区上

vim /etc/fstab     /dev/sdb5 /swap swap defaults 0 0     编辑fstab文件实现永久挂载扩容(挂载点就是默认swap,分区格式默认swap)

 

 

 

 

 

磁盘容量配额

 

    限制用户硬盘使用量,管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理

 

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

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

 

开启磁盘配额功能

vim  /etc/fstab文件

boot磁盘下添加 ,uquota    开启磁盘配额功能

UUID=ac87bd97-996c-4947-b9ee-7bbf09c5ee82 /boot  xfs     defaults,uquota  

 

xfs_quota命令

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

 

配置磁盘配额:

xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 linuxprobe' /boot  针对linuxprobe在boot目录下配额规则, 超过3M大小写入日志文件,超过6M拒绝写入,超过3个文件写入日志文件,超过6个文件拒绝写入

 

 

 

测试配额:

chmod -Rf 777 /boot/  并针对/boot目录增加其他人的写权限,保证用户能够正常写入数据

 

 

切换用户   通过dd配合zero提取数据块     

dd if=/dev/zero of=haha count=3 bs=3M

 

提取8M数据块时提示配额超标:

dd if=/dev/zero of=haha count=3 bs=8M

dd: error writing ‘haha’: Disk quota exceeded

 

给用户增加配额(root账户下操作):

edquota命令

edquota命令用于编辑用户的quota配额限制,格式为“edquota [参数] [用户] ”。在为用户设置了quota磁盘容量配额限制后,可以使用edquota命令按需修改限额的数值。其中,-u参数表示要针对哪个用户进行设置

edquota -u linuxprobe

增加容量选择修改hard硬限制参数,6144变61440

 Filesystem                   blocks       soft       hard     inodes     soft     hard

  /dev/sda1                      6144       3072       61440         1        3        6

真实block块大小:6144/1024   再/1024

 

 

 

 

 

软硬方式链接

 

软链接相当于windows的快捷方式

软链接通过指向磁盘block块设备上的实体文件地址做快捷方式,当实体文件删除,软链接失效

例:

ln -s 777.sh  888      将777.sh文件链接到888文件(和源文件调用通一个指向链接)

lrwxrwxrwx. 1 root root    6 Feb 29 04:03 888 -> 777.sh     l=软链接     888的软链接指向777.sh

 

 

硬链接(不加s) 新建了一个inode指针文件指向数据块

硬链接就是新建了一个inode文件去指向块设备文件地址的新指针文件

例:

ln 666.sh 999    将666.sh 做硬链接指向999

 

同一个文件做多次硬链接后,查看文件信息能看到文件的指针数量6位包含源文件有6个inode指针文件,归零的时候也就是文件删除的时候,但是只是inode数据指针删除了,完全删除块数据需要用隐藏权限+s 删

-rw-r--r--. 6 root root 0 Mar  1 06:42 123.txt

 

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

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

ln命令

ln命令用于创建链接文件,格式为“ln [选项] 目标”,其可用的参数以及作用如表6-6所示。在使用ln命令时,是否添加-s参数,将创建出性质不同的两种“快捷方式”。因此如果没有扎实的理论知识和实践经验做铺垫,尽管能够成功完成实验,但永远不会明白为什么会成功。

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

参数

作用

-s

创建“符号链接”(如果不带-s参数,则默认创建硬链接)

-f

强制创建文件或目录的链接

-i

覆盖前先询问

-v

显示创建链接的过程

为了更好地理解软链接、硬链接的不同性质,接下来创建一个类似于Windows系统中快捷方式的软链接。这样,当原始文件被删除后,就无法读取新建的链接文件了。

(window.slotbydup = window.slotbydup || []).push({ id: "u5894387", container: "_0hv0l6ey3zro", async: true });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: