Linux磁盘管理

一、Linux系统中查看磁盘及挂载情况的命令

1.1 df命令

df -h 可以显示磁盘挂载情况,并以可读的方式展示各分区的使用情况、剩余空间等信息。

1.2 mount命令

mount 可以显示已挂载的文件系统及其挂载点。

1.3 cat命令

cat /proc/mounts 可以查看已挂载的文件系统信息,包括文件系统类型、挂载设备、挂载点等。

1.4 lsblk命令

lsblk 可以显示系统的块设备信息,包括磁盘、分区、挂载点等。

1.5 blkid命令

blkid 可以显示块设备的UUID等信息,包括已挂载的和未挂载的设备。

1.6 fdisk命令

fdisk -l 可以列出系统中的磁盘和分区信息。

1.7 parted命令

parted -l 可以显示磁盘的分区信息,同时还可以进行更多的磁盘操作,如创建分区、调整分区大小等。

以上命令中,df和mount是最常用的两个命令,可以较为直观地查看磁盘挂载情况。而cat、lsblk、blkid和fdisk命令则提供了更详细的信息,适合用于特定的需要。可以根据实际需求选择合适的命令来查看磁盘挂载情况。

二、调整 Linux 系统 swap/home/root等分区 大小

2.1 Linux 系统 swap/home/root等分区简介

在安装 Linux 操作系统(CentOS、Ubuntu、Debian 等)时,如果采用分区向导提供的各类标准分区方案对系统盘进行分区,基本上给 home 的分区分配的磁盘空间都很大(占比能达到 80% 左右),其它分区(/ 跟分区、/var 分区、swap分区等)却很小。可在实际生产应用中,home 分区并不需要那么大,大部分数据是放在 / 目录下,因此安装好系统后就需要调整这些分区大小,不然在生产环境当中,容易导致硬盘分区写满溢出,没有写入权限。

Tips: 安装 Linux 系统时建议对系统盘分区采用 “使用整个磁盘并配置LVM” 向导 进行分区,并且 将 /home、/var 和 /tmp 分别放在单独分区。在对磁盘进行分区时,推荐设置分区向导使用部分(40% - 50%)系统盘卷组,这样安装好 Linux 系统后,就可以使用逻辑卷管理(LVM)增加逻辑卷(分区)容量,所以安装时使用一部分系统盘空间 可以提高系统灵活性。

如下图为安装 debian 12.6 时,“使用整个磁盘并配置LVM” 向导 进行分区,并将 /home、/var 和 /tmp 分别放在单独分区,然后 设置分区向导使用 50% 的系统盘卷组(保留50% 的系统盘空间带安装好后做动态分配)。

安装好系统后, 上踹 df -h 命令可以查看各分区的信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
root@debian-5:~# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                          63G     0   63G   0% /dev
tmpfs                         13G  2.1M   13G   1% /run
/dev/mapper/debian--vg-root  122G  7.6G  109G   7% /
tmpfs                        120G     0  120G   0% /dev/shm
tmpfs                        5.0M   12K  5.0M   1% /run/lock
/dev/nvme0n1p2               456M  150M  282M  35% /boot
/dev/mapper/debian--vg-tmp   101G   48K   97G   1% /tmp
/dev/mapper/debian--vg-var   108G  364M  103G   1% /var
/dev/mapper/debian--vg-home  331G   36M  314G   1% /home
/dev/nvme0n1p1               511M  5.9M  506M   2% /boot/efi
/dev/md127                    22T   24K   21T   1% /data
tmpfs                         13G   44K   13G   1% /run/user/1000

2.2 vgdisplay 命令查看LVM的信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
root@debian-5:~# vgdisplay
  --- Volume group ---
  VG Name               debian-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               5
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               930.53 GiB
  PE Size               4.00 MiB
  Total PE              238216
  Alloc PE / Size       172084 / 672.20 GiB
  Free  PE / Size       66132 / <258.33 GiB
  VG UUID               hLHdz3-ntzI-vlHI-SoSO-yE4e-ydnJ-clvsBw

