- 添加存储
- 识别存储
- 存储分区
- 分区格式化
- 分区(永久)挂载
磁盘存储
| 设备号 |
作用 |
举例 |
| 主设备号 major number |
表示设备类型 |
sda |
| 次设备号 minor number |
标识同一类型下的不同设备 |
sda1,sda2 中的 1,2 |
设备文件类型:
磁盘设备命名

添加磁盘不重启识别
1
2
3
4
5
6
7
8
9
|
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
echo '- - -' > /sys/class/scsi_host/host2/scan
# host 默认是32个
for i in $(ls /sys/class/scsi_host/)
do
echo '- - -' > /sys/class/scsi_host/$i/scan
done
|
硬盘
支持 Nvme 协议硬盘速度是最快的
SATA:SATA 数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线 -
SAS:SAS 是一整条线,数据端口与电源端口是一体化的,SAS 中是包含供电线的,而 SATA 中不包 含供电线。SATA 标准其实是 SAS 标准的一个子集,SATA 硬盘可以插入 SAS 主板上,反之不行。
1
2
3
|
# 磁盘测速
dd | hdparm -t /dev/sda
dd | hdparm -t /dev/nvme0n1
|
LFF:3.5 寸
SFF:2.5 寸
CHS:24 bit
扇区:sector
柱面:cylinder
分区:Partition
最大寻址空间:8 GB
前 10 位表示 cylinder,中间 8 位表示 head,后面 6 位表示 sector
LBA:48 bit
144 petabytes
LBA = (((C heads-per-cylinder) + H) sectors-per-track) + S -1
必看命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 查看设备信息
lsblk
lsblk -f # 文件系统 filesystem
lsblk -p # 设备全路径 path
# 查看磁盘分区
fdisk -l
# 查看块设备属性
blkid
# 查看磁盘容量 Disk Free
df -lh
df -Th
# 查看目录容量 Disk Usage
du -sh
# 文件复制与转换
dd
bs=size # 指定块的大小
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=N count=N
seek=n # 写时,跳过前面的n块
skip=n # 读时,跳过前面的n块
# 备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
dd if=/dev/sdx | gzip >/path/to/image.gz
|
存储分区

磁盘分区的优点:
-
数据管理:通过分区,用户可以将不同类型的文件存放在不同的分区中,便于分类管理和查找。
-
系统安全:将操作系统和用户数据分别存放在不同的分区中,可以在系统崩溃或需要重装时保护用户数据 不受影响。
-
性能优化:合理的分区策略可以减少磁盘碎片,提高磁盘的访问速度和效率。
-
多操作系统支持:通过分区,用户可以在同一台计算机上安装并运行多个操作系统,满足不同的应用需 求。
| MBR:Master Boot Record |
GPT |
| BOIS |
UEFI |
| 4 个主分区 |
128 个分区 |
| 32 位的 LBA |
64 位 LBA |
| 最大可寻址的存储空间只有 2TB |
最大可寻址的存储空间只有 9.4ZB |
MBR:Master Boot Record
硬盘的第一个扇区(0 道 0 头 1 扇区)512bytes。

MBR 分区表最多支持 4 个主分区,或者 3 个主分区和 1 个扩展分区(扩展分区下可以创建多个逻辑分区)。
- 主分区:主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot 分区最好放在主分区上;
- 扩展分区是不能使用的,它只是做为逻辑分区的容器存在的,先创建一个扩展分区,在扩展分区之上创建逻辑分区;
- 我们真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中。

GPT

