Home Linux 学习 第十二章 管理磁盘和文件系统
Post
Cancel

Linux 学习 第十二章 管理磁盘和文件系统

第十二章 管理磁盘和文件系统

12.1 了解磁盘存储器

在大多数现代操作系统中,数据存储器的基本工作原理都是相同的。磁盘用作永久存储器,而 RAM (Random Access Memory,随机存储器) 和交换区则用作临时存储器。例如,当运行一条命令时,该命令将从硬盘复制到 RAM,以便计算机处理器 (CPU) 可以更快地访问该命令

相对于从硬盘中访问数据,CPU 可以更快地从 RAM 中访问数据。但因为 RAM 造价过高,且断电即清除数据,磁盘容量是远大于 RAM 的

当运行太多进程或运行了一个带有内存泄漏的进程而将 RAM 填满时,如果系统没有提供一种拓展系统内存的方法,则会导致新进程失败,于是便有了交换空间。采用一些算法将一些数据从 RAM 中换到磁盘中,在需要时再换回去

当需要在不同类型的操作系统之间交换文件时,通常采用 VFAT 文件系统

12.2 对硬盘进行分区

更改分区可能导致系统无法启动,建议先拿空硬盘熟练掌握后再实际应用

12.2.1 理解分区表

从传统上将,PC 体系结构的计算机使用 MBR (Master Root Record) 分区表来存储关于硬盘分区大小和布局信息。然而,近年来,一种被称为 GUID (Global Unique Identifier) 分区表的新标准在部分 UEFI 计算机体系结构的计算机上得到了应用,从而取代了较老的 BIOS 系统启动方法

MBR 规范所固有的局限性带来了对 GUID 分区的需求。MBR 分区的大小被限制在 2TB,而 GUID 分区可以创建最大 9.4ZB 的分区

fdisk 命令不支持 gpt 分区,可以使用 parted 命令

12.2.2 查看磁盘分区

fdisk -l /dev/sdaparted -l /dev/sdb

  • 由 sd? 设备 (如 sda 、sdb 等) 所表示的 SCSI 或者 USB 存储设备最多可以有 16 个次要设备 (比如主 /dev/sdc 设备以及 /dev/sdc1 到 /dev/sdc15) ,所以共有 15 个分区

  • 由 nvme 设备 (如 nvme0 、nvme1 等) 所表示的 NVMe SSD 存储设备可以划分一个或多个名称空间 (大多数设备只使用第一个) 和分区,例如 /dev/nvme0n1p1 表示第一个 nvme 设备上第一个名称空间的第一个分区

  • 对于 x86 计算机,磁盘最多可以有 4 个主分区。所以如果想要 4 个以上的分区,至少有一个分区时扩展分区。四个主分区外的任何分区都是逻辑分区,使用了来自拓展分区的空间

12.2.3 创建单分区硬盘

一般添加一个存储介质的过程:

  1. 安装新的硬盘或插入新的 USB 闪存驱动器

  2. 对新硬盘进行分区

  3. 在新硬盘上创建文件系统

  4. 挂载文件系统

如果使用 parted 命令进行修改,请谨慎执行每一步,因为 parted 命令的更改是立即生效的 而 fdisk 命令是可撤销的,只有在确定应用更改时才会实际更改

数据无价,谨慎操作

  1. 确定新增加的设备的名称

方法有许多,例如查看系统日志

journalctl -f

例如分配的名称为 /dev/sdb

  1. 如果设备自动挂载需要先卸载

查看是否挂载 /dec/sdb:mount | grep sdb

卸载分区:umount /dev/sdb1

  1. 使用 parted 命令创建分区

parted /dev/sdb

执行后将处于 parted 命令模式,可以使用 parted 单字母命令设置来使用分区

  1. 删除分区

单命令 p 列出所有分区

使用 rm 命令,回车后输入相应 Number 即可删除某分区

  1. 创建 gpt 分区表

使用命令 mklabel gpt

  1. 创建新分区

输入 mkpart 命令,系统会提示输入分区名称,文件系统类型,然后是分区的开始和结束

例如命名 yexca-UDisk ,文件类型为 xfs ,分区从 1MB 开始,到 123GB 结束:

1
2
3
4
5
(parted) mkpart
Partition name? []? yexca-UDisk
File system type? [ext2]? xfs
Start? 1
End? 123GB
  1. 检查分区是否正确创建

单命令 p 列出所有分区

  1. 分区创建完成后需要在分区上创建文件系统