这里可以看到,系统盘总共有 930.53G(VG Size),已经分配(Alloc PE / Size) 672.2G,未分配(Free PE / Size) 258.33G。

未分配(Free PE / Size)的 258.33G 空闲空间就可以使用 LVM 进行手动分配给各分区或创建新分区。

2.3 减少 home 分区大小

Step 1:设置(减少)/home 分区大小

1
2
3
umount /home
resize2fs -p /dev/mapper/debian--vg-home 100G
mount /home

正常情况下,只需要三条命令就可以把 home 分区大小 100G 了。

如果是新系统,执行 umount /home 这条命令是没问题,如果是非全新系统,可能就会出现其他程序在占用 home,那么就得先执行 fuser -m /home 释放一下占用。

一般情况下,执行 resize2fs -p /dev/mapper/debian--vg-home 100G 这条命令都会提示 运行e2fsck -f /dev/mapper/debian--vg-home命令,这时按提示先执行提命令(e2fsck命令)再重新执行 resize2fs 命令。

重新 mount /home 后,使用 df -h 命令就可以看到 /home 分区被设置成了 100G 大小了。

Step 2:缩小(减少)home 逻辑卷组大小

第一步 中的命令减少的是 系统 home 分区的大小,并不是 home 分区所在的逻辑卷组(LV)的大小,使用下面的 lvreduce 将缩小 home 分区所在的逻辑卷组(LV)的大小(多余的空间将释放到 Free PE / Size 池中)。

1
lvreduce -L 100G /dev/mapper/debian--vg-home

使用 lvreduce 指令用于减少LVM逻辑卷占用的空间大小。可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。建议在新系统下进行调整,如果项目在投入使用阶段了,需要做好数据备份。

2.4 对交换分区 swap 空间进行扩大

swap 交换分区就是内存的交换,一般建议设置成硬件内存的2倍。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
free -m     # 查看 Swap 分区大小

swapoff /dev/mapper/debian--vg-swap_1   # 关闭 swap

# 扩展 /dev/mapper/mapper/debian--vg-swap_1,增加48G
lvextend -L +48G /dev/mapper/debian--vg-swap_1

# 将 /dev/mapper/mapper/debian--vg-swap_1 设置为swap分区
mkswap /dev/mapper/debian--vg-swap_1

swapon /dev/mapper/debian--vg-swap_1    # 打开 swap

2.5 对 / 分区空间进行扩大

1
2
3
4
5
6
7
8
9
vgdisplay   # 查看空闲空间大小(Free PE / Size)

# 将 root 逻辑分区卷组 扩大(添加)300G 空间(New Size = Source Size + Add Size) 
lvextend -L +300G /dev/mapper/debian--vg-root

# 将系统 root 分区设置为 逻辑分区卷组 大小
resize2fs -p /dev/mapper/debian--vg-root

df -h   # 查看修改后的分区情况

2.6 设置 tmpfs 大小

编辑 /etc/fstab 文件,在其中添加 tmpfs 配置项后

1
2
3
echo "tmpfs /dev/shm tmpfs defaults,size=120G 0 0" >> /etc/fstab

systemctl daemon-reload # 使 修改生效

三、RAID磁盘阵列的原理与搭建

3.1 RAID磁盘阵列的原理简介

磁盘阵列(Redundant Arrays of Independent Disks,RAID) 是由 “多个独立磁盘构成的具有冗余能力的阵列”之意(其中一块盘坏了,数据不丢失)。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 磁盘阵列还能利用同位检查(Parity Check)的观念,在阵列中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中(也就是坏了一块盘,拔掉,插入新盘,数据还能恢复到新盘,利用奇偶校验)

