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
逻辑分区的大小由扩展分区决定,由于扩展分区中有分区表,所以逻辑分区的大小不能等于扩展分区的大小,只能小于扩展分区的大小
[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相同