例如创建 xfs 文件系统:mkfs -t xfs /dev/sdb1

若没有 -t 选项,默认创建 ext2 文件系统

  1. 挂载文件系统
1
2
3
4
# 创建挂载文件夹
mkdir /mnt/tmp
# 挂载 /dev/sdb1 到 /mnt/tmp
mount /dev/sdb1 /mnt/tmp
  1. 卸载文件系统

使用命令 umount /dev/sdb1

默认情况下一般插入 USB 设备会自动挂载

如果需要手动挂载,可在 /etc/fstab 添加一行

1
/dev/sdb1    /mnt/tmp    xfs    defaults    0  1

共六段

  1. 分区

  2. 挂载的文件夹

  3. 文件系统

  4. 分区启动时挂载

  5. 是否使用 dump 命令备份分区文件 (0 为不备份)

  6. 在一定的挂载数量之后对分区进行错误检查

12.2.4 创建一个多分区磁盘

使用 fdisk 命令介绍

  1. 进入 fdisk 命令模式

fdisk /dev/sdb

  1. 创建分区

单命令 n ,然后选择主分区 p 或拓展分区 e ,选择分区位置 (默认即可)

然后是分配的空间,起始空间可以默认,回车后输入结尾空间:例如分配 5 GB 空间则输入 +5G ,若直接输数字则会被认为是扇区

第四个分区,即拓展分区,分配空间可以两次都是默认

  1. 检查分区

单命令 p

  1. 默认的分区类型是 Linux ,如果想要转换分区类型

使用命令 t ,选择分区数,然后输入 L 查看分区类型列表,找到十六进制码,然后输入以更改

  1. 检查更改并保存更改

单命令 p 以检查,单命令 w 以保存更改

  1. 更改完毕后,检查内核是否知道对分区表的更改
1
2
3
4
5
grep sdb /proc/partitions
# 如果没有输出预料的结果,执行以下命令
partprobe /dev/sdb
# 再次检查
grep sdb /proc/partitions
  1. 创建文件系统
1
2
3
4
5
6
7
8
9
10
# 创建 ext4 文件系统
mkfs -t ext4 /dev/sdb1
# 创建交换区
mkswap /dev/sdb2
# 创建 ext2 文件系统 (默认值)
mkfs /dev/sdb3
# 创建 VFAT 文件系统
mkfs -t vfat /dev/sdb4
# 使该分区称为 LVM 物理卷
pvcreate /dev/sdb5

12.3 使用逻辑卷管理分区

如果磁盘空间不足,恐怕只能将数据复制到另一个更大的磁盘中,但该过程需要停机且效率低下

LVM (Logical Volume Management ,逻辑卷管理) 可采用灵活且高效的方式处理更改存储器的需求。通过使用 LVM ,可将物理磁盘分区添加到被称为 卷组 的空间池。逻辑卷根据需要从卷组分配空间

12.3.1 检查现有的 LVM

使用命令 fdisk -l /dev/sda 查看是否存在 Linux LVM 分区,假设 /dev/sda2 为 LVM 分区

查看该 LVM 分区是否在 LVM 组中使用

pvdisplay /dev/sda2

假设卷组 (VG Name) 是 vg_abc ,查看卷组的信息

vgdisplay vg_abc

可以从物理卷使用的最小存储单位是 PE (Physical Extent) Size

查看卷组的 PE 分配的位置

lvdisplay vg_abc

输出将展示多个逻辑卷名称,这些逻辑卷可以和物理卷一样直接使用名字进行挂载

12.3.2 创建 LVM 逻辑卷

LVM 逻辑卷的使用是自上而下进行的,而创建 LVM 逻辑卷的过程则是从下而上进行。首先创建一个或多个物理卷 (pv) ,然后使用物理卷创建卷组 (vg) ,最后从卷组创建逻辑卷 (lv)

  1. 准备一个有 LVM 分区的存储设备

创建过程 12.2.4 有提及

  1. 将该物理卷加入卷组

vgcreate myvg0 /dev/sdb5

  1. 查看卷组

vgdisplay myvg0

  1. 若分区为 400M ,可以使用 396M 空间 (以 4M 为单位)
1
2
3
4
5
6
# 从卷组部分空间创建一个逻辑卷,例如创建 1G 逻辑卷
lvcreate -n name -L 1G myvg0
# 查看该逻辑卷是否存在
ls /dev/mapper/myvg0*
# 输出以下则创建成功
/dev/mapper/myvg0-name
  1. 放入文件系统并挂载
