磁盘管理 (分区、格式化、挂载、卸载)

磁盘管理(基础篇)

磁盘管理 (分区、格式化、挂载、卸载)

磁盘结构

  • 磁盘的0磁道0柱面1扇区存储的是MBR(主引导记录)信息,位于最外圈。
  • MBR共512个字节,446的主引导程序+64的分区表+2的魔数(分区结束符)组成。
    一个分区占16个字节,64个字节的分区表,所以主分区和扩展分区加起来不能超过4个。

磁盘表示

  • /dev/sda1
    /dev 设备文件目录
    sd:sata,sas,usb,scsi接口硬盘 hd:代表IDE接口的硬盘
    a:linux用字母表示第几块磁盘,a代表第一块
    1:linux用数字表示某块磁盘的第几个分区

    磁盘使用概述

  • 磁盘初始化
    MBR OR GPT
  • 磁盘分区
    一个磁盘只能分4个分区:主分区+扩展分区<=4
  • 格式化
    文件系统主要负责数据如何存储在硬盘上
  • 磁盘挂载
    设备必须经过挂在才可以使用

分区介绍
计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成一块一块的硬盘区域就是磁盘分区。传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装操作系统,直接存放文件。扩展分区无法直接使用,必须在扩展分区中再次划分逻辑驱动器,才可以经过格式化后存放数据。

fdisk分区命令
linux fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。
语法:fdisk [命令选项][参数]
必要选项:-l 列出所有分区表
参数:可以是指定的磁盘,如果不指定,默认列出所有磁盘

  • 一共3块磁盘:/dev/sda、/dev/sdb、/dev/sdc
  • /dev/sda这块磁盘进行了分区,带*的分区/dev/sda1表示系统启动盘。Id:83表示linux的基本分区,Id:8e表示linux的逻辑卷分区。System:Extended表示扩展分区。System:Linux LVM表示逻辑卷分区。
  • /dev/sdb、/dev/sdc这两块盘并没有进行磁盘分区。
  • /dev/mapper/centos-root为卷组。
  • /dev/mapper/centos-swap为交换分区。

主分区可以直接格式化存数据,扩展分区要划逻辑驱动器,对逻辑驱动器进行格式化后才能存数据。

磁盘分区

练习

  • 分一个主分区
  • 分一个扩展分区,并分两个逻辑驱动器
  • 分一个交换分区
  1. 添加一个主分区(500M)。
  2. 添加一个扩展分区(剩下所有的空间)。此时再想添加一个主分区,就会发现扇区不够了。
  3. SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。
1
fdisk /dev/sdb
  1. 添加两个逻辑驱动器 /dev/sdb5 /dev/sdb6 各分500M空间
  1. 添加一个交换分区
  1. 查看/dev/sdb磁盘分区结果

磁盘格式化

格式化

  • 格式化是指对磁盘或磁盘中的分区进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清楚。
    格式化就相当于给磁盘装一个大管家,这位大管家负责数据怎么在硬盘中读入读出。但是这位大管家在接管这块硬盘的时候会一股脑清除里面原来的东西,接着再按照自己的方式管理这块磁盘。
  • 格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化。

文件系统

  • 文件系统:负责管理和存储数据的系统
    数据是以什么方式存在于硬盘,又是以什么方式读出的。
  • 文件系统类型
    ext2、ext3、ext4、xfs

mkfs
mkfs [options] device
命令选项
-t:指定文件系统类型

练习

  • 主分区格式化为ext4
  • 两个逻辑分区分别格式化为xfs、ext3
  • 交换分区的格式化
1
2
3
4
5
6
7
8
9
#将/dev/sdb1主分区格式化为ext4文件系统
mkfs -t ext4 /dev/sdb1
```

<img src="https://blog-image-host.oss-cn-shanghai.aliyuncs.com/gyqblog/ext4.JPG"/>

```bash
#将/dev/sdb5逻辑分区格式化为xfs文件系统
mkfs -t xfs /dev/sdb5
1
2
#将/dev/sdb6逻辑分区格式化为ext3文件系统
mkfs -t ext3 /dev/sdb6
1
2
#将/dev/sdb7交换分区格式化
mkswap /dev/sdb7

磁盘挂载

挂载

  • linux中的所有设备必须经过挂载才可以被用户使用
  • 挂载的方式其实是将某个设备挂到文件系统的某个文件夹

mount

  • 命令语法
    mount device directory
  • 命令选项
    -a:挂载所有文件系统,参考文件/etc/fstab
    -l:显示当前挂载
    -t:文件系统类型
    -o:指定挂载权限
1
2
#查看当前系统的挂载信息,发现并没有/dev/sdb相关的挂载信息
mount -l

手动挂载/dev/sdb1、/dev/sdb5、/dev/sdb6
系统重启后,手动挂载方式挂载的分区不会生效

1
2
3
4
5
6
7
8
9
mkdir /opt/sdb1
mkdir /opt/sdb5
mkdir /opt/sdb6
mount /dev/sdb1 /opt/sdb1 #mount -t ext4 /dev/sdb1 /opt/sdb1
mount /dev/sdb5 /opt/sdb5 #mount -t xfs /dev/sdb5 /opt/sdb5
mount /dev/sdb6 /opt/sdb6 #mount -t ext3 /dev/sdb6 /opt/sdb6
#不使用-t参数指定文件系统类型,系统也会自动识别文件系统类型
#查看当前系统挂载信息,发现多出了/dev/sdb相关信息
mount -l

umount

  • umount:卸载文件系统
  • umount 设备挂载点|设备源
    -l 加上-l参数进行卸载即——在该设备处于使用中是不进行卸载,在该设备处于空闲时进行卸载
1
2
3
4
5
6
#卸载3个挂载点
umount /dev/sdb1 #umount /opt/sdb1
umount /dev/sdb5 #umount /opt/sdb5
umount /dev/sdb6 #umount /opt/sdb6
#查看系统当前挂载信息,发现/dev/sdb相关信息消失
mount -l | tail
1
2
3
4
#尝试对/dev/sdb5进行只读挂载
mount -o ro /dev/sdb5 /opt/sdb
#查看当前挂载信息
mount -l | tail
1
2
3
#检测/dev/sdb5的权限
cd /opt/sdb5
touch test.txt

自动挂载

  • /etc/fstab文件
    设备 挂载点 文件系统 权限 备份 检测
    权限
    auto:系统自动挂载,fstab默认就是这个选项
    defaults:rw、suid、dev、exec、auto、nouser、async
    noauto:开机不自动挂载
    nouser:只有超级用户可以挂载
    ro:按只读权限挂载
    rw:按可读可写权限挂载
    user:任何用户都可以挂载
    备份
    1:允许dump备份程序备份
    0:忽略备份操作
    fsck磁盘检测设置
    0:永远不检测
    /目录分区永远都是1
    2:其他分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查

练习

  • 自动挂载一下分区
  • 主分区 格式化ext4 /opt/sdb1
  • 扩展分区中的两个逻辑驱动器 格式化为xfs ext3 /opt/sdb[5-6]
  • 交换分区 swap
1
2
#查看以下当前交换分区的大小
free -m

想要设备文件的挂载永久生效,就需要把挂载的信息写入配置文件/etv/fstab。

1
2
3
4
5
6
7
8
9
10
11
vim /etc/fstab
#添加以下内容到/etc/fstab文件中
#/dev/sdb
/dev/sdb1 /opt/sdb1 ext4 defaults 0 0
/dev/sdb5 /opt/sdb5 xfs ro 0 0
/dev/sdb6 /opt/sdb6 ext3 rw 0 0
/dev/sdb7 swap swap defaults 0 0
#挂载
mount -a
#查看挂载系统当前挂载信息,主分区和两个逻辑分区都挂载成功
mount -l
1
2
3
4
5
6
#使用设备名(/dev/sdb[number])的方式挂载可能会出现找不到设备而加载失败的问题。uuid作为系统中存储设备提供的唯一标志字符串,使用UUID则不会出现这样的情况   
#查看uuid的3种方法
blkid
lsblk
ll /dev/disk/by-uuid
#也就是说,将上述/dev/sdb1换成其对应的uuid,其他的不变
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#查看当前交换分区大小,Swap分区大小没有变化,mount -a不能挂载swap分区
free -m
```

<img src="https://blog-image-host.oss-cn-shanghai.aliyuncs.com/gyqblog/freem1.JPG"/>


```bash
#swap分区的挂载方式
swapon -a #会自动读取/etc/fstab文件中的分区挂载信息
#也可以通过查看交换分区的大小,相比之前,Swap大小增加了1G
free -m
```

<img src="https://blog-image-host.oss-cn-shanghai.aliyuncs.com/gyqblog/freem2.JPG"/>


## 另外两个命令df、du

```bash
#df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计
df -Th
1
2
#du查看文件大小
du -h /addfirst/reference/mouse/index/bowtie2-build-index/genome.1.bt2
1
2
#du -sh查看文件夹大小
du -sh /addfirst/reference/

卸载分区(以/dev/sdb为例)

1
2
3
4
5
6
7
#查看当前分区情况
df -lh
#卸载/dev/sdb5分区,但是重启后又会恢复到挂载状态
umount /dev/sdb5
#查看当前分区情况,可以看到/dev/sdb5分区消失
df -lh
#卸载了还可以再挂载,数据都还在

删除分区

1
fdisk /dev/sdb
1
2
#查看/dev/sdb的分区信息
fdisk -l /dev/sdb

磁盘卸载

1
2
3
4
5
#删除掉配置文件/etc/fstab中/dev/sdb的相关信息
vim /etc/fstab
reboot
#重启后查看是否卸载
df -lh

😄然后关机,就可以删掉相应的硬盘,重新开机后一切正常。

参考资料

https://www.linuxprobe.com/chapter-06.html
https://www.bilibili.com/video/av76344853?p=36
https://www.cnblogs.com/maohai-kdg/p/12067101.html