磁盘存储

一切皆文件
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备类型
块设备:block,存取单位“块”,磁盘
字符设备:char,存取单位“字符”,键盘
不同磁盘标识:/dev/sda,/dev/sdb, ...
同一设备上的不同分区:/dev/sda1,/dev/sda5

  1. /dev/DEV_FILE
  2. /dev/sdX #SCSI, SATA, SAS, IDE,USB
  3. /dev/nvme0n# #nvme协议硬盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2

硬盘接口类型

IDE:133MB/s,并行接口,早期家用电脑
SCSI:640MB/s,并行接口,早期服务器
SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不成
USB:480MB/s
M.2:
注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的

服务器硬盘大小
LFF:3.5寸,一般见到的那种台式机硬盘的大小
SFF:Small Form Factor 小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘
L、S分别是大、小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考内虑增大单位密度内的磁盘容量、增强散热、减小功耗

机械硬盘(HDD)和固态硬盘(SSD)
相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍
相较于SSD,HDD在价格、容量占有绝对优势。硬盘有价,数据无价,目前SSD不能完全取代HHD

区位记录磁盘扇区结构ZBR(Zoned Bit Recording)

CHS
CHS采用 24 bit位寻址, 其中前10位表示cylinder,中间8位表示head,后面6位表示sector,最大寻址空间 8GB

LBA(logical block addressing)LBA是一个整数,通过转换成 CHS 格式完成磁盘具体寻址。ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128Petabytes。
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

新建一个磁盘后,使    系统重新扫描硬件
[root@CentOS ~]$ alias scandisk='ll /sys/class/scsi_host/host0/scan' 
[root@CentOS ~]$ scandisk
--w------- 1 root root 4096 Aug 26 15:27 /sys/class/scsi_host/host0/scan
[root@CentOS ~]$ echo '- - -' > /sys/class/scsi_host/host0/scan


硬盘存储术语 CHS
    head:磁头 磁头数=盘面数
    track:磁道 磁道=柱面数
    sector:扇区,512bytes
    cylinder:柱面 1柱面=512 * sector数/track*head数=512*63*255=7.84M

CentOS 5 之前版本 Linux 以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区

查看CHS
fdisk -l /dev/sda
lsblk -d -o name,rota            #1表示机械,0表示SSD(识别SSD和机械硬盘类型)

管理存储

使用磁盘空间过程:

  • 设备分区
  • 创建文件系统
  • 挂载新的文件系统

    1.磁盘分区

    两种分区方式:MBR、GPT

    MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
    其中0磁道0扇区:512bytes
    446—-boot loader,主引导程序
    64—-分区表,其中每16bytes标识一个分区(DPT)
    2——55AA,结束标志

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区) 。
主和扩展分区对应的1—4,/dev/sda3,逻辑分区从5开始,/dev/sda5

GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)

BIOS和UEFI

BIOS(Basic Input Output System 基本输入输出系统) 是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统
UEFI(Unified Extensible Firmware Interface)统一的可扩展固件接口, 是一种详细描述类型接口的标准。UEFI 相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制
image.png
MSDN(Microsoft Developer Network)指出,Windows 只能安装于 BIOS + MBR 或是 UEFI + GPT的组合上,而 BIOS + GPT 和 UEFI + MBR 是不允许的。但是 BIOS + GPT + GRUB启动Linux 是可以的

lsblk    列出块设备

fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作,可以是交互或非交互方式(操作都是实时生效的,小心使用)
partprobe    重新设置内存中的内核分区表版本,适合于除了CentOS 6 以外的其它版本 5,7,8

hexdump -C -n 512 -v /dev/sdb 
parted /dev/sdb                                                #设置分区方式
parted /dev/sdb print                                    #查看分区
parted /dev/sdb mkpart primary 1 200    #新建分区
parted /dev/sdb rm 1                                    #删除分区
parted -l                                                            #列出所有硬盘分区信息

gdisk /dev/sdb              #类fdisk的GPT分区工具
fdisk /dev/sdb              #管理MBR分区
fdisk -l [-u] /dev/sdb  #查看分区
p 分区列表
n 创建新分区
d 删除分区
w 保存并退出
q 不保存并退出  
t 更改分区类型
v 校验分区
u 转换单位

cat /proc/partations        查看内核是否已经识别出来新的分区

partx -a /dev/DEVICE                            #新增分区用
kpartx -a /dev/DEVICE -f: force        #同步分区表
partx -d --nr 6-8 /dev/sda                #删除分区
echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc        #非交互式创建分区

2.文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,即文件系统

从系统角度看,文件系统是对存储设备空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体的说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

支持的文件系统:/lib/modules/uname -r/kernel/fs
cat /proc/filesystems

lsblk -f                                #查看磁盘文件系统类型
lsblk -d -o name,rota        #识别SSD和机械硬盘类型,1表示机械,0表示SSD

blkid                                        #可以查看块设备属性信息
findfs UUID=d5f6bf91-9dd6-4426-8f94-e9cf55f0803c    #查找分区
modinfo xfs                             #查看内核模块文件信息

tune2fs:重新设定ext系列文件系统可调整参数的值
tune2fs -o ^acl /dev/sdb1    (#调整文件系统的默认挂载选项,-o ^acl 删掉acl属性)

dump2fs:显示ext文件系统信息,将磁盘分组管理
dumpe2fs /dev/sdb1            #显示ext文件系统信息,将磁盘块分组管理
dumpe2fs /dev/sdb1 |grep 'Default mount options'

xfs_info:显示示挂载或已挂载的 xfs 文件系统信息

mkfs.ext4 /dev/sdb1         #创建文件系统,可以理解为格式化

块组描述符表(GDT)
ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组块组描述符表GDT(group descriptor table)。虽然每个块组都需要块组描述符来记录块组的信息和属性元数据,但是不是每个块组中都存放了块组描述符。将所有块组的块组信息组成一个GDT保存,并将该GDT存放于某些块组中,类似存放superblock和备份superblock的块

3.挂载

挂载:将额外文件系统于根文件目录建立起关联关系,进而使得此目录做为其他文件访问入口的行为
卸载:解除此关联关系得过程

mount:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录
/etc/mtab文件显示当前已挂载的所有设备
/proc/mounts文件显示内核追踪到的所有挂载的设备

umount:
lsof MOUNT_POINT                查看正在访问指定文件的进程
fuser -v MOUNT_POINT
fuser -km MOUNT_POINT        终止正在访问指定的文件系统的进程

持久挂载:将挂载保存在/etc/fstab中可以下次开机时,自动启用挂载
添加新的挂载项,需要执行命令生效:mount -a

每行定义一个要挂载的文件系统,其中包括6项:
1.要挂载的设备或伪文件系统
    设备文件
    LABEL:LABEL=""
    UUID:UUID=""
    伪文件系统名称:proc, sysfs

2.挂载点----必须是事先存在的目录
3.文件系统类型----ext4,xfs,iso9660,nfs,none
4.挂载选项----defaults,acl,bind
5.转储频率
    0不做备份
    1每天转储
    2每隔一天转储
6.fsck检查的文件系统的顺序
    0不自检 
    1首先自检;一般只有rootfs才用 
    2非rootfs使用

4.处理交换文件和分区

5.磁盘处理工具

RAID

逻辑卷管理器