磁盘管理和文件系统

1.设备文件

linux下一切皆文件:open(), read() , write(),close()

设备文件:关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信

设备号码:主设备号:major number,标识设备类型

      次设备号:minor number,标识同一类型的不同设备

设备类型:块设备:block,存取单位“块”,磁盘

     字符设备:char ,存取单位“字符”,键盘

磁盘设备的设备文件命名:

/dev/DEV_FILE

/dev/sd#    #SAS,SATA,SVSI,IDE,USB

/dev/nvme0n#     #nvme协议磁盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2

虚拟磁盘:/dev/vd  ,   /dev/xvd

磁盘类型:IDE:   133MB/s ,并行接口,早期家用电脑

     SCSI:  640MB/s,并行接口,早期服务器

     SATA:   6Gbps,SATA数据端口于电源端口是扽开的,即需要两条线,一条数据线,一条电源线

     SAS:6Gbps,SAS是一整条线,数据端口是一体化的,SAS中包含供电线,而SATA中不包含供电线,SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不可以

     USB:480MB/s

在这里最快速度的硬盘类型属于nvme

服务器硬盘大小: LFF:3.5寸,一般见到的那种台式机硬盘的大小

         SFF:smail form factor (小形状因数),2.5寸,注意步同于笔记本硬盘

L ,S 分别是大,小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考虑增大单位密度内的磁盘容量,增强散热,减小功耗

机械硬盘(HDD):hard disk drive ,即是传统普通硬盘,主要由盘片,磁头,盘片转轴即控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成,机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头转换器负责各个磁头的运动,磁头可沿盘片的半径方向运动。

固态磁盘(SSD):solid  state drive ,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片,DRAM芯片)组成,固态硬盘在接口的规范和定义,功能及使用方法与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致。

硬盘存储术语(CHS)

head :磁头 磁头数=盘面数

track  :磁道 磁道=柱面数

sector:扇区,512bytes

cylinder:柱面 1柱面=512*sector数/track*head数=512*63*255=7.84M

CHS:     采用24bit位寻址

    其中前10位表示cylinder,中间8位表示head,后面6位标识sector

    最大寻址空间是8GB

LBA(logical block addressing)逻辑块寻址

LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址

ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128GiB,2002年ATA-6规范采用48位LBA,同样以每扇区512组计算容量上限达128petabytes(字节)

由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式,在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

管理存储:1.设备分区  2.创建文件系统,3.挂载新的文件系统

磁盘分区:首先为什么要磁盘分区?

主要由一下几点原因:1.优化I/O性能

          2.实现磁盘空间配额限制

          3.提高修复速度

          4.隔离系统和程序

          5.安装多个OS

          6.采用不同文件系统

分区方式:MBR (master boot record ) 主引导记录

    GPT(globals unique ldentifiers partition table ) 全局唯一标识符分区表 

 在MBR中最多只能分4个主分区,可以3个主分区加一个扩展分区(N个逻辑分区)

主分区可以存放数据,也可以装系统,扩展分区要想存数据,必须要划分小的逻辑分区。

扩展分区不能直接使用,如果需要使用,里面必须要分小的逻辑分区,扩展分区相当于一个容器,只能用来分区扩展分区

一个分区要占用16个字节来描述一个分区,所以最多只能分4个主分区,所以主分区加扩展分区最多4个。

活动分区只有一个)

 GPT本身可以分128个主分区

BIOS:是主板上内置的程序代码,主要用于开机系统自检和引导操作系统。

BIOS(basic input ouput system)基本输入输出系统,主要完成引导操作系统的启动,启动之后,BIOS的任务就完成了。自动搜索硬件,是否满足启动要求。

BIOS,不支持桌面。

EFL(extensible firmware interface)可扩展固件接口

 组合:BIOS+MBR    ,      UEFI  + GPT

 UEFI  用起来比较方便,支持更多语言。

mknod :创建指定类型和名称的特殊文件

管理分区:列出分区块:lsblk

创建分区命令:fdisk 管理MBR分区(master boot record )

       gdisk 管理GPT分区(globals unique ldentifiers partition table )

       parted 高级分区操作,可以是交互或非交互方式,(这个命令甚用,用这个命令他会立即生效,不安全)

子命令:p  分区列表

    t    更改分区类型

    n    创建新分区

    d    删除分区

    v   效验分区

    u    转换单位

    w   保存并退出

    q 不保存并退出

重新设置内存中内核分区表版本,适合于除了Centos6以外的其他版本。

 硬盘上分的分区同步到内存中:partprobe   