- 保护 MBR 区域: 位于磁盘的第一个扇区(LBA0),主要用于兼容性考虑。这个区域存储了一份传统的 MBR 信息,以防止不 支持 GPT 的硬盘管理工具错误识别并破坏硬盘中的数据。
- 容灾功能:磁盘的 “首尾两部分” 分别保存一份相同的分区表, 并有 CRC 校验位。
分区实践
1
|
partprobe # 来刷新分区表,使系统立即识别分区的变化,而无需重启。
|
fdisk:MBR 分区
1
2
3
4
5
6
7
8
9
10
|
fdisk <disk> # 进入分区页面
p # 打印分区情况
n # 添加分区
d # 删除分区
q # 退出
w # 保存更改
t # 更改分区类型
v # 检验分区
|
gdisk:GPT 分区
1
2
3
4
5
6
7
8
9
10
|
gdisk <disk> # 进入分区页面
p # 打印分区情况
n # 添加分区
d # 删除分区
q # 退出
w # 保存更改
t # 更改文件系统类型
v # 检验分区
|
非交互分区
fdisk,gdisk 都可以
1
2
3
4
5
6
7
8
9
10
11
12
|
# 1
echo -e "n\n\n\n\n\nw\ny\n" | gdisk /dev/nvme0n1
# 2
fdisk /dev/sdb <<EOF
n
+50G
w
EOF
|
parted 分区
通常用于处理大型磁盘,特别是 在需要更复杂的分区布局时。
文件系统基础
存储设备上组织文件的方法。存储文件的方法和数据结构。
1
2
3
4
|
# 查看当前操作系统支持的文件系统
ls /lib/modules/$(uname -r)/kernel/fs
# 查看当前操作系统可用的文件系统;被选择了才是可用的。
cat /proc/filesystems
|
linux 文件系统
|
|
| ext4 |
最大 16TB 文件;适合中小型数据存储、个人计算机、一般的服务器环境,或那些包含大量小文件的系统。它的兼容性较高,稳定性和易用性较好,适用于大多数 Linux 用户。 |
| xfs |
最大 8EB 文件;适合大型数据库、数据仓库、高并发环境和需要处理大文件的场景,特别适合企业级或数据密集型的服务器应用。XFS 的并发性和快速恢复使其在大规模、高性能环境中表现优异。 |
| swap |
虚拟内存 |
| iso9660 |
光盘 |
| tmpfs |
基于内存的文件系统,通常挂载到/tmp |
win 文件系统
|
|
| FAT32 |
4GB 的文件 |
| NTFS |
16EB 的文件 |
网络文件系统
NFS:Network File System,即网络文件系统
RAW:裸文件系统
没被格式化
直接对磁盘进行读写
- 数据库存储:一些数据库系统(如 Oracle)允许将数据文件直接存储在裸设备上,以提高 I/O 性能和数 据安全性。这是因为裸设备可以绕过操作系统的文件系统层,减少数据读写时的系统开销。
- 特定应用需求:某些应用程序可能需要直接访问磁盘硬件,以实现特定的功能或性能要求。在这种情况 下,裸设备提供了一个直接访问磁盘的途径。
FAT 文件系统
便携式存储设备(如 U 盘、SD 卡)
文件系统管理
格式化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-L # 标签 Lable
mkfs -t TYPE <device> # 默认ext2
mke2fs -t TYPE <device> # 默认ext2
# mkfs -t TYPE的简写
mkfs.ext4
mkfs.xfs
mkfs.vfat
tune2fs # 更改ext文件系统参数
dumpe2fs # 显示ext文件系统信息
xfs_info # 显示xfs文件系统信息
e2label # 更改ext文件系统标签
findfs # 查找分区
|
挂载
/etc/fstab:自动挂载文件
1
2
3
4
5
6
7
8
9
|
mount
mount -a # 挂载/etc/fstab中的设备
umount
-f # 强制
-l # 延迟卸载,等分区不忙时
-n # 不写入日志
findmnt # 查找
|

