Linux存储管理与文件系统

2021/9/14 7:04:45

本文主要是介绍Linux存储管理与文件系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目前我们主流的硬盘主要有两种形态,一种是及机械硬盘(HDD),一种是的固态硬盘(SSD)

硬盘工作原理

机械硬盘HDD

机械硬盘是靠机械马达以固定的速度转动磁盘,然后再有机械臂的摆动,让磁头可以读取盘片上的磁性信息,这种工作原理的硬盘我们成为机械硬盘。

img

由于机械硬盘是依靠机械的运动来读写数据的,大家都知道机械在长时间运转的过程中是会产生一定的损耗,所以机械硬盘虽然理论上寿命很长,但随着时间的变长,机械磨损变大,导致磁头定位的误差变大,从而影响到硬盘的速度,这个就是为什么你的老电脑开机缓慢,运行卡顿的原因了。

固态硬盘SSD

固态硬盘依靠主控芯片来将数据的二进制信息写入浮栅晶体管中,以这样的原理实现数据的读取和写入。

img

固态硬盘在读取和写入数据的时候完全是依靠数字电路实现的,所以并没有机械硬盘的机械磨损,而且也没有在磁盘上定位读写的延迟,所以固态硬盘的数据读写效率是远远高于机械硬盘的,但是也有一定的缺点,由于浮栅晶体管的设计原理,每次数据的读写,都会让浮栅晶体管所需要的电压更高,一定寿命以后,固态硬盘就会失效。并且固态硬盘如果发生了损坏,数据恢复的难度是大于机械硬盘的,所以为了可靠性,企业目前还是在大量使用机械硬盘的。

硬盘设备命名

一台服务器往往会配备有多块硬盘,Linux中为了区分不同的硬盘,会使用不同的命名来将硬盘设备标识,Linux系统对物理设备会使用sd[a-z]的方式来命名。物理硬盘上的详细分区会使用数字的方式来进行标识,比如sda设备上的多个分区会标识为sda[1,2,3....]

KVM虚拟化:

/dev/vd[a-z] /dev/sd[a-z]

/dev/vda 是 virtio-block 类型的设备,是虚拟出的磁盘设备,而 /dev/sda 是 sd 即 SCSI 类型的设备。

[root@VM-4-10-centos usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        894M     0  894M   0% /dev
tmpfs           909M   24K  909M   1% /dev/shm
tmpfs           909M  644K  908M   1% /run
tmpfs           909M     0  909M   0% /sys/fs/cgroup
/dev/vda1        59G  4.7G   52G   9% /
------------------------
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  1.7G   16G   10% /
devtmpfs                 898M     0  898M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M  9.5M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M   15% /boot
tmpfs                    182M     0  182M    0% /run/user/0

Linux各目录及详细介绍

目录文件的内容
/bin存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
/etc存放系统管理和配置文件
/home存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/usr用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。/usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 ,/usr/include linux下开发和编译应用程序所需要的头文件 ,/usr/lib 常用的动态链接库和软件包的配置文件 , /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/opt额外安装的可选应用程序包所放置的位置。放置第三方软件
/proc虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/root超级用户(系统管理员)的主目录
/sbin存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。
/dev用于存放设备文件。
/mnt系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。
/boot存放用于系统引导时使用的各种文件
/lib存放根文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
/tmp用于存放各种临时文件,是公用的临时文件存储点。
/var用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。
/lost+found当文件系统发生错误时,将一些丢失的文件片段存放在里面

物理设备的命名规则

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

硬件设备文件名称
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

一般的硬盘设备都会是以“/dev/sd”开头,分区编号按照如下规则:

  • 主分区或扩展分区的编号从1开始,到4结束;
  • 逻辑分区从编号5开始。

文件系统与数据资料

文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。

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

格式化后会发生如下事情

  • Linux创建一个硬盘地图’superblock’,记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block 号码,默认一个inode表格128字节,一个block记录消耗4B,记录满了后会新建inode用于扩展。
    • 该文件的访问权限(read、write、execute);
    • 该文件的所有者与所属组(owner、group);
    • 该文件的大小(size);
    • 该文件的创建或内容修改时间(ctime);
    • 该文件的最后一次访问时间(atime);
    • 该文件的修改时间(mtime);
    • 文件的特殊权限(SUID、SGID、SBIT);
    • 该文件的真实数据地址(point)。
  • block:用于存储数据

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

分区表

为了让系统能够识别和管理物理设备上的不同分区,需要在物理设备前加上一些数据用于记录分区的情况,这些数据就是分区表数据,目前分区表有两种主流的格式:

  • MBR
    • 管理的硬盘大小不能超过2T
    • 有主分区和扩展分区两种,不管是哪种分区,总数不能超过4个分区
    • 扩展分区内部可以逻辑上划分多个区域,但是在分区表中都算在一个分区内
    • 如果作为系统盘,必须要设置一个激活分区,用于存放系统的引导文件

img

  • GPT
    • 管理硬盘大小不能超过18EB,目前人类还没制造出单块这么大的硬盘
    • 理论上支持无限分区,在win10系统上,最多可以分128个分区
    • 如果作为系统盘,必须要创建一个EFI分区,用于存放系统的引导文件

在这里插入图片描述

注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失

管理分区

  • 列出块设备
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part
  ├─centos-root 253:0    0   47G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
sr0              11:0    1 1024M  0 rom
[root@VM-4-10-centos usr]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 141.4M  0 rom  
vda    253:0    0    60G  0 disk 
└─vda1 253:1    0    60G  0 part /
  • 创建分区命令
fdisk  管理MBR分区
gdisk  管理GPT分区
parted 高级分区操作
  • 重新设置内存中的内核分区表版本
partprobe

parted 命令

  • parted的操作都是实时生效的,小心使用
  • 格式:
parted [选项]... [设备 [命令 [参数]...]...] 
  • 操作命令:
[root@VM-4-10-centos ~]# parted --help
cp [FROM-DEVICE] FROM-MINOR TO-MINOR           #将文件系统复制到另一个分区 
help [COMMAND]                                 #打印通用求助信息,或关于 COMMAND 的信息 
mklabel 标签类型                               #创建新的磁盘标签 (分区表) 
mkfs MINOR 文件系统类型                        #在 MINOR 创建类型为“文件系统类型”的文件系统 
mkpart 分区类型 [文件系统类型] 起始点 终止点   #创建一个分区 
mkpartfs 分区类型 文件系统类型 起始点 终止点   #创建一个带有文件系统的分区 
move MINOR 起始点 终止点                       #移动编号为 MINOR 的分区 
name MINOR 名称                                #将编号为 MINOR 的分区命名为“名称” 
print [MINOR]                                  #打印分区表,或者分区 
quit                                           #退出程序 
rescue 起始点 终止点                           #挽救临近“起始点”、“终止点”的遗失的分区 
resize MINOR 起始点 终止点                     #改变位于编号为 MINOR 的分区中文件系统的大小 
rm MINOR                                       #删除编号为 MINOR 的分区 
select 设备                                    #选择要编辑的设备 
set MINOR 标志 状态                            #改变编号为 MINOR 的分区的标志
  • 查看分区情况
[root@localhost ~]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  标志
 1      1049kB  1075MB  1074MB  primary  xfs          启动
 2      1075MB  53.7GB  52.6GB  primary               lvm
 
[root@localhost ~]# parted /dev/sdb print
错误: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
  • 设置磁盘的分区表
[root@localhost ~]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.
# 忽略这条警告信息,parted是实时生效的,执行命令后就已经生效!

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  标志
  • 对磁盘进行分区
[root@localhost ~]# parted /dev/sdb mkpart primary 1 200M
信息: You may need to update /etc/fstab.   
# 忽略这条警告信息,parted是实时生效的,执行命令后就已经生效!

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     标志
 1      1049kB  200MB  199MB               primary
  • 删除分区
[root@localhost ~]# parted /dev/sdb rm 1
信息: You may need to update /etc/fstab.
# 忽略这条警告信息,parted是实时生效的,执行命令后就已经生效!

[root@localhost ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  标志
  • 修改磁盘为mbr分区,注意会丢失所有数据
[root@localhost ~]# parted /dev/sdb mklabel msdos
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do
you want to continue?
是/Yes/否/No? yes
信息: You may need to update /etc/fstab.


这篇关于Linux存储管理与文件系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程