Linux磁盘管理与文件系统

简介: Linux磁盘管理与文件系统

Linux磁盘管理与文件系统

一、MBR分区

1.1 MBR(主引导记录)

磁盘分区可分为主分区、扩展分区和逻辑分区(逻辑分区在扩展分区内建立)

MBR位于硬盘第一个物理扇区处 , MBR中包含硬盘的主引导程序和硬盘分区表

Linux系统中使用MBR分区最多分4个区,在生产中一般分为3个主分区和1个拓展分区

第一个扇区总共512字节,前446字节是MBR,分区表保存在扇区中的第447-512字节中。

分区表有4个分区记录区,每个分区记录区占16字节。

image.png

1.2 磁盘分区的表示

表示:/dev/hda5

  • /dev/:硬件设备文件所在的目录
  • hd:表示IDE设备(sd表示SCSI设备)
  • a:硬盘的顺序号,表示的第几块硬盘,以a、b、c…表示(不可改)
  • 5:分区的顺序号(可改)

1.3 硬盘分区结构

  • 硬盘中的主分区数目只有4个
  • 主分区和扩展分区的序号限制在1 ~4
  • 扩展分区再分为逻辑分区
  • 逻辑分区的序号将始终从5开始

image.png

二、文件系统的分类

2.1 XFS文件系统

  • CenOS 7系统中默认使用的文件系统,高性能的日志型文件系统
  • 存放文件和目录数据的分区

2.2 SWAP交换文件系统

当系统物理内存不足时,将其他物理内存中的一部分空间释放,给当前运行程序使用

2.3 Linux系统支持的其他文件系统类型

EXT4、FAT32、NTFS、LVM

三、系统添加磁盘及分区挂载

  1. 创建硬件
  2. 磁盘分区
  3. 创建文件系统
  4. 挂载分区

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 添加硬盘

image.png

image.png

[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相同

目录
相关文章
|
2月前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
556 4
|
6天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
43 8
|
12天前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
43 7
|
1月前
|
Unix Linux 对象存储
Linux 磁盘管理
Linux 磁盘管理
33 1
|
2月前
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
55 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
38 0
|
2月前
|
存储 Linux 索引
Linux 下最主流的文件系统格式——ext
【9月更文挑战第8天】硬盘被划分为若干相同大小的块(Block),默认大小为4K,便于灵活管理文件数据。文件数据分散存放于这些块中,提高了数据添加、删除和插入的便利性。
|
3月前
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
45 12
|
3月前
|
Linux Shell 网络安全
深度探索Linux操作系统 —— 构建根文件系统1
深度探索Linux操作系统 —— 构建根文件系统
54 6