持久挂载
- 打开/etc/fstab 文件
- 添加挂载信息
- 保存并关闭文件
- 验证挂载配置
1
2
3
4
5
6
7
8
9
10
|
# 应该更改了/etc/fstab,所以使用命令让 systemd 重新加载其缓存的配置
systemctl daemon-reload
mount -a
#fstab新增条目有效,如果在中间修改了挂载选项,则此命令无效
mount -o remount <device>
# 删除|修改 /etc/fstab 条目不生效的场景,上面两条命令不生效,先umount再挂载
umount <device>
# 删除fstab条目后,使用umount卸载
|
1
2
3
4
5
|
<文件系统设备> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>
UUID=6e9983be-5ce1-4c50-9a8b-2d5f07164fb6 /home ext4 defaults 1 2
# 挂载选项
# dump 是否备份 1:每天;2:隔一天
# fsck 是否进行文件系统检查 0:不检查;1:启动前检查(根文件系统使用);2:启动后检查
|

文件系统异常修复
一定不要在挂载状态下执行下面命令修复
1
2
3
4
5
6
|
fsck # ext
-a # 自动修复
-r # 交互修复
e2fsck
xfs_repair
|
swap:交换分区
防止 因内存不足而导致的系统崩溃或性能下降。
配置过多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖 内存泄露。内存泄露是指程序运行时分配了内存却没有释放,导致系统的内存使用量不断增加。
为 优化性能,可以将 swap 分布存放, 或 高性能磁盘存放。

swap 开启与关闭
1
2
3
4
5
6
|
# 开启swap
swapon -a
swapon -s # 显示已使用交换设备的摘要
swapon -p # 定制swap优先级
# 关闭swap
swapoff -a
|
/proc/sys/vm/swappiness 的值越高,表示内核越倾向于使用 Swap;值越低,表示内核越倾向于保留物理内存。
创建 swap 分区/文件
centos 中,swap 通过分区实现
ubuntu 中,swap 通过文件实现
CentOS 和 Ubuntu 都支持使用 swap 分区和 swap 文件作为交换空间。
swap 分区 适合需要更高性能和稳定性的服务器和长期使用的系统。
swap 文件 更灵活,适合需要动态调整内存需求的桌面环境或开发环境。
swap 分区
1
2
3
4
5
6
7
8
9
10
11
|
# 创建一个分区给swap使用
gdisk / fdisk
# 格式化交换分区
mkswap <device>
# 应用
swapon -a
# 在fstab添加swap
UUID=a93dc00b-f6cc-4475-a665-f793d2eabd96 none swap defaults 0 0
|
swap 文件
1
2
3
4
5
6
7
8
9
10
11
|
# 创建一个文件给swap使用
dd if=/dev/zero of=/swap.img bs=1G count=3
# 格式化交换文件
mkswap <file>
# 应用
swapon -a
# 在fstab添加swap
/swap.img none swap sw,pri=-1 0 0
|
移动介质
挂载点通常 在/media 或/mnt 下 。
- 访问前,介质必须被挂载
- 摘除时,介质必须被卸载
- 按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB 等等)
1
|
lsusb # yum -y install dosfstools usbutils
|
RAID:磁盘阵列
HBA 卡(Host Bus Adapter)主机总线适配器,传输数据;虽然 HBA 卡可以集成 RAID 功能,但与专业的 RAID 卡 相比,这类 HBA RAID 卡的 RAID 性能通常较低,特别是在支持 RAID 5、RAID 6 等需要较高计算需求的情况下。
RAID 卡,数据保护与优化性能;
- IT 模式(Initiator Target),软件层面:卡不带磁盘阵列系统,需要进入系统使用软件重组。
- IR 模式(Integrated RAID),硬件层面:卡自带磁盘阵列系统,进入操作系统,已经组好 RAID。
提高 IO 能力,磁盘并行读写
提高耐用性,磁盘冗余算法来实现
硬 RAID 类型
| 名称 |
特点 |
| RAID-0 |
读写并行, 速度是最快 没有冗余功能,也不具备容错能力 |
| RAID-1 |
镜像(Mirroring) 它将数据同时写入两个磁盘,实现数据的完全冗余。 |
| RAID-4 |
奇偶校验码存放在独立的奇偶校验盘上 对数据按块访问 |
| RAID-5 |
分布式奇偶校验 综合性能最佳的数据保护解决 |
| RAID-6 |
与 5 类似 容错两个磁盘的故障 需要更多的磁盘空 间,成本更高,且写入性能相对较差。 |
| RAID-10 |
RAID-1+RAID-0 |
| RAID-01 |
RAID-0+RAID-1A |
| RAID-30|50|60|100 |
|
| JBOD |
大容量 将多个独立的磁盘驱动器安装在一个底板上,形成一个逻 辑上的大磁盘组。 |
| RAID7 |
独立存储计算机 价格高昂 性能最高 |
| RAID-2 |
汉明码(Hamming Code)校验 错误修正码 对数据按位访问 被淘汰 |
| RAID-3 |
把数据分 n 块,放在 n 个盘上,第 n+1 放校验容错信息 对数据按位访问 被淘汰 |