Tips: RAID可以预防数据丢失,但是它并不能完全保证数据不会丢失,所以大家使用RAID的同时还是注意备份重要的数据。

RAID的创建有两种方式:

  • 软RAID:通过操作系统软件(mdadm)来实现;
  • 硬RAID:使用硬件阵列卡;

RAID几种常见的类型:

RAID类型 RAID0 RAID1 RAID10 RAID5 RAID6
别名 条带 镜像 分布式奇偶校验条带 双重奇偶校验条带 镜像加条带
最少磁盘数 2 2 4 3 4
最大容错磁盘数 n-1 n/2 1 2
数据安全性 完全没有 最佳 最佳 比 RAID5 好
理论写入性能 n 1 n/2 <n-1 <n-2
理论读出性能 n n n <n-1 <n-2
可用容量 100% 50% 50% (n-1)/n (n-2)/n
一般应用 强调性能但数据不重要的环境 数据与备份 服务器、云系统常用 数据与备份 数据与备份

在企业中用的最多的是:raid1、raid5和raid10。不过随着云的高速发展,阿里云,腾讯云等供应商一般可以把硬件问题解决掉。(你在用云的时候,会关注供应商底层是用什么raid类型吗)

3.2 使用4块SSD盘做 软Raid5

创建 软Raid5

 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
37
38
39
40
41
42
43
44
45
# 查看磁盘信息
lsblk -l 
fdisk -l 

# 安装 mdadm
apt install -y mdadm

# 创建 软 raid5 盘
mdadm -Cv /dev/md0 -n4 -l5 /dev/sd[a-d]     # 创建配置raid5

mdadm /dev/md0 -a /dev/sdf                  # 创建热备盘(可选)

# 等效于上述两条命令
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{a,b,c,d} 
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd[a-d] 
# 参数解释
# -C  创建的意思
# /dev/md0  创建的raid5 磁盘名字
# -C 下的 -a yes|no 是否自动创建目标RAID设备的设备文件
# -l Raid的等级
# -n 使用多少块硬盘来创建当前Raid
# -x 空闲盘,也就是热备盘,当正常的盘出问题,这块盘就能从 share状态 转换到 spare rebuilding状态
# /dev/sd{a,b,c,d} 硬盘块名字,也可以写长名字 或 /dev/sd[a-d]

# 扩展命令
mdadm -D /dev/md0                           # (查看创建的raid)
mdadm /dev/md0 -f /dev/sdb                  # (停用磁盘)
mdadm /dev/md0 -r /dev/sdb                  # (移除磁盘)

# 格式化磁盘,格式方式为ext4
mkfs.ext4 /dev/md0

# 挂载磁盘
mkdir /data
mount /dev/md0 /data

df -h # 查看磁盘挂载情况

# 查看磁盘的 UUID 等信息
blkid /dev/md0

# 在 /etc/fstab 中添加开机自动挂载磁盘
echo "UUID=$(blkid /dev/md0 | awk -F'"' '{print $2}') /data ext4 defaults,nofail 0 0" >> /etc/fstab
# 或
echo "UUID=$(blkid /dev/md0 | awk -F'"' '{print $2}') /data ext4 defaults,noatime 0 0" >> /etc/fstab

删除raid5

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
mdadm --stop /dev/md0           # 停止RAID阵列,并确保数据已经同步到磁盘:

rm /etc/mdadm/mdadm.conf        # 删除RAID配置文件,以确保系统不会在启动时自动重建RAID:

# 从/proc/mdstat和/etc/mdadm/mdadm.conf中删除任何关于RAID的记录。

mdadm --misc --zero-superblock /dev/sdX1    从/dev/中删除RAID设备
# 其中/dev/sdX1是RAID的一个成员,例如/dev/sdb1。

# 请注意,执行这些操作会导致RAID阵列中的所有数据丢失,所以在执行之前请确保你已经备份了所有重要数据。如果你不确定,请咨询专业的数据恢复专家