01-存储管理
存储的介绍
- 硬盘是计算机中主要的存储设备
- 传统磁盘分区与逻辑卷管理
- 事前合理规划很重要
- 对磁盘的所有操作都要小心小心再小心
磁盘空间用量相关命令
1 | df -h |
1 | df -i # 可以查看inode |
1 | sudo du -h # 可以查看目录下所有文件的大小 |
1 | sudo apt install ncdu # 可以查看磁盘空间使用情况 |
磁盘分区格式
添加硬盘
步骤
磁盘设备名称
1 | /dev/sda/ |
硬盘分区
1 | sudo fdisk -l # 查看硬盘分区情况 |
Linux文件系统格式
- ext4
- xfs
1 | # Linux下ext4格式使用最多, XFS格式适用于大空间、多文件、数据库 |
挂载
1 | /etc/fstab # 自动挂载 |
分区
1 | sudo fdisk /dev/sdb |
- MBR分区,传统分区格式,最大四个主分区,2T容量限制
- GPT分区, 现在主流分区标准,128个主分区,无容量限制
格式化分区
1 | sudo mkfs.ext4 /dev/sdb1 # mkfs.格式 |
挂载分区
1 | # 两个挂载目录:/mnt ,一般挂载硬盘 /media , 一般挂载光盘 |
注意:这种方式挂载重启就消失了
自动挂载
编辑配置文件使得重启之后自动挂载
1 | sudo vim /etc/fstab |
查看UUID:
1 | blkid |
swap管理
什么是swap
我们都知道,一台计算机在运行程序的时候,需要把程序加载到内存供CPU调用和执行,但是每一台计算机的物理内存都是有限的。当内存不够时,CPU处理数据的时候会变慢。当物理内存不够,而需要加载和计算的数据越来越大时,可能还造成计算机的死机。
虽然在今天来说,内存越来越便宜,但是从性价比上,内存的成本还是要高于硬盘的。
当你的计算机内存在程序运行过程中被耗尽时,我们可以使用swap来临时在硬盘存储上开辟一块空间,临时的当内存来使用。这样就可以使得内存不足的情况得以缓解。当然硬盘的速度还是比不上内存的,即使这样,硬盘的价格还是要比内存便宜许多的。我们在硬盘上临时开辟一些空间,在物理内存不够时,临时充当一下内存的角色,存储一些在内存中相对不活跃的数据,转储到swap分区里面去,在内存里面保持这一些热点的数据,使得CPU更快的计算调用。
swap分区适用于配置较低的主机。
swap介绍
关于swap的争论
- 现如今主机的配置都比较高,swap分区到底需不需要?
- 需要的话,分配多少才合理?(2-16g)
- 早期的ubuntu是生成一个单独的swap分区(用来存储内存的交换文件),现在将swap分区转变为一个swap文件。类似于windows下的页面交换文件
理想状态下的swap应该无事可做
- 大量的swap空间使用意味着服务器已疲于奔命
- 查看内存以及swap使用 :
free -h
某些云主机默认没有swap
swap文件
想要扩大swap文件,思路就是先创建新的swap文件,然后使用新swap文件,删除旧的swap文件
1 | sudo fallocate -l 4G /swaptest # 创建4G大小的swap文件 |
修改成功!
swap分区
1 | sudo fdisk /dev/sdb |
LVM管理
Logical Volume Manager(逻辑卷管理)
LVM管理介绍
无需重启计算机,可以灵活调整硬盘空间大小
- 硬盘分区太大浪费,太小无法满足业务发展需要
- 将传统的硬盘分区逻辑的组合为资源池,按需分配
一些概念介绍
- Physical Volumes (PV),物理卷
- Volume Groups (VG),逻辑的、虚拟的概念。卷组,池化,由一个或者多个PV组成,可扩展和收缩,可进而被分割成Logical Volume。
- Logical Volumes (LV) 逻辑卷(基本分区、RAID),类似于普通硬盘对应的分区概念,LV可格式化为具体的文件系统
- Physical Extent (PE),
- PV被划分成 PE的基本单元,且具有唯一的编号
- 是可以被LVM寻址的最小单元
- PE的大小是可以配置的,默认是4MB
- Logical Extent (LE)
- 逻辑卷被划分为被称为LE(Logical Extents)的可被寻址的基本单位
- 在同一个卷组中,LE的大小和PE是相同的,并且是一一对应的
分区的原则
- 为/boot、swap、/ 创建标准分区,不需要使用LVM管理
- LVM管理的一般是文件存储。
LVM使用
安装包:
1 | sudo apt install lvm2 |
创建物理卷
1 | sudo pvcreate /dev/sdb # 创建物理卷 |
创建卷组
1 | sudo vgcreate vg01 /dev/sdb /dev/sdc /dev/sdd # 创建卷组,指定硬盘 |
创建逻辑卷
1 | sudo lvcreate -n lv01 -L 1G vg01 # 创建逻辑卷lv01,从卷组vg01先分配1G空间 |
逻辑卷缩小
不使用LV扩展时,可以回收空间。
1 | sudo umount /dev/vg01/lv01 # 必须下线 |
快照使用
可以对lv逻辑卷做一个快照,与虚拟机的快照类似,但做不到虚拟机快照的程度。
- 故障时可退回
- 临时机制,不可视为备份
- 本地保存,安全性无法保证
- 系统根目录使用快照可用于测试不定更新
- 测试完成合并,并删除快照
- 创建快照等同于创建一个新的LV
- 初始不占空间,但文件发生修改时原来的块数据被拷贝到快照LV中
- 回退时,将快照中原始数据覆盖当前快照已被修改的块
1 | sudo lvcreate -s -n s01 -L 500M vg01/lv01 # 创建快照 |
恢复快照
1 | sudo lvconvert --merge vg01/s01 # merge就是合并 |
移动物理卷数据
当磁盘性能不足或者老旧等因素需要更换硬盘,提前迁移到其他硬盘
1 | sudo pvmove -n lv01 /dev/sdb /dev/sdc -i 1 # 每隔1小时显示迁移进度 |
RAID高级管理
RAID(Redundant Array of Independent Disks)
带有冗余机制的磁盘阵列
RAID技术分类
硬RAID
- 特殊的控制器管理硬盘,在操作系统看来只有一个驱动器
- 直接插卡,不占用操作系统资源,它自己有CPU、内存等硬件。
软硬盘
- 操作系统知道每一个硬盘,并且直接管理和使用它们
- 基于mdadm驱动,性能超过某些“硬RAID”
FakeRAID
- 低端服务器工作站结合BIOS设置、多通道控制器、软件驱动实现RAID的方法
- 操作系统管理RAID,适用于多系统,性能弱于软RAID
软RAID类型
RAID 0 (条带卷)
- 数据一块一块的写入n个硬盘,没有容错机制。
- 当有一个大的数据要写入硬盘,可以同时向n个硬盘写入,读取数据也是这样。读写效率比较高。
RAID 1(镜像卷)
- 只能由两块硬盘组成,两块硬盘的容量相同,存放的数据也是相同的。
- 写入数据,把相同的数据写入两块硬盘。读取数据,只需要读取一块硬盘
- 如果有一个硬盘坏掉了,另一个有完整的数据备份
- 磁盘利用率 50%
RAID 5(带奇偶校验的条带卷)
至少要有三块硬盘上,假设有4块硬盘。数据一条条写入,第一条写到第一块硬盘上,第二条写到第二块硬盘上,第三条写到第三块硬盘上,第四块硬盘不会写数据,而会写奇偶校验值。当第二块硬盘数据损坏,可以通过第一和第三块硬盘同一条带位置上的数据和第四块硬盘的奇偶校验值,把第二块硬盘的数据算出来。
第四条写到第一块硬盘上,第5条写到第2块硬盘,第6条写到第4块硬盘,奇偶校验值写到第3块硬盘。
磁盘利用率:n-1 /n,容错只能坏一块硬盘
RAID 6(双奇偶校验的条带卷)
- 与RAID5类似,可以拿出2块硬盘来存储奇偶校验值。
- 磁盘利用率:n-2 / n,可以有两块硬盘的损坏
RAID 10 / 01 (0 + 1 / 1 + 0)
将RAID0和RAID1的结合,RAID10是先做RAID1再做RAID0
磁盘利用率是50%,容错的硬盘数量是n/2
Degraded
软RAID中有磁盘损坏时,置为降级状态
Spare盘
也叫备份盘,平时空闲的,不存放数据,只是一直在帧听着RAID阵列,如果有一个硬盘坏了,spare盘立刻顶上去
RAID管理
软RAID基于mdadm驱动实现
1 | sudo apt install mdadm |
常用的管理命令
1 | cat /proc/mdstat # 查看RAID盘信息 |
替换硬盘后安装Grub
1 | sudo grub-install /dev/md0 |
格式化和加载
1 | sudo mkfs.ext4 /dev/md0 |
链接
符号链接(软连接)和硬链接
- 存放在计算机哪怕再小的数据,都会占用一个最小的数据存储单元 inode值
- inode:存放文件元数据的数据对象,表现为
创建硬链接
1 | ln fileA fileB # 创建硬链接 |
- inode值相同
- 目录不能创建硬链接
- 不能移动硬链接到不同分区,不能跨设备
创建软链接
- 相当于windows上的快捷方式
- 不共用inode值
- 可以跨设备创建
1 | ln -s file1 file2 # 创建软链接,注意相对路径和绝对路径 |
磁盘加密
LUKS:Linux Unified Key Setup
- 不依赖于操作系统的磁盘分区加密规范,磁盘级别的加密
- 后端加密方法dm-crypt(Linux系统中的内核驱动)
加密算法
- aes
- serpent
- blowfish
- twofish
注意:/boot 分区不能加密,/boot分区里面存储的是引导记录,如果加密,操作系统就起不来了。加密会对性能有影响。
数据保密
清除所有数据
1 | ls /dev/zero # 零生成器,不停地生成0 |
磁盘加密
1 | sudo apt install cryptsetup # 安装软件包 |