parted命令:修改磁盘分区表后,无需重启,通partx命令告诉内核,分区已改动,内核可以读入新的分区表。

文件系统:

ext2:Extended file system 适用于那些分区容量不是太大,更新不频繁的情况,例如/boot分区

ext3:是ext2的改进版本,其支持日志功能,能够帮助系统从非正常开机导致的异常中恢复

ext4:是ext文件系统最新版,提供了很多的特性,包括纳秒级时间戳,创建和试用巨型文件(16TB),最大(1EB)的文件系统,以及速度的提升。

xfs:SGI,支持最大8EB的文件系统

swap

iso9660  光盘

btrfs (oracle)

reiserfs

win常用文件系统

FAT32,NTFS,exFAT

UNIX :   FFS, UFS  ,JFS2

网络文件系统:NFS,  CIFS

集群文件系统:GFS2,OCFS2(oracle)

分布式文件系统:fasrdfs,ceph,moosefs,mogilefs,glusterfs,lustre

RAW:   裸文件系统,未经处理或者未经格式化产生的文件系统

常用的文件系统特性:

FAT32: 最多只能支持16TB的文件系统和4GB的文件

NTFS:最多只能支持16EB的文件系统和16EB的文件

EXT3:最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件,EXT3目前只支持32000个子目录,EXT3文件系统试用32为空间记录快和inode数量,当数据写入到EXT3文件系统中时,EXT3的数据块分配器每次只能分配一个4KB的块

EXT4:EXT4是linux系统下的日志文件系统,是EXT3文件系统的后继版本,EXT4的文件系统容量达到1EB,而支持单个文件达到16TB,理论上支持无限量的子目录,EXT4文件系统使用64位空间记录块数量和inode数量,EXT4的多块分配器支持一次调用分配多个数据块,修复速度快

xfs:根据所记录的日志在很短的时间内迅速恢复磁盘文件内容,用优化算法,日志记录对整体文件操作影响非常小,是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件达到8EB,能以接近【裸设备I/O的性能存储数据

在linxu中区分大小写的说法实际上是不对的,准确的说和文件系统有关,区分大小写并不是由操作系统决定,而是文件系统决定。

文件系统的组成部分:

内核中的模块:ext4,xfs,vfat

linux的虚拟文件系统   : VFS

用户空间的管理工具:(mkfs.ext4 ),(mkfs.xfs),(mkfs.vfat)

 创建mkfs命令:(1)mkfs.fs (ext4,xfs,btrfs,vfat)

          (2) mkfs -t fs_type 

             mkfs -L "LABEL" 设定卷标

选项:-t     指定文件系统类型

   -b     指定块block 大小

   -L      设置卷标

   -j  相当于-t ext3,mkfs.ext3=mkfs=mkfs -t ext3 =mke2fs -j =mke2fs -t ext3

     -i 为数据空间中每多少个字节创建一个inode,不应该小于block大小

    -N 指定分区中创建多少个inode

     -I 一个inode记录占用的磁盘空间大小,128 -----2096

    -m 默认5%,为管理人员预留空间占总空间的百分比

    -O FEATURE[....]   启用指定特性

     -o  ^FEATURE       关闭特性

blkid:可以查看块设备属性信息

格式: blkid [option]...  device

常用选项:-U    UUID根据指定的UUID来查找对应的设备

                   -L      LABEL根据指定的LABEL来查找对应的设备

e2label:管理ext系列的文件系统LABEL(标识 ,卷标)

用法:e2label    device   [LABEL]

findfs:查找分区

findfs  [options]   LABEL=<lael>

findfs  [options]    UUID=<uuid>

tune2fs:重新设定ext系列文件系统可调整参数的值

选项:-l    查看指定文件系统超级模块信息:super block

   -L   LABEL    修改卷标

   -m  修改留给管理员的空间百分比

    -j   将ext2升级为ext3

    -O 文件系统属性启用或禁用,-O   ^has_journal

    -o  调整文件系统的默认挂载选项。 -o  ^acl

     -U  UUID修改uuid号

dumpe2fs:显示ext4文件系统,将磁盘块分组管理

-h  查看超级模块信息,不显示分组信息

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

文件系统检测和修复

文件系统加故障常发生于死机或者非正常关机之后,挂载为文件系统标记为”no clean“

注意:一定不要在挂载状态下执行修复命令

fsck:file system check

fsck.fs_TYPE

fsck -t fs_TYPE

注意fs_type   一定要与分区上文件类型相同

-a    自动修复

-r     交互式修复错误

e2fsck :ext系列文件专用的检测修复工具

-y   自动回答yes