1
2
3
4
5
6
7
8
# 创建 ext4 文件系统
mkfs -t ext4 /dev/mapper/myvg0-name
# 创建挂载文件夹
mkdir /mnt/tmp
# 挂载
mount /dev/mapper/myvg0-name /mnt/tmp
# 检查是否挂载成功
df -h /mnt/tmp
  1. 或者也可以写入 /etc/fstab 以自动挂载

12.3.3 扩大 LVM 逻辑卷

如果用完了逻辑卷的空间,可添加空间而不必卸载该逻辑卷。为此,卷组中必须有可用的空间,然后扩大逻辑卷

  1. 检查剩余空间
1
2
3
4
# 检查卷组可用空间
vgdisplay myvg0
# 检查逻辑卷可用空间
df -h /mnt/tmp
  1. 拓展逻辑卷

lvextend -L +1G /dev/mapper/myvg0-name

  1. 调整文件系统大小

resize2fs -p /dev/mapper/myvg0-name

  1. 检查是否调整成功

df -h /mnt/tmp

12.4 挂载文件系统

事实上在上两节中已经涉及了挂载文件系统命令 mount 已经自动挂载配置 (文件 /etc/fstab)

12.4.1 被支持的文件系统

输入命令 cat /proc/filesystems 以查看支持的文件系统类型,以下仅部分

文件系统 描述
ext4 流行的 ext3 文件系统的继承者。支持最大 1EB 的卷以及最大 16 TB 的文件
iso9660 从 High Sierra 文件系统 (CD-ROM 的原始标准) 演变而来。数据 CD-ROM 通常使用该文件系统
Minix 最初用于 UNIX 的 Minix 版本。支持最多只有 30 个字符的文件名
msdos MS-DOS 文件系统类型,可用于挂载来自 Windows 操作系统的软盘
vfat Microsoft 扩展的 FAT 文件类型
exfat 为 SD 卡、USB 驱动器和其他闪存优化的扩展 FAT 文件系统
proc 不是真正的文件系统。是一个 Linux 内核的文件系统接口。/proc 的挂载点应该是一个 proc 文件系统。许多实用工具依赖 /proc 才能访问 Linux 内核信息
ReiserFS 日志文件系统。曾经的多个 Linux 发行版本默认文件系统类型,但如今是 ext 和 xfs
swap 用于交换分区
squashfs 压缩且只读的文件系统类型
NFS Network Filesystem,用于在其他 Linux 或 UNIX 计算机上挂载文件系统
ntfs Windows NT 文件系统
xfs 最早由 Silicon Graphics 开发的高性能文件系统,可很好地使用大文件
gfs2 一种共享磁盘文件系统,运行多台计算机使用相沟通的共享磁盘,而不必通过网络文件系统层,如 CIFS 、NFS 等

输入 man fs 了解更多 Linux 文件系统相关信息

12.4.2 启动交换区

1
2
3
4
5
6
# 查看交换分区数量
free -m
# 创建交换分区
mkswap /var/opt/myswap
# 启用交换分区
swapon /var/opt/myswap

如果在 /etc/fstab 添加了交换分区相关条目,如:

/var/opt/myswap swap swap defaults 0 0

可以使用 swapon -a 启用

12.4.3 禁用交换区

swapoff /var/opt/myswap

12.4.4 使用 fstab 文件定义可挂载的文件系统

12.2.3 已介绍,不过字段二可以使用 UUID 而非设备名,因为设备名是可变的

查看 UUID:blkid

12.4.5 使用 mount 命令挂载文件系统

同样在 12.2.3 已介绍

12.4.6 以环回方式挂载磁盘镜像

也就是将 ISO 镜像文件挂载

1
2
3
4
# 创建挂载文件夹
mkdir /mnt/tmp
# 挂载
mount -o loop name.iso /mnt/tmp

12.4.7 使用 umount 命令

可以输入设备分区名或目录名

设备分区名:umount /dev/sdb1

目录名:umount /mnt/tmp

通常,最好使用目录名

如果一个目录正繁忙无法被卸载,可以:

  • 延迟卸载:umount -l

  • 强制卸载:umount -f

12.5 使用 Cockpit 管理存储

GUI ,开启参考第八章

This post is licensed under CC BY 4.0 by the author.

Linux 学习 第十一章 获取用户账户

数据库学习一 数据库导论