Linux磁盘管理

166 阅读13分钟

Linux磁盘管理

一、计算机硬盘概述

硬盘是计算机主要存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料,硬盘内部由磁道、柱面、扇区、磁头等部件组成,如图所示:

image-20210906011830171.png

二、磁盘的数据结构

image-20210906220252047.png

  • 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据(扇区越多容量越大) 存放数据的最小单位 512字节

  • 磁道:同一盘片不同半径的同心圆

  • 柱面:不同盘片相同半径构成的圆(柱面和磁道数量相同)

三、硬盘接口的类型

image-20210706085510459.png

有SAS、SATA、SCSI、光纤通道

  • SCSI:640MB/s,并行接口,早期服务器

  • SATA:6Gbps,SATA数据端口与电源(长的电源,数据线短的)端口是分开的,即需要两条线,一条数据线,一条电源线

  • SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行。

四、磁盘分区的优缺点

image-20220222015938311.png

分区的优点

  • 优化I/O性能 读写

  • 实现磁盘空间配额限制

  • 提高修复速度

  • 隔离系统和程序

  • 安装多个OS

  • 采用不同文件系统

分区的缺点

  • 必须是连续的空间

  • 一旦分好区域后无法增加减少空间,空间固定

五、MBR分区与GPT分区的区别

MBR:2t以下的硬盘 使用fdisk

GPT:可以支持2t及以上的硬盘 使用gdisk

MBR分区

MBR: 主引导记录, 是硬盘上的第一个扇区, 想要读数据得从这个扇区开始

MBR 一共 512 字节

前 446 字节 开机引导程序, 引导硬件 找到我们的操作系统 后 64 字节 分区表 表明了 分区的范围, 分区从哪里到那里结束

最后 两字节 代表MBR 结束位

MBR 分区只可以分4个分区, 一个分区表要占 16字节

GPT分区

GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)

使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动。

分区分类

  • 主分区: 可以直接使用 , 安装操作系统 存储文件 等

  • 扩展分区:不可以直接使用, 需要再 划分逻辑分区, 让分区超过4个

  • 逻辑分区:可以直接使用, 存储文件

扩展分区是特殊的主分区

主分区的序号为 1-4

逻辑分区的序号 从5 开始

六、文件系统

文件系统的组成:

  • 内核中的模块:ext4, xfs, vfat

  • Linux的虚拟文件系统:VFS

  • 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

xfs:centos 7默认的文件系统

ext4:centos 6默认的文件系统

swap:当内存不足时,将硬盘空间转换成内存

FAT16、FAT32:且最大只能支持32GB分区,单个文件也只能支持最大4GB。

注意

文件系统的修复

  • fsck /dev/sdb1 -y :开源修复,不是很稳定

  • dd if=/dev/zero of=/dev/sdb1 bs=1M count=1 破坏文件系统,然后用上面的命令进行修复。

七、分区工具

分区工具介绍:

分完区,不保存不生效,有反悔的可能

  • fdisk 2t及以下分区

  • gdisk 全支持 (推荐)

分完区立马生效

  • parted 全支持 (不推荐)

1.查看磁盘分区的信息:fdisk

fdisk命令格式:fdisk -l 设备名

设备名:

  • /dev/sdb 一整块的磁盘

  • /dev/sdb1 磁盘的分区

进入到分区命令中的选项:

  • m 打印出菜单

  • p 打印出当前分区表

  • n 新建一个分区

  • d 删除一个分区

  • t 改变分区的属性,系统ID

  • w 保存

  • q 不保存退出 具体实验在下文

八、磁盘命令

  • lsblk:显示块设备
[root@localhost ~]# lsblk         //显示块设备
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0  1.9G  0 part /boot
└─sda2            8:2    0 50.3G  0 part 
  ├─centos-root 253:0    0 46.6G  0 lvm  /
  └─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
sr0              11:0    1  4.2G  0 rom  

image.png

  • blkid:查看设备的唯一标识符
[root@localhost ~]# blkid        //查看设备的唯一标识符
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="d3f3c980-d425-48d5-9ee9-bb1304a5ae0c" TYPE="xfs" 
/dev/sda2: UUID="b4RQUc-fGJA-KkLH-dVeF-Q26o-zcUT-pnQVky" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="d1ed59da-4b2d-41b0-8064-7afc434f0488" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="1ce7364c-75c0-4114-8140-101019cec86f" TYPE="swap" 

image.png

  • df:查看挂载、磁盘剩余量