-f    强制修复

-p    自动进行安全的修复文件系统问题

xfs_repair:xfs文件系统专用检测修复工具

-f     修复文件,而不修复设备

-n    只检查

-d    允许修复只读的挂载设备,在单用户下修复/ 时使用,然后立即reboot

     挂载

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为

卸载:为解除此关联关系的过程

把设备关联挂载点:mount point

挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空,进程正在使用中的设备无法被挂载

挂载文件系统    mount

格式:mount [-fnesvw]   [-t  vfstype]  [-o options]  device  mountpoint

device:指明要挂载的设备

设备文件:例如:/dev/sda2

卷标:-L "LABEL" 例如-L "MYDAYA"

UUID: -U UUID 例如-U ”UUID号“

伪文件系统名称:proc,sysfs,devtmpfs,configfs

mounpoint :挂载 目录必须先存在,建议使用空目录

mount 常用选项:

-t fstype    指定要挂载的设备上的文件系统类型,如:ext4,xfs

-r       readonly,只能挂载

-w      read and write ,读完挂载,此为默认设置,可忽略

-n       不更新/etc/mtab,mount不可见

-a        自动挂载所有支持自动挂载的设备(/etc/fstab文件中,且挂载选项中由auto功能)

-L    ‘LABEL’    以卷标指定挂载设备

-U    UUID        以UUID指定要挂载的设备

-B      --bind      绑定目录到另一个目录上

-o    options :(挂载文件系统的选项),可多个选项使用逗号分割

   async  异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全

   sync   同步模式,内存更改时,同时写磁盘,安全,但效率底下

   atime/noatime  包含目录和文件

   diratime/nodiratime 目录的访问时间戳

   auto/noauto   是否支持开机自动挂载,是否支持-a选项

   exec/noexec  是否支持将文件系统上运行程序

    dev/nodev     是否支持在此文件系统上使用设备文件

    suid/nosuid    是否支持suid和sgid权限

     remount        重新挂载

    ro/rw            只读,读写

     user/nouser   是否允许普通用户挂载此设备,/etc/fstab使用

    acl/noacl      启用此文件系统上的acl功能

    loop               使用loop 设备

    _netdev         当网络可用时才对网络资源进行挂载,如:NFS系统

    defaults          相当于rw,suid,dev,exec,auto,nouser,async 

(一个文件夹或者文件,被挂载起来后,旧的文件会被隐藏 )

挂载规则:

1.一个挂载点同一时间只能挂载一个设备

2.一个挂载点同一时间允许挂载多个设备只能看到最后一个设备的数据,其他设备上的数据将被隐藏

3.一个设备可以同时挂载多个挂载点

4.通常挂载点一般是已存在空的目录

卸载文件系统    umount

卸载时,可使用设备,也可以使用挂载点

umount   设备名|挂载点

查看文件或者文件夹是否可以挂载

   findmnt    mount_point    |   device

查看某个挂载点是否在被别人使用

lsof   mount_point

fuser  -v   mount_point

终止所有在访问挂载点的用户

fuser -km  mount_point

 

持久挂载

将挂载保存到/etc/fstab中可以下次开机时,自动启用挂载

 swap :拿硬盘的分区,来模拟内存

swapon -a  表示立即生效

swapon -s   表示swap新增加的内存怎么来的

swapoff -a 启用

swapoff  -s  禁用所有swap

/etc/fstab 以设备挂载的时候用UUID,如果用文件作为swap内存,就用文件名

df:显示文件系统的大小

文件系统必须是挂载的文件系统

选项:-h   human-readable

           -H   以10位单位

      -p   以posix兼容的格式输出

           -T  以文件系统类型

    -i   inodes instead  of   block

du :显示文件和目录的大小

选项:-s  只显示目录的大小

           -h  human-readable

   --max-depth=#    指定最大目录层级

   -x  ,one-file-system     忽略不在同一个文件系统的目录

dd :convert and copy file

格式:dd if=/PATH/FROM/SRC   of=/PATH/TO/DEST   bs=#   count=#

   if=file          从所命名文件读取而不是从标准输入

     of=file     写道所命名的文件而不是到标准输出

   ibs=size       一次读size个byte

   obs=size      一次写size个byte

   bs=size    block size,指定块大小(即使是ibs也是obs)

   cbs=size       一次性转换size个byte

   skip=blocks    从开头忽略blocks个ibs大小的块

   seek=block    从开头忽略block个obs大小的块

   count=n           复制n个bs

   conv=conversion       用指定的参数转换文件

   conversion转换参数:ascii 转换EBCDIC为ASCII

                                      ebcdic转换ASCII为EBCDIC   

          lcase把大写字符转换为小写字符 

              ucase 把小写字符转换为大写字符

              nocreat  不创建输出文件

              noerror 出错时停止

              notrunc 不截断输出文件

           sync 把每个输入块填充到ibs个字节,不足部分空(nul)字符补齐

           fdatasync  写完成前,物理写入输出文件

           

raid 级别   独立的磁盘冗余阵列

raid 0 ,数据分半写

读写性能快

不允许损坏任何一个硬盘,没有容错性

最少磁盘数1+

raid 1   镜像,备份关系

同时写一样的数据

有容错性,读提升性能,磁盘利用率只能达到50%

数据是同步的,如果要删除,都删。

raid 4

至少3块硬盘组合,有容错性,磁盘利用率高75%

第四个硬盘存放校验位,不是数据

raid 5

读写性能提升,有容错能力,只允许一块硬盘损坏,最少磁盘3,3+

校验位的位置换了,磁盘利用率n-1

raid 6

两个校验位,至少4块硬盘,n-2,有容错能力,允许最多两块硬盘损坏,

raid 10   相比之下,raid 10 会更好

先把两个硬盘做成raid 1 ,再把两组raid 1 合成一个raid 0

性能提升,有容错性,每组最多只能坏一块,最少磁盘4,4+

raid 01 

先把两个硬盘做成raid 0 ,再把两组raid 0 合成一个raid 1

每组只能坏一块,磁盘利用率50%

 

逻辑卷管理器(LVM)

        是一种逻辑上的管理方式,把硬件逻辑的组合在一起

        多块硬盘或者分区组合在一起,叫VG。(volume group 卷组)逻辑上的大硬盘,

lv 逻辑卷是从卷组中取出一块空间,

(逻辑卷实现过程:拿大小不一的块设备,先把他变成物理卷(pv),把大小不一的加入到卷组(vg),再创建逻辑卷(lv) 。)

实现过程

       将device指定为物理卷

    用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(physical extent  PE)来定义的

     在物理卷上创建的逻辑卷,是由物理区域(PE)组成

   可以在逻辑卷上创建文件系统并挂载

依赖包:lvm2

pvcreate    创建物理卷

pvs 查看现有的物理卷

pvremove 删除物理卷

 -f 强制创建物理卷

-u 指定设备的UUID

-y 所有的问题都回答yes

-Z 是否利用前四个扇区

 

pvdisplay  显示详细的物理卷信息

 

vgcreate    -s PE大小   卷组名   空闲分区 

vgs 查看卷组

vgextend   扩容卷组

vgreduce  (减少)  -a 如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷  

vgremove -f 强制删除

vgdisplay  查看卷组详细信息

  

 

lvcreate    -L 大小  -n   逻辑卷名   卷组名   

lvs 查看逻辑卷

lvextend 扩展逻辑卷空间

lvchange 更改逻辑卷的属性

lvresize     调整逻辑卷空间大小

lvdisplay  查看逻辑卷详细信息

PE 在逻辑卷里换名字叫LE

-n   指定逻辑卷名

-l    指定PE大小    50%free

-L   #  PE大小,必须是4M的整数倍,指定卷组(MB,GB,TB)

 

PE   物理盘曲,以PE来扩展,以PE为单位,一个PE4M

创建文件系统,挂载,(写设备名,UUID都可以)

清理缓存   /proc/sys/vm/drop_caches    

 

逻辑卷扩容和缩容

从卷组空间扩展

lvextend   -l   扩容到多少个PE              +50%free

      -L   扩容的容量

       -r   同步文件系统,一步到位, 

resize2fs   调整文件大小,用来扩容或缩小位于设备上的已卸载的文件系统, 只支持ext4       扩容之后需要指定文件系统,同步文件系统

-f  强制执行resize操作

xfs_growfs  只支持xfs

缩减逻辑卷

lvreduce   -L 指定大小

缩容必须是离线缩容,先取消挂载

缩容前先做备份

xfs不支持缩减

实现过程:1.取消挂载   2.检查文件系统完整性  3.缩减文件系统   4.缩减逻辑卷   5.挂载

pvmove  移动

移动的是空间,把空间搬到其他的空间

vdreduce    移除卷组

pvremove    移除物理卷

 

 

 

 

 

逻辑卷快照

工作逻辑:只是创建空间,并不真实创建,创建快照不备份,改变某个文件只存放最早版本,,快照里面只是存放改过的数据,需要指定快照的名称和大小

 

posted @   家购诗  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示