- 系统盘: Raid1
- 重要数据:Raid10 +热备盘 + CacheCade
- 一般数据,不做 raid
软 RAID:mdadm
multiple devices admin
标准的软件 RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)管理工具。
1
2
3
4
|
mdadm能够执行创建、管理、监控RAID设备的任务,它使用Linux中的md驱动。具体来说,mdadm具备
以下基本功能:
创建(create)RAID设备。 构建(build)RAID设备。 组装(assemble)RAID设备。
扩展(grow)RAID设备。 管理(manage)RAID设备。 监控(monitor)RAID设备。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mdadm <device>
-C # 创建
-A # 装配
-F # 监控
-D # 信息
-r # 移除
-a # 添加
-G|--grow # 调整参数
-S # 停止
-n N # 用N个块设备创建
-l N # RAID等级
-a {yes|no} # 自动创建
-c chunk_size # chunk大小
-x N # 热备份盘个数
cat /proc/mdstat
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 创建
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc -x 1 /dev/sdd
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/nvme0n{1,2,3,4}p1
[root@loong ~]# lsblk /dev/md0
NAME
MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
md0 9:0 0 4G 0 raid5
mkfs.xfs /dev/md0
nvme0n1
└─nvme0n1p1 linux_raid_member 1.2 loong:0 a5596195-c0ad-5fae-d9fe-c0f4e7b5a0b8
└─md0 xfs 68692b1f-6299-4ab4-abca-3b63c5447989
nvme0n2
└─nvme0n2p1 linux_raid_member 1.2 loong:0 a5596195-c0ad-5fae-d9fe-c0f4e7b5a0b8
└─md0 xfs 68692b1f-6299-4ab4-abca-3b63c5447989
nvme0n3
└─nvme0n3p1 linux_raid_member 1.2 loong:0 a5596195-c0ad-5fae-d9fe-c0f4e7b5a0b8
└─md0 xfs 68692b1f-6299-4ab4-abca-3b63c5447989
nvme0n4
└─nvme0n4p1 linux_raid_member 1.2 loong:0 a5596195-c0ad-5fae-d9fe-c0f4e7b5a0b8
└─md0 xfs 68692b1f-6299-4ab4-abca-3b63c5447989
nvme0n5
└─nvme0n5p1
nvme0n6
└─nvme0n6p1
cat /proc/mdstat # mdadm日志
# 查看详细信息
mdadm -D /dev/md0
# 增加一块新磁盘
mdadm -G /dev/md0 -n 4 -a /dev/nvme0n5p1
|
模拟磁盘故障
将故障盘换成新盘,自动恢复数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 标记故障盘
mdadm /dev/md0 -f /dev/nvme0n5p1
#会用空闲盘顶上
# 移除故障标识的磁盘
mdadm /dev/md0 -r /dev/nvme0n5p1
# 增加一块新磁盘
mdadm -G /dev/md0 -n 4 -a /dev/nvme0n6p1
# 生成配置文件
mdadm -D -s >> /etc/mdadm.conf
# 停止
mdadm -S /dev/md0
# 基于配置启动
mdadm -A -s /dev/md0
# 强制启动
mdadm -R /dev/md0
|
热备份:快速恢复数据
在 mdadm 中,-x 选项用于指定热备盘(hot spare)。热备盘是一个备用磁盘,当 RAID 阵列中的某个磁盘发生故障时,热备盘会自动替换故障盘,从而帮助阵列快速恢复正常状态,提高数据的可用性和容错性。
热备盘仅在 RAID 阵列中存在故障磁盘时才会被激活,平时处于备用状态。
LVM:逻辑卷管理器
在多个物理设备间重新组织文件系统
弹性的更改LVM的容量
实现过程
- 将设备指定为物理卷
- 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent, PE)来定义的
- 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
- 可以在逻辑卷上创建文件系统并挂载
PV(Physical Volume,物理卷)
VG(Volume Group,卷组)
LV(Logical Volume,逻辑卷)
PE(Physical Extent,物理区域):物理卷中可用于分配的最小存储单元。PE的大小是可配置的,默认为4MB。
LE(Logical Extent,逻辑区域):逻辑卷中可用于分配的最小存储单元。一个LE对应一个PE。

