Linux磁盘管理
磁盘简介

硬盘是由一片或多片带有磁性的铝合金制的盘片构成,是种大容量、永久性的外部存储设备
组成:盘片、马达驱动、缓存、控制电路、接口
磁盘逻辑结构
磁道:由内到外的同心圆,磁头能够不动检测到的区域
扇区:半径组成的扇形磁道存储区。
柱面:多个盘片的统一磁道
虚拟机添加新硬盘
硬盘传统设别
固态硬盘
nvmen磁盘号[p1-10]
添加新硬盘
在虚拟机设置里面添加,然后选择硬盘

创建虚拟机磁盘,选择磁盘位置,点击完成



硬盘分区概述
MBR分区
MBR(Master Boot Record,主引导记录)包含硬盘一系列参数和一段引导程序,硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序
MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存
MBR位于整个硬盘的0磁道0柱面1扇区
主引导扇区512B
MBR=446B 【446:主引导记录,负责找到系统的启动分区】
DPT(Disk Partition Table硬盘分区表)=64B 【64:mpt主分区表,记录主分区信息】
最后两个字节“55,AA”是分区的结束标志 【2=55aa 硬盘的有效性标识 bios】
MBR分区类型
主分区(primary partition)
一块硬盘最多4个主分区,主分区不可以再进行二次分区
主分区可以直接建立文件系统,存放数据
可以用来引导、启动操作系统
扩展分区(extended partition)一块硬盘最多一个扩展分区,加主分区最多4个
不能创建文件系统
可以划分逻辑分区
逻辑分区(logical partition)
可以创建文件系统,存放数据
逻辑分区的数量没有限制。
支持的分区数量:4个主分区或者3个主分区1个扩展分区 【Partition1—4】

为什么MBR最多只能有4个主分区: 因为分区表占据64个字节,其中每个分区的信息占用16个字节,分区表里面可以记录四个分区信息描述。
GPT分区
产生原因
MBR分区表中最高支持磁盘容量为2.2TB
MBR分区表中,没有备份机制,分区表被干掉则磁盘全部死光光
MBR中存储开机管理程序的容量只有446B,无法存储较多内容
概念
GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式。
GPT分区表使用LBA(Logical Block Address)逻辑区块地址来记录磁盘引导、分区的相关信息
LAB区块大小(512B-4KB),默认为512B
LAB区块共68个,前34个记录分区信息,后34个进行备份

不在区分主分区与其它分区,默认情况下,GPT最多可支持128个分区
支持大于2.2TB的总容量及大于2.2TB的分区,最大支持 18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)
GPT分区机制在较老的BIOS中不能识别,则提供了一个UEFI (Unified Extensible Firmware
Interface)统一的可扩展固件接口,来取代传统的BISO,又称为UEFI BIOS,UEFI使用C语言编写,支持较多的平台。
fdisk管理分区
参数:命令(输入 m 获取帮助)
# fdisk /dev/sda
d delete a partition 删除
l list known partition types 列出设备类型
n add a new partition 添加
p print the partition table 打印分区表 【要先选择n添加才能打印创建】
【系统中使用分区表是mbr的品多只能划分4个主分区,负责会报错,如里需要多全4个分区必须建立扩展分区来划分逻辑分区】
e 直接吧所有分区剩余容量都给扩展分区
t change a partition type 更改设备类型
w write table to disk and exit 保存
q quit without saving changes 退出不会保存 【wq才是退出保存】
g create a new empty GPT partition table 启用gpt分区方式
o create a new empty DOS partition table 启用mbr分区方式
# cat /proc/partitions 系统中识别的分区信息
# partprobe 【同步磁盘中新的分区表到内核】
# mkfs.xfs /dev/sdc1 格式化硬盘
# blkid 【查看格式化文件,TYPE="xfs"表示格式化为xfs文件系统】
df命令
# df 显示当前设备所有的挂载情况

