磁盘管理
# 磁盘命名
# 物理服务器
真实物理服务器
设备名称 | 分区信息 | 设备类型 |
---|---|---|
/dev/sda | /dev/sda1 | 第一块物理磁盘第一分区 |
/dev/sdb | /dev/sdb2 | 第二块物理磁盘第二个分区 |
/dev/sdd | /dev/sdd4 | 第四块虚拟磁盘的第四个分区 |
# 虚拟服务器
阿里云主机或者KVM虚拟化主机的磁盘命名格式
设备名称 | 分区信息 | 设备类型 |
---|---|---|
/dev/vda | /dev/vda1 | 第一块虚拟磁盘的第一个分区 |
/dev/vdb | /dev/vdb2 | 第二块虚拟磁盘的第二个分区 |
/dev/vdc | /dev/vdc3 | 第三块虚拟磁盘的第三个分区 |
# 磁盘分区
# 为什么要分区
- 分区是为了便于数据分门别类的存储;
- 分区有
MBR
、GPT
两种方式;
# MBR分区
- MBR分区仅能分配4个主分区,如果需要划分多个分区,需要先分配扩展分区,然后再分配逻辑分区
- 为什么MBR分区仅能分配4个主分区?NBR只能划分4个主分区的原因 (opens new window)
- 分区编号如何表示:1~4主分区使用和扩展分区,逻辑分区从5开始;
# GPT分区
- 对于
MBR
分区而言,只能分配4
个主分区,但新型的分区表GPT
理论上支持分配无限
(128是windows系统的限制)个主分区MBR
与GPT
有何区别?- 注意
MBR
与GPT
之间不能互转,会导致数据丢失;
# 分区管理
# fdisk
fdisk
仅支持分配小于2TB
的磁盘- 查看当前设备
fdisk -l
- 对设备进行分区
fdisk /dev/sdb
- 查看当前设备
- 分区命令
- m:显示帮助
- n:创建新分区
- d:删除分区
- p:查看分区
- w:保存分区
- q:退出
- 分区案例:
- 案例1:分配4个分区(4P)
- 案例2:分配5个分区(1P+1E+4L)
- 案例3:分配6个分区(3P+1E+3L)
# gdisk
gdisk
支持分配大于2TB
的磁盘- 查看当前设备
gdisk [-l] device
- 对设备进行分区
gdisk /dev/sdb
- 查看当前设备
- 分区命令
- ?:显示帮助
- n:创建新分区
- p:打印分区
- w:保存分区
- q:退出
- 分区案例:
- 案例1:分配4个主分区(4P)
- 案例2:分配5个主分区(5P)
- 案例3:分配6个主分区(6P)
# mkfs
mkfs
命令用于格式化硬盘,类似于将房子装修成3室一厅,还是2室一厅-b
:设定数据区块占用空间大小,目前支持1024、2048、4096bytes
每个块;-t
:用来指定什么类型的文件系统,可以是ext4、xfs
;-N
:设定inode
数量,防止inode
数量不够导致磁盘不足;
使用
mkfs
命令,格式化整个硬盘[root@web ~]# mkfs.ext4 /dev/sdb
1使用
mkfs
命令,格式化磁盘的某个分区[root@web ~]# mefs.xfs /dev/sdb1
1
# 挂载管理
当需要使用磁盘空间的时,需要准备一个目录作为挂载点,然后使用mount
命令与该设备进行关联。
# 临时挂载mount
通过mount进行挂载,但重启将会失效,我们称为临时生效。
-t
:指定文件系统挂载分区;-a
:检查并且挂载/etc/fstab
配置文件中未挂载的设备;-o
:指定挂载参数,ro、rw
;
挂载磁盘设备
[root@web ~]# mkdir /db1 [root@web ~]# mount -t xfs /dev/sdb1 /db1
1
2挂载磁盘设备,设置参数为仅可读
[root@web ~]# mkdir /db2 [root@web ~]# mount -t xfs -o ro /dev/sdb2 /db2 [root@web ~]# touch /db2/new_file touch: cannot touch '/db2/new_file': Read-only file system
1
2
3
4
# 临时卸载umount
如果不想使用可以使用
umount [device|directory]
进行临时卸载;-l:强制卸载;
卸载入口目录示例;
[root@web ~]#umount /db1
1卸载设备方式示例;
[root@web ~]# umount /dev/sdb1
1如碰到无法正常卸载情况处理;
[root@web db1]# umount /db1 umount: /db1: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1) # 如上情况解决办法有两种,1.切换至其他目录 2.强制卸载 [root@web db1]# umount -l /db1
1
2
3
4
5
6
7
# 永久挂载fstab
如果需要实现永久挂载,则需要将挂载相关信息写入/etc/fstab
配置文件中实现。
# 永久挂载配置文件
- 配置文件规范:
设备名称|挂载的入口目录|文件系统类型|挂载参数|是否备份|是否检查
;
获取设备名称,或设备的
UUID
;[root@web ~]# blkid |grep "sdb1" /dev/sdb1: UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" TYPE="xfs"
1
2手动挂载测试;
[root@web ~]# mount UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" /db1
1写入
/etc/fstab
测试;#手动编写 [root@web ~]# tail -1 /etc/fstab UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /db1 xfs defaults 0 0 #自动实现 [root@web ~]# blkid |grep /dev/sda1 |awk -F '[: ]+' '{print $2}' |\ sed -r 's#(.*)#\1 /db1 xfs defaults 0 0#g' >> /etc/fstab
1
2
3
4
5
6
7加载
/etc/fstab
配置文件,同时检测是否存在语法错误;[root@web ~]# mount -a
1
# 配置文件/etc/fstab
/etc/fstab
配置文件格式- 第一列:指定需要挂载的设备
- 设备名称:
/dev/sdb1
; - 设备ID:
UUID
;
- 设备名称:
- 第二列:挂载的入口目录
- 第三列:文件系统类型
xfs
类型;ext4
类型;
- 第四列:挂载参数
async/sync
:使用同步或异步方式存储数据;默认async
user/nouser
:是否允许普通用户使用mount
命令挂载;默认nouser
exec/noexe
:是否允许可执行文件执行;默认exec
suid/nosuid
:是否允许存在suid
属性的文件;默认suid
auto/noauto
:执行mount -a
命令时,此文件系统是否被主动挂载;默认auto
rw/ro
:是否以只读或者读写模式进行挂载;默认rw
default
:具有rw,suid,dev,exec,auto,nouser,async
等参数;
- 第五列:是否要备份磁盘
- 0:不做备份;
- 1:每天进行备份操作;
- 2:不定日期的进行备份操作;
- 第六列:开机是否检验扇区
- 0:不要检验磁盘是否有坏道;
- 1:检验;
- 2:校验(当1级别检验完成之后进行2级别检验);
- 第一列:指定需要挂载的设备
# SWAP
# 什么是SWAP
Swap
分区在系统的物理内存不够时,将硬盘中的一部分空间供当前运行的程序使用
# 为什么需要SWAP
当物理内存不够时会随机kill
占用内存的进程,从而产生oom
,临时使用swap
可以解决
# SWAP基本应用
创建分区,并格式化为
swap
分区;[root@web ~]# fdisk /dev/sdb # 格式化为swap [root@web ~]# mkswap /dev/sdb1
1
2
3查看当前
swap
分区大小;[root@web ~]# free -m total used free shared buff/cache available Mem: 1980 1475 80 10 424 242 Swap: 2047 4 2043
1
2
3
4
# 扩展swap分区
扩展
swap
分区,使用swapon
命令swapon device
:将某个磁盘大小添加到swap
分区中;swapon -a
:添加所有swap
分区;
[root@web ~]# swapon /dev/sdb1 [root@web ~]# free -m total used free shared buff/cache available Mem: 1980 1475 80 10 424 242 Swap: 3047 4 2043
1
2
3
4
5
# 缩小swap分区
缩小
swap
分区,使用swapoff
命令swapoff device
:关闭某个磁盘的swap
分区;swapoff -a
:关闭所有swap
分区;
[root@web ~]# swapoff /dev/sdb1 [root@web ~]# free -m total used free shared buff/cache available Mem: 1980 1475 80 10 424 242 Swap: 2047 4 2043
1
2
3
4
5
# 文件系统修复
在
Linux
系统中,为了增加系统性能,通常系统会将一些数据先写入内存中,然后再刷新至磁盘中;万一公司服务器突然断电或者其他未知原因,再次启动后,会造成文件系统错误;
[root@web ~]# fdisk /dev/sdc # 分配1G分区 [root@web ~]# mkfs.xfs /dev/sdc1 [root@web ~]# mount /dev/sdc1 /mnt [root@web ~]# echo "Hello" > /mnt/new.txt # 模拟损坏 [root@web ~]# dd if=/dev/zero of=/dev/sdc bs=300M count=1 [root@web ~]# umount /mnt [root@web ~]# mount /dev/sdc1 /mnt # 无法挂载 # 尝试修复 [root@web ~]# xfs_repair /dev/sdc1 # 强制修复 [root@web ~]# xfs_repair -L /dev/sdc1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Last Updated: 2024/03/12, 18:00:21