LVM分卷
lvm2
pv格式化
1
2
3
4
5
6
|
# 查看pv信息
pvs
pvdisplay # 详细信息
# 创建pv
pvcreate /dev/sd{b,c,e,f,g,d}1
|
创建VG
1
2
3
4
5
6
7
|
# 查看vg信息
vgs
vgdisplay # 详细信息
# 创建vg
vgcreate -s 16M vgname /dev/sdb1 /dev/sd{c,e,f,g,d}1
# -s size指定PE大小
|
创建LV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 查看lv信息
lvs
lvdisplay # 详细信息
lvscan # 查看具体路径
# 创建LV
lvcreate -l 100 -n lvname vgname
# -L size 指定大小
# -l N 指定LE个数
# -n 名字
lvcreate -l 100 -n lv1 testvg
lvcreate -L 5G -n lv2 testvg
lvcreate -l 20%free -n lv3 testvg
lvcreate -l 10%VG -n lv4 testvg
lvscan
|
LVM管理
大小管理
扩展
1
2
3
4
5
6
7
8
9
10
11
12
|
vgextend
lvextend
# 扩展卷组
vgextend nvlvm /dev/nvme0n6p1
# 扩展逻辑卷
lvextend -L +2G /dev/nvlvm/lvol0
# 扩容文件系统
resize2fs /dev/nvlvm/lvol0
xfs_growfs MOUNTPOINT
|
1
2
3
4
5
|
# 扩展卷组
vgextend nvlvm /dev/nvme0n6p1
# 一步到位(逻辑卷,文件系统)
lvresize -r -l +100%FREE /dev/nvlvm/lvol0
|
缩减
缩减有数据损坏的风险,建议先备份再缩减,不支持在线缩减,要先取消挂载,xfs文件系统不支 持缩减
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
vgreduce
lvreduce
1. 取消挂载
umount
2. 文件系统检测
e2fsck -f /dev/VG_NAME/LV_NAME
xfs_repair /dev/sdb1
3. 缩减文件系统
resize2fs /dev/nvlvm/lvol0 size # 到多少大小
### XFS 文件系统不支持直接缩减大小需要通过备份数据、删除并重新创建分区或逻辑卷、重新格式化和恢复数据的方式来缩减文件系统。
4. 缩减逻辑卷
lvreduce -L 3G /dev/nvlvm/lvol0
5. 重新挂载
mount
# 一步到位(文件系统,逻辑卷)
lvreduce -L 1G -r dev/nvlvm/lvol0
# 缩减卷组
vgreduce nvlvm /dev/nvme0n6p1
|
xfs缩减
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 先备份数据
apt install xfsdump
# 挂载点后面不要加/
xfsdump -f data.img /data
# 卸载文件系统
umount /data
# 缩减逻辑卷
lvreduce -L 10G /dev/vg0/lv0
# 格式化
mkfs.xfs -f /dev/vg0/lv0
# 重新挂载
mount /dev/vg0/lv0 /data
# 还原数据
xfsrestore -f data.img /data
|
删除
1
|
lvremove /dev/VG_NAME/LV_NAME
|
数据迁移
1
|
pvmove /dev/sdb1 # 将sdb1数据迁移走
|
跨主机迁移
1
2
3
4
5
6
7
8
9
10
|
1. 在旧系统中,umount 所有卷组上的逻辑卷
2 禁用卷组
vgchange -a n vg0
lvdisplay
3 导出卷组
vgexport vg0
pvscan
vgdisplay
|
1
2
3
4
5
6
7
8
|
新主机上操作
4 拆下旧硬盘在目标计算机上,并导入卷组:
vgimport vg0
5 启用卷组
vgchange -ay vg0
6 mount 所有卷组上的逻辑卷
|
卸下一块存储
1
2
3
4
5
6
7
8
9
10
|
# 迁移要卸下存储中的分卷的所有数据
pvmove /dev/sdb*
#从 vg 中删除
vgreduce vg /dev/sdb*
# 删除 pv
pvremove /dev/sdb*
# 卸下存储
|
lvm快照:一次性使用
对逻辑卷(LV)进行备份或创建数据的时间点副本。
分配一定的空间给快照。当原逻辑卷中的数 据发生变化时,变化的数据会被复制到快照区域,而未变化的数据则继续由原逻辑卷和快照共享。
原理:保留旧数据(变动前的数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
1. 创建快照:
使用lvcreate命令并添加-s参数来创建一个快照。同时,可以使用-L参数指定快照的大小,以及-n参数指定快照的名称。
2 挂载快照:
将快照挂载到一个空目录上,以便访问快照中的数据。快照通常以只读方式挂载。
3 备份数据:
在快照挂载后,可以使用常规的备份工具(如rsync、tar等)对快照中的数据进行备份。
4 恢复数据(可选):
如果需要从快照恢复数据,可以先卸载原始逻辑卷,然后使用lvconvert --merge命令将快照合并到主逻辑卷中。这将把快照时的数据状态应用到主逻辑卷上。
5 删除快照:
完成备份或数据恢复后,可以使用lvremove命令删除快照。
|
注意事项
1
2
3
4
5
6
7
8
|
快照大小:
在创建快照时,需要评估原逻辑卷中可能发生变化的数据量,并据此设置快照的大小。如果快照大小设置过小,可能无法容纳所有变化的数据,导致快照失效。
快照与卷组:
快照和原逻辑卷必须位于同一个卷组(VG)中,因为快照需要共享原逻辑卷的物理存储区域(PE)。
快照状态:
可以通过lvscan命令查看系统中逻辑卷和快照的状态。如果快照处于inactive状态,可能是因为原逻辑卷中的数据变化量超过了快照的大小限制。
|
快照使用
1
2
3
4
5
6
7
|
#-s 表示快照
#-L 100M 表示大小,大小取决于你要修改多少文件
#-p r 表示该卷只读
lvcreate -n lv1_snapshot -s -L 100M -p r /dev/testvg/lv1
mount /dev/testvg/lv1_snapshot /mount/lvm_snapshot/
# 快照内容与原内容一样,其实此时快照分区没有内容,看到的内容都来自源分区
|
还原
1
2
3
4
5
6
|
# 先卸载
umount /mount/lvm
umount /mount/lvm_snapshot/
lvconvert --merge /dev/testvg/lv1_snapshot
# 恢复之后快照就没有了,是一次性的
|