df -参数 目录或文件名 【df -参数 也可以显示】
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KB的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB,MB,KB等格式自行显示
-H:以M=1000K替代M=1024K的进位方式
-T:连同该分区的文件系统名称(例如ext3)也列出
-i:不用硬盘容量,而以inode的数量来显示
# 由于df主要读取的数据几乎都是针对整个文件系统,因此读取的范围主要是在Super block内的信息,所以这个命令显示结果的速度非常快速。
lsblk命令
作用:lsblk可以查看磁盘信息
lsblk 参数 设备名
-d :仅列出硬盘本身信息,不显示分区信息
-f :列出磁盘的内的文件系统名称
-i : 使用ASCII码格式输出信息
-t :显示磁盘的详细信息
-p :显示设备完整名称
mount命令
mount [参数 文件系统类型] 设备名 挂载点目录
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-t:指定文件系统类型
-o 特殊设备选项:挂载设备时使用逗号分割输入额外参数
【只读挂载分区】
# mount -o remount,rw /mnt/ 【remount表示重新挂载,rw是用rw参数进行挂载】
umount命令
作用:卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载
umount 参数 设备名称[挂载点]
-f :强制卸载 【设备被使用时不能卸载】
可以用fuser命令查看
# fuser -m /dev/sdc1 【查看分区工作ID】
# fuser -vm /dev/sdc1 【查看详细内容】
# fuser -kvm /dev/sdc1 【强制卸载并且显示信息】
开机挂载
作用:由于mount命令挂载是临时的,修改/etc/fstab配置文件以实现开机自动挂载。
# reboot 【重启虚拟机,这个时候# lsblk显示没有挂载】

# vim /etc/fstab 【配置开机自动挂载】

没有启用文件# mount -a显示结果:
mount: (hint) your fstab has been modified, but systemd still uses
the old version; use 'systemctl daemon-reload' to reload.
# systemctl daemon-reload 【启用文件实现开机自动挂载】
# mount -a
# df显示结果:

特殊挂载
挂载大文件
当只有一个分区,剩余空间还很大,自由空间很小不能进行新的分区,则可以在当前分区制作一个大文件,在进行挂载,相当于一个新的分区来使用。
例:建立根目录下新建1GB大文件,挂载并开机挂载使用
[root@server ~]# dd if=/dev/zero of=/bigfile bs=1M count=1024
【dd表示截取数据,if inputfile生成文件的数据模板,/dev/zero 无限空设备。 of outputfile 生成的新文件的名称。 bs blocksize1块大小。 count=1024 生成文件最终包含1024个bs】
# mkfs.ext4 /bigfile 【格式化硬盘,不格式化无法挂载】
# mount /bigfile /media/
# df运行结果:
/dev/loop0是回环设备,用来模拟系统真实设备的文件
增加swap分区
swap分区:类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为swap毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢。
# fdisk /dev/sdc 【fdisk管理分区sdc】
# mkswap /dev/sdc2 【# swap格式化】
# swapon -a /dev/sdc2 【激活swap格式】
# swapon -s 【查看swap激活状态】
# vim /etc/fstab 【配置sdc2开机自动挂载】
pri=0表示配置挂载等级【数值越高越优先】
注意:可以使用可以使用 swapoff命令停用部分swap空间,如 # swapoff /dev/sdc2
运行结果:
# swapon -a /dev/sdc3 -p 0 【修改挂载等级为0】
# swapon -s 运行结果:
结束挂载需要先swapoff停止再fdisk /dev/sdc里面用d删除删除
du命令
du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB。
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候du与df就一致了。
格式:du -参数 文件或目录名
-a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
-h : 以人们较易读的容量格式(G/M)显示;
-s : 列出总量,而不列出每个个别的目录占用了容量;
-S : 不包括子目录下的总计,与-s有点差别;
-k : 以KB列出容量显示;
-m : 以MB列出容量显示。
在磁盘中查找文件
# cd /mnt/
dd if=/dev/zero of=/mnt/lee1 bs=1k count=10
dd if=/dev/zero of=/mnt/lee2 bs=2k count=10
dd if=/dev/zero of=/mnt/lee3 bs=3k count=10
find命令查找文件
find
-name #通过名字方式查找
# find /mnt -name lee*
-user #通过文件拥有者身份查找
# find/mnt-user ming 【查找用户为ming的文件】
-group #通过文件拥有组身份查找
# find/mnt-group ming 【查找组为ming的文件】
-type (f d s b l) #通过文件类型查找
# find /mnt -type d 【通过d目录查找】
-perm (222 /222 -222) #通过权限查找
【- 444表示找所有权限不满足的,3个条件:所有人可读,所有组可读,其他人可读。
777是9个条件,002是1个条件,/表示满足任意一个条件】
# find /mnt -perm /222
/mnt/lee5 不满足,没有一个条件有w
-exec #处理查找出的文件
-maxdepth 1 #设定查找深度为1
# find /mnt -maxdepth 2 name lee* 【最深查找路径只能是2层】
-mindepth 1 #设定查找浅度为1
# find /mnt -mindepth 2 name lee* 【最浅的查找路径2层】
-cmin (1 /-1 /+1) #文件的最后一次更改时间 【+1一分钟前,-1一分钟内】
# find /mnt -cmin 1
-size (+/-) 1M #通过文件大小查找 【+ 表示大于,- 表示小于】
# du -sh /mnt/*
-o #条件或
# find/mnt -user ming -o -group ming
-a #条件与
# find/mnt -user ming -a -group ming
-not #条件非
# find/mnt -not -user -ming 【查找用户不为ming的文件】
# ls /mnt/ -lR
# find /mnt -perm /444 -exec chmod a-r {} \; #{} 表示find命令查找出来的结果
设备中的链接
硬盘数据分类 【# watch -n 1 ls -li /mnt/ /boot/ 监控代码】
用户数据(user data):即文件的数据块(data block),存储数据真实空间
元数据(metadata):存储文件附加属性,如:文件的大小、创建的时间、所有者等信息
硬连接
原理:linux系统允许多个文件指向同一个inode,即允许一个文件拥有多个有效地路径名
理解:硬连接就是指向原始文件inode的指针
硬链接不可以跨分区:
硬链接不支持目录链接:
软连接
原理:软连接是一种符号连接,类似于windows的“快捷方式”,仅包含所连接的路径名
# ln -s /mnt/lee /boot/test
删除源文件 # rm -fr /mnt/lee 链接不会消失,但是访问不了
软硬连接的区别
硬连接中源文件与连接文件公用一个inode号,是同一个文件,软连接中源文件与连接文件拥有不同inode号,是2个不同的文件。
软连接的指向关系可以查看,硬连接不可以查看。 链接的连接数不同,软连接数不会增加。
文件大小不同,硬连接文件大小与源文件一样。
软连接不受任何文件系统的影响,任何用户都可以创建指向目录的软连接,硬链接不行。
软连接可以跨分区,硬链接不行。 硬链接可以删除源,软连接不行。
RAID 【磁盘阵列】
当今CPU性能每年可提升30%-50%但硬盘仅提升7%。
硬盘在服务器中需要持续、频繁、大量的I/O操作,故障机率较大,则需要对硬盘进行技术改造,提升读写性能、可靠性。
1988年,加利福尼亚大学伯克利分校首次提出并定义了RAID技术概念。
原理:RAID(Redundant Array of Independent Disks)将多个硬盘设备组成一个大容量、安全更好的磁盘阵列,并将数据切割成多个片段后分别存储到不同的物理硬盘上,利用分散读写技术来提升硬盘性能,同时也备份了多个副本到不同硬盘中,拥有了备份冗余功能。
常见RAID组建方案
RAID0
原理:把至少2块硬盘通过硬件或软件方式串联,组成一个大的卷组,并将数据依次写入到各个硬盘。
优点:数据同步传输,读取/写入分开,性能大大提升。
缺点:若任意一块硬盘故障会导致整个系统的数据损坏,无备份冗余能力错误修复能力。
总结:使用率100%至少2块磁盘才能使用,优点是提升磁盘的读写速度,缺点是不安全。
RAID1
产生原因:若生产环境对硬盘的读写速度没较大要求,但希望增加数据安全性时可使用RAID
原理:把至少2块硬盘绑定起来,写入数据时将数据同时也写入另一或多块硬盘中,
本质:多个硬盘作为镜像备份
优点:数据备份冗余安全性大大提升
缺点:硬盘利用率下降
总结:是镜像,使用两块磁盘,一式两份的方式,支持容错,冗余,数据安全不丢失,缺点是速度不快,使用率50%,成本较大。
RAID5
产生原因:兼顾“读写速度”、“数据安全”、“成本”的一种折中方式
原理:需至少三块硬盘,将数据分块存储到不同硬盘中,硬盘中必须存储其它一个硬盘的parity(奇偶校验信息)
优点:兼顾性能,通过“奇偶校验”替代“镜像备份”
缺点:硬盘数据安全性较低
总结:使用率(n-1)/n*容量,磁盘坏了会立即补上,数据会恢复
RAID10 (主流)
本质:RAID1+RAID0 的组合
原理:至少需要4块硬盘,先制作两两的RAID1阵列,以保证安全性,在两两制作RAID0,以提高读写速度
优点:兼具速度和安全性 缺点:成本较高
mdadm命令
作用:管理系统中的RAID磁盘阵列
配置磁盘列阵
# fdisk -l 【查看磁盘划分】
# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 /dev/nvme0n5 【配置磁盘列阵】
# mdadm -D /dev/md0 【查看磁盘列阵信息】
# mkfs.xfs /dev/md0 【格式化】
# mkdir /timinglee
# mount /dev/md0 /timinglee 【挂载】
# df 运行结果:
【# watch -n 1 "cat /proc/mdstat ; df -h /timinglee" 监控代码 】
格式:mdadm [模式] <RAID设备名> -参数 [成员设备名称]
模式: -a :检测设备名称
-n :指定硬盘数量
-l :指定RAID级别
-C :创建RAID
-v :显示过程
-f :模拟设备损坏
# mdadm /dev/md0 -f /dev/nvme0n1 【模拟nvme0n1损坏】
-r :移除设备
# mdadm /dev/md0 -r /dev/nvme0n1
-Q : 查看摘要
-D :查看详细信息
-S :停止RAID磁盘阵列
# umount /dev/md0 【卸载分区】
# mdadm -S /dev/md0 【停止的阵列是临时的,重启还是会启动】
# mdadm --zero-superblock /dev/nvme0n{1..5} 【彻底卸载阵列】
重启设备# reboot后运行# mdadm -D /dev/md0 运行结果:
管理逻辑卷
工作原理
硬盘分区或部署为RAID后在修改分区大小时就非常不容易,此时用户随着实际的需求变化而动态调整硬盘分区大小时受到限制,无灵活性。
LVM(Logical Volume Manager )允许用户对硬盘资源进行动态调整。
认识Linux逻辑卷
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。
通过LVM技术,屏蔽了磁盘分区的底层差异,管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统
管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
假设有三块磁盘/dev/sdb、/dev/sdc和/dev/sdd用来划分逻辑卷。
LVM基本概念 【建立物理卷池,要用多少就重池子取用多少容量储存】
PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可自定义。
逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷,可以属于同一个卷组,也可以属于不同的多个卷组。
部署逻辑卷
常用的LVM部署命令
【# watch -n 1 "pvs;vgs;lvs;df -h /timinglee " 监控代码】
# lsblk
# pvcreate /dev/nvme0n1p1 【创建物理卷】
# vgcreate vg0 /dev/nvme0n1p1 【创建物理卷组,存入物理卷】
# lvcreate -L 10240M -n lv0 vg0 【创建逻辑卷】
# mkfs.xfs /dev/vg0/lv0
# mount /dev/vg0/lv0 /timinglee/ 【挂载】
扩展逻辑卷
# lvextend -L 15000M /dev/vg0/lv0 【扩展逻辑卷】
但此时文件系统还没有扩容
# xfs_growfs /dev/vg0/lv0 【文件系统扩容】
扩展卷组
# pvcreate /dev/nvme0n2p1
# vgextend vg0 /dev/nvme0n2p1 【扩展卷组】
# lvextend -L 25000M /dev/vg0/lv0 【扩展逻辑卷】
此时逻辑卷大小还没有改变
# xfs_growfs /dev/vg0/lv0
扩展拉伸卷组时候,设备并不需要卸载,全程支持热更新。
文件缩减
# blkid 【查看文件格式化】
xfs文件系统不支持缩减,要先取消挂载,删除文件
# umount /timinglee
# mkfs.ext4 /dev/vg0/lv0
# mount /dev/vg0/lv0 /timinglee/
# lvextend -L 28000M /dev/vg0/lv0 【扩展逻辑卷】
# df -h /timinglee 运行结果:
设备缩减是不支持在线缩减的,需要取消挂载,然后卸载文件再缩减
# umount /timinglee
# e2fsck -f /dev/vg0/lv0 【对文件系统进行检测,必须要怎么做才可以执行resize2fs命令】
# resize2fs /dev/vg0/lv0 5000M 【 resize2fs方式缩减文件系统】
# lvreduce -L 5000M /dev/vg0/lv0 【缩减设备大小】
# vgreduce vg0 /dev/nvme0n1p1 【缩减卷组,如果正在被使用则不可以缩减】
# pvmove /dev/nvme0n1p1 /dev/nvme0n2p1 【迁移卷组数据】
# vgreduce vg0 /dev/nvme0n1p1
# pvremove /dev/nvme0n1p1 【删除物理卷,这个时候才可以彻底删除】
删除磁盘的划分和物理卷
# vim /etc/fstab 【删除开机自动挂载】 # umount /timinglee 【取消挂载】
# lvremove /dev/vg0/lv0 —删除逻辑卷
# vgremove vg0 —删除卷组
# pvremove /dev/nvme0n2p1 —删除物理卷n1
# pvremove /dev/nvme0n1p1 —删除物理卷n2
# fdisk /dev/nvme0n1 【选d删除磁盘分区】 # fdisk /dev/nvme0n2
删除结果: