Linux磁盘管理与文件系统
一、MBR分区
1.1 MBR(主引导记录)
-
磁盘分区可分为主分区、扩展分区和逻辑分区(逻辑分区在扩展分区内建立)
-
MBR位于硬盘第一个物理扇区处 , MBR中包含硬盘的主引导程序和硬盘分区表
-
Linux系统中使用MBR分区最多分4个区,在生产中一般分为3个主分区和1个拓展分区
-
第一个扇区总共512字节,前446字节是MBR,分区表保存在扇区中的第447-512字节中。
-
分区表有4个分区记录区,每个分区记录区占16字节。
1.2 磁盘分区的表示
表示:/dev/hda5
- /dev/:硬件设备文件所在的目录
- hd:表示IDE设备(sd表示SCSI设备)
- a:硬盘的顺序号,表示的第几块硬盘,以a、b、c…表示(不可改)
- 5:分区的顺序号(可改)
1.3 硬盘分区结构
- 硬盘中的主分区数目只有4个
- 主分区和扩展分区的序号限制在1 ~4
- 扩展分区再分为逻辑分区
- 逻辑分区的序号将始终从5开始
二、文件系统的分类
2.1 XFS文件系统
-
CenOS 7系统中默认使用的文件系统,高性能的日志型文件系统
-
存放文件和目录数据的分区
2.2 SWAP交换文件系统
当系统物理内存不足时,将其他物理内存中的一部分空间释放,给当前运行程序使用
2.3 Linux系统支持的其他文件系统类型
EXT4、FAT32、NTFS、LVM
三、系统添加磁盘及分区挂载
- 创建硬件
- 磁盘分区
- 创建文件系统
- 挂载分区
3.1 使用到的命令
[root@localhost /]# vim /etc/bashrc //在这个配置文件修改alias对所有用户永久生效
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan' //添加上面的代码
[root@localhost /]# source /etc/bashrc //使更改后的配置文件生效
[root@localhost /]# scan //刷新设备接口
[root@localhost /]# lsblk //查看分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
partprobe //用于分区完成后分区不显示刷新分区情况
fdisk 硬盘 //用于硬盘分区2TB以下磁盘划分
m:获取帮助菜单
n:建立新分区
p:查看分区情况
d:删除分区
t:变更分区类型
w:保存分区操作并退出
q:不保存分区操作并退出
l:查看文件类型
[root@localhost /]# fdisk -l /dev/sda //查看磁盘sda及其分区信息
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009c7ef
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1953791 975872 83 Linux
/dev/sda2 1953792 109400063 53723136 8e Linux LVM
假如在fdisk中输入错误,使用Ctrl键+backspace删除
mkfs.xfs 磁盘分区 //用于格式化分区(建立文件系统)
blkid //查看设备的uuid号
free -h //查看交换分区的大小
3.2 实际操作
3.2.1 添加硬盘
[root@localhost /]# scan //刷新设备接口
[root@localhost /]# lsblk //查看分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk //出现表示添加成功
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
硬盘添加顺序是从sda开始到sdb一次类推,添加的第二块磁盘即是sdb
3.2.2 磁盘分区
创建主分区
[root@localhost /]# fdisk /dev/sdb //在sdb中创建分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n //创建分区
Partition type:
p primary (0 primary, 0 extended, 4 free) //创建主分区
e extended //创建扩展分区
Select (default p): p
分区号 (1-4,默认 1): //选择分区序列号
起始 扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):+20G //选择磁盘大小为20G
分区 1 已设置为 Linux 类型,大小设为 30 GiB
命令(输入 m 获取帮助):w //保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost /]# lsblk //查看分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
└─sdb1 8:17 0 30G 0 part //创建分区成功
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
创建逻辑分区
创建逻辑分区需要先扩展分区
[root@localhost /]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e //创建扩展分区
分区号 (2-4,默认 2): //序列号默认为2
起始 扇区 (41945088-83886079,默认为 41945088):
将使用默认值 41945088
Last 扇区, +扇区 or +size{K,M,G} (41945088-83886079,默认为 83886079):+15G //分区大小为15G
分区 2 已设置为 Extended 类型,大小设为 15 GiB
命令(输入 m 获取帮助):w //保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost /]# lsblk //查看分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
├─sdb1 8:17 0 20G 0 part
└─sdb2 8:18 0 1K 0 part //创建扩展分区成功
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
[root@localhost /]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l //创建逻辑分区
添加逻辑分区 5 //序列号为5
起始 扇区 (41947136-73402367,默认为 41947136):
将使用默认值 41947136
Last 扇区, +扇区 or +size{K,M,G} (41947136-73402367,默认为 73402367):+14999M //分区大小为10G
分区 5 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
划分分区完成后首先使用lsblk命令查看分区是否同步到系统中,如果没显示划分的分区则使用partprobe命令刷新分区表,然后再使用lsblk查看是否显示划分的分区
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
├─sdb1 8:17 0 20G 0 part
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 14.7G 0 part //创建逻辑分区成功
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
逻辑分区的大小由扩展分区决定,由于扩展分区中有分区表,所以逻辑分区的大小不能等于扩展分区的大小,只能小于扩展分区的大小
3.2.3 创建文件系统
[root@localhost /]# mkfs.xfs /dev/sdb1 //在sdb1创建xfs文件系统
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost /]# mkfs.xfs /dev/sdb5 //在sdb5创建xfs文件系统
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=959936 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=3839744, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
3.2.4 挂载分区
格式化分区完成后就可以进行挂载使用了,注意挂载的目录最好是一个空目录,如果不是空目录会将原目录里的内容隐藏,可能会导致数据丢失,同一挂载点不要挂载多个磁盘。
①临时挂载
[root@localhost /]# mount /dev/sdb1 /data/ //临时挂载sdb1到data
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
├─sdb1 8:17 0 20G 0 part /data //挂载成功
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 14.7G 0 part
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
若重启服务器则挂载失效
②永久挂载(需要设备UUID)
[root@localhost /]# umount /dev/sdb1 /data/ //解挂载
umount: /data/:未挂载
[root@localhost /]# blkid //查询设备UUID
/dev/mapper/centos-root: UUID="1871dac0-5ec8-4132-a7ab-f3f9c29f4825" TYPE="xfs"
/dev/sda2: UUID="VNY0Qc-0Q7z-7FM2-ST8T-ApMY-SZWn-5ELzv3" TYPE="LVM2_member"
/dev/sda1: UUID="fa602757-026a-4b15-9bdb-05bf9c751ed8" TYPE="xfs"
/dev/mapper/centos-swap: UUID="b2c1d539-9794-4d64-b70d-61da5cea4ae0" TYPE="swap"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sdb1: UUID="8031ce86-cba3-4f2e-96b0-0a93c81d7be0" TYPE="xfs"
/dev/sdb5: UUID="c14df9b6-72d6-4625-a887-6554e711f5de" TYPE="xfs"
/dev/sdc: PTTYPE="dos"
[root@localhost /]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Apr 26 00:42:50 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=fa602757-026a-4b15-9bdb-05bf9c751ed8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /data xfs defaults 0 0 //①
设备名 挂载目录 文件系统 定义权限,默认所有 不备份 表示系统启动时不检查文件系统
UUID=8031ce86-cba3-4f2e-96b0-0a93c81d7be0 /data xfs defaults 0 0 //②
以上两行代码二选一,结果相同
:wq
[root@localhost /]# mount -a //读取/etc/fstab配置文件,使其生效
[root@localhost /]# lsblk //查看分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
├─sdb1 8:17 0 20G 0 part /data //挂载成功
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 14.7G 0 part
sdc 8:32 0 30G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
永久挂载光盘镜像的方法
[root@localhost /]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Apr 26 00:42:50 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=fa602757-026a-4b15-9bdb-05bf9c751ed8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/cdmod /mnt iso9660 defaults 0 0
:wq
3.2.5 面试题
查看磁盘读写性能
[root@localhost /]# iostat
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 2023年05月08日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.00 0.00 99.88
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.56 11.55 2.83 949201 232801
scd0 0.00 0.15 0.00 12438 0
dm-0 0.56 11.12 2.58 914095 212313
dm-1 0.00 0.13 0.00 10532 0
sdb 0.04 1.09 0.67 89538 54727
sdc 0.01 0.32 0.00 26532 16
sdd 0.00 0.04 0.00 3124 0
四、更改分区类型
以swap分区为例
[root@localhost /]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n //创建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p //创建主分区
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+5G //主分区大小为5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):t //更改分区类型
已选择分区 1
Hex 代码(输入 L 列出所有代码):82 //swap分区的Hex代码为82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w //保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 953M 0 part /boot
└─sda2 8:2 0 51.2G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 4.7G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
├─sdb1 8:17 0 20G 0 part /data
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 14.7G 0 part
sdc 8:32 0 30G 0 disk
└─sdc1 8:33 0 5G 0 part //分区创建成功
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom /mnt
[root@localhost /]# mkswap /dev/sdc1 //创建交换文件系统
mkswap: /dev/sdc1: warning: wiping old xfs signature.
正在设置交换空间版本 1,大小 = 5242876 KiB
无标签,UUID=cc835633-94f4-43f3-b23c-417cfbdbec36
[root@localhost /]# free -h //查看交换分区的大小
total used free shared buff/cache available
Mem: 1.9G 840M 136M 10M 990M 884M
Swap: 4.7G 0B 4.7G
[root@localhost /]# swapon /dev/sdc1 //开启交换分区
[root@localhost /]# free -h
total used free shared buff/cache available
Mem: 1.9G 842M 134M 10M 990M 882M
Swap: 9.7G 0B 9.7G
[root@localhost /]# swapoff /dev/sdc1 //关闭交换分区
[root@localhost /]# free -h //查看交换分区的大小
total used free shared buff/cache available
Mem: 1.9G 840M 136M 10M 990M 884M
Swap: 4.7G 0B 4.7G
五、补充
MRB分区只能使用在2T以下的硬盘,2T以上的硬盘使用gdisk命令,选项与fdisk相同