[root@localhost ~]# df          //查看挂载、磁盘剩余量
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 48804576 4525156 44279420   10% /
devtmpfs                  917596       0   917596    0% /dev
tmpfs                     933524       0   933524    0% /dev/shm
tmpfs                     933524    9212   924312    1% /run
tmpfs                     933524       0   933524    0% /sys/fs/cgroup
/dev/sda1                1942528  182412  1760116   10% /boot
tmpfs                     186708      12   186696    1% /run/user/42
tmpfs                     186708       0   186708    0% /run/user/0

image.png

  • partprobe:分完区后,系统未识别可以用来刷新分区表

磁盘分区示例

1.创建普通分区

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd65e9f32

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

image.png

image.png

2.创建扩展分区

[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):
起始 扇区 (10487808-41943039,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):+10G
分区 2 已设置为 Extended 类型,大小设为 10 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd65e9f32

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    31459327    10485760    5  Extended

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

image.png

image.png

3.创建逻辑分区

[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
起始 扇区 (10489856-31459327,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-31459327,默认为 31459327):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd65e9f32

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    31459327    10485760    5  Extended
/dev/sdb5        10489856    14684159     2097152   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

image.png

image.png

4.显示块设备

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0  1.9G  0 part /boot
└─sda2            8:2    0 50.3G  0 part 
  ├─centos-root 253:0    0 46.6G  0 lvm  /
  └─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    5G  0 part //普通分区
├─sdb2            8:18   0    1K  0 part //扩展分区
└─sdb5            8:21   0    2G  0 part //逻辑分区
sr0              11:0    1  4.2G  0 rom  

image.png

九、格式化:mkfs

格式化命令格式

  • mkfs -t 指定分区类型 分区

  • mkfs.分区类型 分区

补充

创建交换文件系统:mkswap命令

mkswap命令格式:

  • 创建交换文件系统,分区设备位置要使用绝对路径:mkswap 分区设备      

  • 启用交换分区:swapon 分区设备

  • 停用交换分区:swapoff 分区设备    

  • 显示所有启用状态的交换分区:swapon -s          

格式化示例

1.格式化普通分区

[root@localhost ~]# mkfs -t      //格式化前先筛选文件系统
btrfs   cramfs  ext2    ext3    ext4    fat     minix   msdos   vfat    xfs     
[root@localhost ~]# mkfs -t xfs /dev/sdb1   //格式化普通分区
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, 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

image.png

2.格式化逻辑分区

[root@localhost ~]# mkfs.xfs /dev/sdb5  //格式化逻辑分区
meta-data=/dev/sdb5              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, 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

image.png

九、挂载:mount

挂载命令格式:mount 存储设备 挂载点目录

一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据

挂载示例

[root@localhost ~]# mount /dev/sdb1 /mnt   //把普通分区挂载到mnt目录
[root@localhost ~]# df    //查看挂载,磁盘剩余量
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 48804576 4525476 44279100   10% /
devtmpfs                  917596       0   917596    0% /dev
tmpfs                     933524       0   933524    0% /dev/shm
tmpfs                     933524    9224   924300    1% /run
tmpfs                     933524       0   933524    0% /sys/fs/cgroup
/dev/sda1                1942528  182412  1760116   10% /boot
tmpfs                     186708      12   186696    1% /run/user/42
tmpfs                     186708       0   186708    0% /run/user/0
/dev/sdb1                5232640   32944  5199696    1% /mnt

image.png

补充

卸载文件系统:umount命令

umount命令格式

  • umount 存储设备位置

  • umount 挂载点目录

十、永久挂载

使用mount命令手动挂载文件设备后,必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。

在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,从左到右包括六个字段(使用空格或者制表符分隔)。以 “/dev/mapper/centos-root / xfs defaults 0 0” 为例,各部分含义如下所述:

  • 字段1:设备名或设备卷标名、或设备的UUID(建议使用UUID,可使用lsbik命令查看)。

  • 字段2:文件系统的挂载点目录的位置。

  • 字段3:文件系统类型,如 XFS、swap 等。

  • 字段4:挂载参数,即 mount 命令”-o“选项后可使用的参数。例如,default、rw、ro、noexec 分别表示为默认参数、可读可写、只读、禁用执行程序。

  • 字段5:表示文件系统是否需要 dump 备份(dump是一个备份工具)。一般设为1时表示需要,设为0时将被dump忽略。

  • 字段6:该数字决定在系统启动时进行磁盘检查的顺序。0表示不进行检查, 1表示优先检查,2表示其次检查。根分区可设为1,其他分区设置为2。一般不进行检查,会影响系统性能。

示例

编辑/etc/fstab 文件,设置/dev/sdb1 每次开机后自动挂载到/mnt 目录下

1.查看设备的唯一标识符UUID

image.png

2.编辑/etc/fstab 文件,更改配置

image.png

注意

修改/etc/fstab 文件时,每一个字段都必须填写正确,如果有错误,下次开机时会有“Control-D"报错,导致无法正常启动。