linux磁盘管理

一,磁盘基础知识

  • 硬盘设备是由大量的扇区组成,每个扇区的容量为512B。其中第一个扇区里面保存着主引导记录和分区表信息,主引导记录占446B,分区表64B,结束符2B;
  • 其中分区表每记录一条信息就使用了16B,所以最多只能4个分区信息可以写入第一个扇区中,着4个分区就是主分区
  • 由于第一个扇区最多只能创建4个分区,为了解决分区个数不够的问题,可以将第一个的分区表中的16B(原本要写入主分区信息)的空间(扩展分区)拿出来指向另外一个分区
  • 扩展分区不是真实存在的,而更像是一个占用16B分区表空间的指针(指向另一个分区的指针)。
  • 如此用户一般使用3个主分区和一个扩展分区的方法,然后在扩展分区中创建数个逻辑分区,由此满足多发区的需求

注意:

  1. 扩展分区并不是真实分区,只是一个指向下一个分区的指针,这种指针结构形成一个单向链表
  2. 单向链表是一种数据结构,其中每个节点包含一个数据元素和一个指向下一个节点的指针。这种链表的链接方向是单向的,因此对链表的访问需要通过顺序读取从头部开始。单向链表常用于需要频繁插入和删除操作的场景中

二,磁盘设备及命名

Linux系统中一切皆是文件,硬件设备也不例外。每一个硬件设备都有对应的文件名称,而系统内核中的udev设备管理器会自动将硬件名称规范起来,以便于用户通过设备的文件名称了解设备属性和分区信息。

Linux系统中的磁盘设备通常位于 /dev 目录下,设备名称根据不同的类型和接口有所不同。常见的磁盘设备命名方式如下:

  • IDE/SATA 磁盘:/dev/sda, /dev/sdb 等。第一个硬盘通常是 /dev/sda,第二个是 /dev/sdb,以此类推。
  • SCSI 磁盘:/dev/sda, /dev/sdb 等,与SATA设备命名规则相同。
  • NVMe 磁盘:/dev/nvme0n1, /dev/nvme1n1 等,表示NVMe接口的固态硬盘(SSD)。
  • USB 存储设备:通常以 /dev/sdX 或 /dev/sdXY(X是字母,Y是分区号)命名。

常见硬件设备在Linux中的文件名:

|----------|-----------------------|
| 硬件设备 | 文件名称 |
| IDE硬盘 | /dev/hd[a-d] |
| SATA硬盘 | /dev/sd[a-p] |
| 光驱 | /dev/cdrom 或 /dev/sr0 |
| USB存储设备 | /dev/sd[a-p] |
| 网络接口卡 | /dev/net/tun |
| 打印机 | /dev/lp[0-9] |
| 鼠标 | /dev/input/mouse0 |
| 显卡 | /dev/fb0 |

一台主机上可以有至多 16 块不同的硬盘,硬盘分区编号规则如下

  1. 主分区或扩展分区的编号从1开始,4结束
  2. 逻辑分区从编号5开始

/dev/sda5 设备文件名称包含的信息:

  1. 设备类型:/dev/目录中保存的是硬件设备文件。
  2. 存储设备:sd表示这是一个存储设备。
  3. 设备顺序:a表示这是系统中同类接口中第一个被识别到的设备。
  4. 分区编号:5表示这是一个逻辑分区。

扩展:udev设备管理器概述

udev是Linux内核2.6系列中的设备管理器。它的主要功能是管理/dev目录下的设备节点。udev在用户空间运行,而不是在内核空间运行,这使得它更加灵活和强大1

主要功能

  1. 动态管理设备:当设备添加或删除时,udev会监听内核发出的uevent,相应地添加或删除/dev下的设备文件。
  2. 自定义命名规则:udev允许用户通过定义规则文件来为设备生成具有标识性的设备文件名。
  3. 设定设备权限和所有者 :udev可以根据设备的属性来设置设备文件的权限和所有者/组1

工作流程

  1. 事件触发:当设备状态发生变化时(如添加、删除设备),内核会发出uevent。
  2. 规则匹配:udev守护进程接收到uevent后,会根据规则文件中的定义来匹配设备属性。
  3. 执行操作 :如果找到匹配的规则,udev会根据规则中的指示来执行相应的操作,如创建设备文件、设置权限等1

配置与使用

在CentOS中,udev通常是默认安装的,无需手动下载和安装。用户可以通过编辑/etc/udev/udev.conf 文件来覆盖udev的默认值,或通过编写自定义规则文件来实现特定的设备管理需求1

规则文件

udev的规则文件通常存放在/etc/udev/rules.d/目录下,以*.rules命名。规则文件由多条规则组成,每条规则由多个键值对组成,用于匹配设备属性并执行相应的操作1

三,磁盘管理工具使用

虚拟机新增硬盘的流程

  1. 打开虚拟机软件:首先,需要打开你正在使用的虚拟机软件,例如VMware或者VirtualBox。
  2. 选择目标虚拟机:在虚拟机列表中找到你想要添加硬盘的虚拟机,并选中它。
  3. 进入设置界面:通常在虚拟机软件的顶部菜单栏中会有"设置"或者"配置"的选项,点击它进入虚拟机的设置界面。
  1. 添加新硬盘:在设置界面中,找到"硬盘"或者"存储"选项,然后点击"添加硬盘"或者类似的选项。
  1. 配置新硬盘:在弹出的窗口中,你可以选择硬盘的类型(例如SATA或者SCSI),以及硬盘的大小。你可以根据需要选择合适的配置。
  1. 确认并保存设置:完成配置后,点击"确定"或者"保存"按钮,确认你的设置。此时,虚拟机软件会创建一个新的虚拟硬盘并将其添加到虚拟机中。
  2. 启动虚拟机:完成上述步骤后,启动虚拟机。在虚拟机内部,你应该能够看到新增的硬盘。如果需要,你可以对其进行分区、格式化等操作。

常用的磁盘管理工具

  1. fdisk:这是一个基于菜单的命令行工具,用于对硬盘进行分区。它在DOS、Windows和Linux中都有相应的应用程序1
  2. cfdisk:这是一个基于文本用户界面的分区工具,类似于fdisk,但提供了更友好的用户界面1
  3. parted:这是一个功能强大的分区工具,支持对大容量磁盘进行分区操作。它可以用来创建、删除、调整分区大小等操作1
  4. mkfs:这个命令用于在硬盘分区上建立文件系统。类似于Windows下的格式化硬盘。建立文件系统的命令是mkfs,格式如下:。mkfs[参数]文件系统 -t:指定要创建的文件系统类型。 -c:建立文件系统前首先检查坏块。 -V:输出建立文件系统详细信息1
  5. fsck:这个命令主要用于检查文件系统的正确性,并对Linux磁盘进行修复。fsck命令的格式如下:。fsck[参数选项]文件系统 -t:给定文件系统类型,若在/etc/fstab中已有定义或kernel本身已支持的不需添加此 -s:一个一个地执行fsck命令进行检查。 -A:对/etc/fstab中所有列出来的分区进行检查。 -C:显示完整的检查进度。 -d:列出fsck的debug结果。 -a:如果检查中发现错误,则自动修复。 -r:如果检查有错误,询问是否修复1
  6. dd:这个命令用于将指定的输入文件拷贝到指定的输出文件上。并且在复制过程中可以进行格式转换。dd命令与cp命令的区别在于:dd命令可以在没有创建文件系统的软盘上进行,拷贝到软盘的数据实际上是镜像文件。类似于DOS中的diskcopy命令的作用。dd命令的格式为:。dd[bs=块字节大小][count=块数] 1
  7. du:这个命令用于显示磁盘空间的使用情况。该命令逐级显示指定目录的每一级子目录占用。du[参数选项][name---] du命令的参数选项: -s:对每个name参数只给出占用的数据块总数。 -b:以字节为单位列出磁盘空间使用情况(AS4.0中默认以KB为单位)。 -k:以1024字节为单位列出磁盘空间使用情况。 -l:计算所有文件大小,对硬链接文件重复计算。 -x:跳过在不同文件系统上的目录,不予统计1

项目一: fdisk 工具使用

fdisk 是一个用于管理硬盘分区的命令行工具,常用于 Linux 和类 Unix 操作系统。它提供了对硬盘分区表的创建、删除、修改和查看的功能。通过 fdisk,用户可以在磁盘上创建新的分区、删除旧的分区、调整现有分区的大小或类型,并显示分区的详细信息。

主要功能:

  1. 查看分区:列出磁盘上的所有分区及其详细信息。
  2. 创建新分区:在未分配空间的磁盘上创建新分区。
  3. 删除分区:删除现有的分区。
  4. 修改分区:调整分区的大小或类型。
  5. 更改分区类型:修改分区的文件系统类型(如从 Linux 类型更改为 Windows 类型)。
  6. 写入更改:将所做的更改写入磁盘。

fdisk -l:列出所有磁盘的分区信息。

fdisk /dev/sda:启动 fdisk 对 /dev/sda 磁盘进行操作。

|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| 选项 | 功能 |
| -u | 与 -l搭配使用,显示分区数目12 |
| -s | 指定分区2 |
| -v | 显示版本信息2 |
| m | 显示菜单和帮助信息13 |
| a | 活动分区标记/引导分区13 |
| d | 删除分区13 |
| l | 显示分区类型13 |
| n | 新建分区13 |
| p | 显示分区信息13 |
| t | 修改分区的类型13 |
| w | 保存并写入分区表的更改13 |
| q | 退出fdisk而不保存更改13 |
| v | 进行分区检查1 |

1,首先通过编辑虚拟机设置增加一块硬盘,格式为SCSI,大小为20G,命名为/dev/sdb

lsblk查看新增的硬盘设备,可以看到命名为/dev/sdb

2,对新增硬盘进行操作,需求是在硬盘上创建大小500MB,文件系统为ext4的/dev/sdb1的主分区

首先打开fdisk操作菜单 fdisk /dev/sdb

输入p,查看当前分区表。可以看到目前是没有任何分区的

根据信息可以看到/dev/sdb硬盘大小为21.5GB,21474836480 字节,41943040 个扇区,每个扇区大小是512字节。分别能从第七行的七个字段读取到起始扇区(Start)、结束扇区(End)、块数(Blocks)、分区ID(Id)以及分区类型(System)

3,输入n,创建一个新分区;输入p,选择创建主分区;输入该分区的其实,结束扇区,以确定分区大小。也可以使用+sizeM或sizeK的方式指定分区大小

4,输入L能够查看已知的分区类型及其id,例如linux的id为83。输入t,指定/dev/sdb1的文件类型为Linux

5,分区操作结束后,输入w,将分区信息写入分区表并退出

6,如果需要删除磁盘分区,则需在fdisk菜单下输入d,并选择需要删除的分区即可,删除操作完成之后输入w,保存退出

7,为了以便于项目二的实施开展,需要重复1-5的步骤以建立磁盘分区/dev/sdb2,/dev/sdb3。fdisk菜单操作完成效果如下

项目二: mkfs 工具使用

硬盘分区之后,下一步就需要建立文件系统。类似于windows下的格式化硬盘,在硬盘分区上建立文件系统会冲掉分区上的数据,而且不可恢复。建立文件系统的命令是mkfs

常见文件系统类型

|------------|----------------------------------------|------------------------------------------|
| 文件系统类型 | 描述 | 适用场景 |
| ext4 | 第四代扩展文件系统,是 Linux 的默认文件系统,具有良好的性能和稳定性。 | 适用于大多数 Linux 发行版,适合通用用途。 |
| xfs | 高性能的文件系统,特别适合于大型数据集和高并发环境。 | 适用于数据库服务器、文件服务器等高性能需求的场景。 |
| btrfs | 提供先进的功能,如快照、压缩和数据校验,但相对复杂。 | 适用于需要高级数据管理功能的场景,如备份和恢复。 |
| ntfs | Windows 的默认文件系统,兼容性好。 | 适用于需要与 Windows 系统互操作的场景。 |
| vfat | 适用于 FAT32 文件系统,常用于 USB 驱动器和移动设备。 | 适用于需要跨平台兼容的场景,如在 Linux 和 Windows 之间共享数据。 |

项目需求:在 /dev/sdb1 上建立 ext4 类型的文件系统,建立时检测磁盘坏块并显示详细信息

1,mkfs -t ext4 -V -c /dev/sdb1

命令解析

  • mkfs: 这是"make filesystem"的缩写,用于在指定的设备上创建文件系统。
  • -t ext4: 这个选项指定了要创建的文件系统类型为 ext4。ext4 是一种广泛使用的文件系统,适用于大多数 Linux 发行版。
  • -V: 这个选项表示详细模式(verbose mode),会在执行命令时显示详细的信息。
  • -c: 这个选项用于在创建文件系统之前检查设备上的坏块。
  • /dev/sdb1: 这是目标设备或分区,在这个例子中,文件系统将被创建在 /dev/sdb1 分区上。

执行效果

执行这个命令将会:

  1. 在 /dev/sdb1 分区上创建一个 ext4 文件系统。
  2. 在创建文件系统之前,检查设备上的坏块。
  3. 以详细模式显示创建文件系统的过程和相关信息。

2,完成存储设备的分区与格式操作,接下来就需要挂载并使用存储设备。

  1. 首先创建一个用于挂载设备的挂载点目录;mkdir /newFS
  2. 然后mount命令将存储设备与挂载点进行关联;mount /dev/sdb1 /newFS
  3. 查看挂载状态和硬盘使用量信息;df-h

项目三,fsck命令

fsck(文件系统一致性检查)是一个用于检查和修复文件系统错误的命令行工具。它在 Unix 和类 Unix 系统(如 Linux)中非常常见。

基本介绍

fsck 工具可以检查和修复各种类型的文件系统,包括 ext2、ext3、ext4、FAT、NTFS 等。在 Linux 中,fsck 工具的具体实现可能有所不同,不同的发行版可能会使用不同的工具。

基本用法

使用 fsck 命令时需要 root 权限。基本命令格式为:

fsck [选项] 设备名

其中,设备名可以是磁盘分区的设备名(如 /dev/sda1),也可以是磁盘镜像文件的路径。

常用选项

  • -a: 自动修复所有错误。
  • -y: 自动回答"是"来修复所有错误。
  • -n: 不执行实际的文件系统检查和修复操作,仅显示出要执行的操作。
  • -v: 显示详细的信息。
  • -c: 检查磁盘上的坏道。
  • -r: 交互式修复错误。

项目需求:检测分区**/dev/sdb1****是否有错误,如果有错误则自动修复(必须先把磁盘卸载才能检查分区)**

umount /dev/sdb1

fsck -a /dev/sdb1

项目四,dd命令

dd 命令最初是作为 Unix 操作系统的一部分开发的,它的名字来源于早期的 IBM 主机系统中的"数据定义"(Data Definition)概念。dd 命令可以用于多种用途,包括但不限于:

  • 制作启动盘
  • 备份和恢复磁盘或分区
  • 创建和操作文件系统
  • 生成随机数据
  • 转换文件格式

基本用法

dd 命令的基本语法如下:

dd if=输入文件 of=输出文件 bs=块大小

其中:

  • if=输入文件:指定输入文件的路径。可以是普通文件、设备文件或特殊文件。
  • of=输出文件:指定输出文件的路径。可以是普通文件、设备文件或特殊文件。
  • bs=块大小:设置每个块的大小。可以使用不同的单位(如字节、千字节、兆字节等)来指定大小。

常用选项

除了上述基本参数外,dd 命令还支持许多其他选项,用于更精细地控制其行为。以下是一些常用的选项:

  • count=块数:指定要复制的块数。
  • skip=块数:跳过输入文件的前几个块。
  • seek=块数:跳过输出文件的前几个块。
  • conv=转换选项:进行数据转换操作,如大小写转换、字节交换等。
  • status=状态:显示复制进度和传输速率信息。

项目需求:当系统的交换分区不能满足系统的要求,而磁盘上又没有可用空间时,可以使用交换文件提供虚拟内存

1, dd if=/dev/zero of=/swap bs=1024 count=10240

参数解释

  • if=/dev/zero: 指定输入文件为 /dev/zero,这是一个特殊的文件,它会不断提供空字符(null bytes)。
  • of=/swap: 指定输出文件为 /swap,这是你将要创建的交换文件的名称。
  • bs=1024: 指定块大小(block size)为 1024 字节。
  • count=10240: 指定要复制的块数为 10240。

计算交换文件大小

通过 bs=1024 和 count=10240,可以计算出交换文件的大小: 文件大小=块大小×块数=1024字节/块×10240块=10485760字节=10MB文件大小=块大小×块数=1024字节/块×10240块=10485760字节=10MB

2,mkswap /swap

这个命令用于将一个文件或分区格式化为交换空间。/swap 是交换文件或分区的路径。执行此命令后,系统会将指定的文件或分区初始化为交换空间,以便在内存不足时使用

3,swapon /swap

这个命令用于启用之前创建的交换空间。/swap 是交换文件或分区的路径。执行此命令后,系统会开始使用该交换空间来扩展内存

4,swapoff /swap

这个命令用于禁用之前启用的交换空间。/swap 是交换文件或分区的路径。执行此命令后,系统将不再使用该交换空间

项目五,df命令

df命令是Linux系统中的一个命令,它的作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。

df [选项] [文件名]

  • -a 或 --all:显示所有的文件系统,包括虚拟文件系统。
  • -B 或 --block-size:指定单位大小。比如1k,1m等。
  • -h 或 --human-readable:以人们易读的GB、MB、KB等格式显示。
  • -i 或 --inodes:不用硬盘容量,而是以inode的数量来显示。
  • -k:以KB的容量显示各文件系统。
  • -m:以MB的容量显示各文件系统。
  • --no-sync:在统计使用信息之前不调用sync命令(默认)。
  • -sync:在统计使用信息之前调用sync命令。
  • -P 或 --portability:使用POSIX格式显示。
  • -t 或 --type=TYPE:只显示指定类型的文件系统。
  • -T 或 --print-type:显示文件系统类型。
  • --help:显示帮助信息。
  • --version:显示版本信息

1,df 列出各文件系统的磁盘占用情况

2,df -ia 列出各文件系统的i节点的使用情况

3,df -T 列出文件系统类型

项目六, du 命令

du命令是Linux系统中的一个命令,它的作用是显示目录或文件所占磁盘空间的大小。可以用来查看磁盘已被使用多少空间和还剩余多少空间。

du [选项] [文件或目录]

  • -a 或 --all:为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
  • -B 或 --block-size=SIZE:以SIZE为计量单位显示目录或文件大小。
  • -b 或 --bytes:以byte为单位显示目录或文件大小。
  • -c 或 --total:除了显示目录或文件的大小外,同时显示所有目录或文件的总和。
  • -h 或 --human-readable:以K,M,G为单位,提高信息的可读性。
  • -H 或 --si:与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
  • -l 或 --count-links:重复计算硬连接的文件。
  • -L 或 --dereference:统计符号连接源文件大小。
  • -P 或 --no-dereference:不同符号链接源文件的大小,默认。
  • -s 或 --summarize:仅显示总计,即当前目录的大小。
  • -S 或 --separate-dirs:显示每个目录的大小时,并不含其子目录的大小。
  • -x 或 --one-file-system:忽略位于其他文件系统上的目录。
  • --exclude=PATTERN:忽略符合PATTERN规则的目录或文件。
  • --max-depth=N:只显示N层内的目录大小。
  • --time:显示目录或子目录中文件的最后修改时间。
  • --time-style=STYLE:以STYLE指定的格式显示时间。

1,以字节为单位列出所有文件和目录的磁盘空间占用情况 du -ab

**项目七,**mount/umount

  • 在磁盘建立好文件系统后,还需要将新建立的文件系统挂载到操作系统上才能使用,这个过程称为挂载。文件系统所挂载的目录称为挂载点(Mount Point)
  • linux提供了/mnt,/media两个挂载点。一般挂载点是一个空目录,否则目录中原来的文件系统将被隐藏
  • 通常将光盘和软盘挂载载到/media/cdrom,/mnt/cdrom,/media/floppy/mnt/floppy中,对应的设备文件名正是/dev/cdrom和/dev/fd0

mount命令用于挂载文件系统,而umount命令用于卸载已经挂载的文件系统。这两个命令通常成对使用,以确保文件系统的正确管理和数据的一致性

mount [-afFhnrvVw] [-L标签] [-o选项] [-t文件系统类型] [设备名] [加载点]

常用选项

  • -a:加载/etc/fstab中所有的文件系统。
  • -f:不实际加载设备,可与-v等参数同时使用以查看mount的执行过程。
  • -o:指定加载文件系统时的选项,如async、atime、auto等。
  • -t:指定设备的文件系统类型,如hpfs、iso9660等。
  • -w:以可读写模式加载设备,默认设置。

umount [选项] [挂载点或设备]

常用选项

  • -f:强制卸载(仅用于NFS挂载的文件系统)。
  • -l:懒卸载,立即取消挂载点的挂载,但实际上延迟到文件系统不再使用时再完成卸载操作。
  • -v:显示详细信息。
  • -r:在卸载失败时尝试以只读方式重新挂载文件系统。

1,将 /dev/sdb1 设备上的 ext4 文件系统挂载到 /newFS 目录

mount -t ext4 /dev/sdb1 /newFS

2,卸载/dev/sdb1设备

umount /dev/sdb1 或者 umount /newFS

项目八,文件系统的自动挂载

在Linux系统中,文件系统的自动挂载可以通过两种主要方式实现:使用/etc/fstab文件和使用Autofs服务。

1**,使用/etc/fstab文件**

/etc/fstab文件包含了系统启动时需要自动挂载的文件系统信息。通过编辑这个文件,你可以指定哪些设备应该在系统启动时挂载到哪些挂载点。

步骤:

  1. 使用文本编辑器(如vim)打开/etc/fstab文件:
    vim /etc/fstab
  2. 在文件中添加一行来指定要自动挂载的文件系统。例如,如果你想将/dev/sdb1挂载到/newFS,可以添加如下行:
    /dev/sdb1 /newFS ext4 defaults 0 2
    这行的含义如下:
    • /dev/sdb1: 要挂载的设备或分区。
    • /newFS: 挂载点。
    • ext4: 文件系统类型。
    • defaults: 使用默认挂载选项。
    • 0: 表示是否需要备份(0表示不需要)。
    • 2: 表示文件系统检查的顺序(2表示在根文件系统之后检查)。
  3. 保存并退出编辑器。
  4. 验证实验效果 mount -a

2 使用Autofs服务

Autofs是一种自动挂载服务,它可以在需要时自动挂载文件系统,并在文件系统不再使用时自动卸载。

步骤:

  1. 安装Autofs服务(如果尚未安装):
    apt-get install -y autofs
  1. 配置/etc/auto.master 文件来指定自动挂载的挂载点和配置文件。例如,你可以添加如下行:
    /auto /etc/auto.misc --timeout 60
    这行的含义如下:
    • /auto: 挂载点。
    • /etc/auto.misc: 配置文件。
    • --timeout 60: 文件系统在空闲60秒后自动卸载。
  2. 创建或编辑/etc/auto.misc 文件来指定具体的挂载信息。例如:
    cd /dev/cdrom
    fd /dev/fd0
  3. 启动Autofs服务:
    sudo systemctl start autofs
  4. 设置Autofs服务在系统启动时自动启动:
    sudo systemctl enable autofs

一,磁盘基础知识

  • 硬盘设备是由大量的扇区组成,每个扇区的容量为512B。其中第一个扇区里面保存着主引导记录和分区表信息,主引导记录占446B,分区表64B,结束符2B;
  • 其中分区表每记录一条信息就使用了16B,所以最多只能4个分区信息可以写入第一个扇区中,着4个分区就是主分区
  • 由于第一个扇区最多只能创建4个分区,为了解决分区个数不够的问题,可以将第一个的分区表中的16B(原本要写入主分区信息)的空间(扩展分区)拿出来指向另外一个分区
  • 扩展分区不是真实存在的,而更像是一个占用16B分区表空间的指针(指向另一个分区的指针)。
  • 如此用户一般使用3个主分区和一个扩展分区的方法,然后在扩展分区中创建数个逻辑分区,由此满足多发区的需求

注意:

  1. 扩展分区并不是真实分区,只是一个指向下一个分区的指针,这种指针结构形成一个单向链表
  2. 单向链表是一种数据结构,其中每个节点包含一个数据元素和一个指向下一个节点的指针。这种链表的链接方向是单向的,因此对链表的访问需要通过顺序读取从头部开始。单向链表常用于需要频繁插入和删除操作的场景中

二,磁盘设备及命名

Linux系统中一切皆是文件,硬件设备也不例外。每一个硬件设备都有对应的文件名称,而系统内核中的udev设备管理器会自动将硬件名称规范起来,以便于用户通过设备的文件名称了解设备属性和分区信息。

Linux系统中的磁盘设备通常位于 /dev 目录下,设备名称根据不同的类型和接口有所不同。常见的磁盘设备命名方式如下:

  • IDE/SATA 磁盘:/dev/sda, /dev/sdb 等。第一个硬盘通常是 /dev/sda,第二个是 /dev/sdb,以此类推。
  • SCSI 磁盘:/dev/sda, /dev/sdb 等,与SATA设备命名规则相同。
  • NVMe 磁盘:/dev/nvme0n1, /dev/nvme1n1 等,表示NVMe接口的固态硬盘(SSD)。
  • USB 存储设备:通常以 /dev/sdX 或 /dev/sdXY(X是字母,Y是分区号)命名。

常见硬件设备在Linux中的文件名:

|----------|-----------------------|
| 硬件设备 | 文件名称 |
| IDE硬盘 | /dev/hd[a-d] |
| SATA硬盘 | /dev/sd[a-p] |
| 光驱 | /dev/cdrom 或 /dev/sr0 |
| USB存储设备 | /dev/sd[a-p] |
| 网络接口卡 | /dev/net/tun |
| 打印机 | /dev/lp[0-9] |
| 鼠标 | /dev/input/mouse0 |
| 显卡 | /dev/fb0 |

一台主机上可以有至多 16 块不同的硬盘,硬盘分区编号规则如下

  1. 主分区或扩展分区的编号从1开始,4结束
  2. 逻辑分区从编号5开始

/dev/sda5 设备文件名称包含的信息:

  1. 设备类型:/dev/目录中保存的是硬件设备文件。
  2. 存储设备:sd表示这是一个存储设备。
  3. 设备顺序:a表示这是系统中同类接口中第一个被识别到的设备。
  4. 分区编号:5表示这是一个逻辑分区。

扩展:udev设备管理器概述

udev是Linux内核2.6系列中的设备管理器。它的主要功能是管理/dev目录下的设备节点。udev在用户空间运行,而不是在内核空间运行,这使得它更加灵活和强大1

主要功能

  1. 动态管理设备:当设备添加或删除时,udev会监听内核发出的uevent,相应地添加或删除/dev下的设备文件。
  2. 自定义命名规则:udev允许用户通过定义规则文件来为设备生成具有标识性的设备文件名。
  3. 设定设备权限和所有者 :udev可以根据设备的属性来设置设备文件的权限和所有者/组1

工作流程

  1. 事件触发:当设备状态发生变化时(如添加、删除设备),内核会发出uevent。
  2. 规则匹配:udev守护进程接收到uevent后,会根据规则文件中的定义来匹配设备属性。
  3. 执行操作 :如果找到匹配的规则,udev会根据规则中的指示来执行相应的操作,如创建设备文件、设置权限等1

配置与使用

在CentOS中,udev通常是默认安装的,无需手动下载和安装。用户可以通过编辑/etc/udev/udev.conf 文件来覆盖udev的默认值,或通过编写自定义规则文件来实现特定的设备管理需求1

规则文件

udev的规则文件通常存放在/etc/udev/rules.d/目录下,以*.rules命名。规则文件由多条规则组成,每条规则由多个键值对组成,用于匹配设备属性并执行相应的操作1

三,磁盘管理工具使用

虚拟机新增硬盘的流程

  1. 打开虚拟机软件:首先,需要打开你正在使用的虚拟机软件,例如VMware或者VirtualBox。
  2. 选择目标虚拟机:在虚拟机列表中找到你想要添加硬盘的虚拟机,并选中它。
  3. 进入设置界面:通常在虚拟机软件的顶部菜单栏中会有"设置"或者"配置"的选项,点击它进入虚拟机的设置界面。
  1. 添加新硬盘:在设置界面中,找到"硬盘"或者"存储"选项,然后点击"添加硬盘"或者类似的选项。
  1. 配置新硬盘:在弹出的窗口中,你可以选择硬盘的类型(例如SATA或者SCSI),以及硬盘的大小。你可以根据需要选择合适的配置。
  1. 确认并保存设置:完成配置后,点击"确定"或者"保存"按钮,确认你的设置。此时,虚拟机软件会创建一个新的虚拟硬盘并将其添加到虚拟机中。
  2. 启动虚拟机:完成上述步骤后,启动虚拟机。在虚拟机内部,你应该能够看到新增的硬盘。如果需要,你可以对其进行分区、格式化等操作。

常用的磁盘管理工具

  1. fdisk:这是一个基于菜单的命令行工具,用于对硬盘进行分区。它在DOS、Windows和Linux中都有相应的应用程序1
  2. cfdisk:这是一个基于文本用户界面的分区工具,类似于fdisk,但提供了更友好的用户界面1
  3. parted:这是一个功能强大的分区工具,支持对大容量磁盘进行分区操作。它可以用来创建、删除、调整分区大小等操作1
  4. mkfs:这个命令用于在硬盘分区上建立文件系统。类似于Windows下的格式化硬盘。建立文件系统的命令是mkfs,格式如下:。mkfs[参数]文件系统 -t:指定要创建的文件系统类型。 -c:建立文件系统前首先检查坏块。 -V:输出建立文件系统详细信息1
  5. fsck:这个命令主要用于检查文件系统的正确性,并对Linux磁盘进行修复。fsck命令的格式如下:。fsck[参数选项]文件系统 -t:给定文件系统类型,若在/etc/fstab中已有定义或kernel本身已支持的不需添加此 -s:一个一个地执行fsck命令进行检查。 -A:对/etc/fstab中所有列出来的分区进行检查。 -C:显示完整的检查进度。 -d:列出fsck的debug结果。 -a:如果检查中发现错误,则自动修复。 -r:如果检查有错误,询问是否修复1
  6. dd:这个命令用于将指定的输入文件拷贝到指定的输出文件上。并且在复制过程中可以进行格式转换。dd命令与cp命令的区别在于:dd命令可以在没有创建文件系统的软盘上进行,拷贝到软盘的数据实际上是镜像文件。类似于DOS中的diskcopy命令的作用。dd命令的格式为:。dd[bs=块字节大小][count=块数] 1
  7. du:这个命令用于显示磁盘空间的使用情况。该命令逐级显示指定目录的每一级子目录占用。du[参数选项][name---] du命令的参数选项: -s:对每个name参数只给出占用的数据块总数。 -b:以字节为单位列出磁盘空间使用情况(AS4.0中默认以KB为单位)。 -k:以1024字节为单位列出磁盘空间使用情况。 -l:计算所有文件大小,对硬链接文件重复计算。 -x:跳过在不同文件系统上的目录,不予统计1

项目一: fdisk 工具使用

fdisk 是一个用于管理硬盘分区的命令行工具,常用于 Linux 和类 Unix 操作系统。它提供了对硬盘分区表的创建、删除、修改和查看的功能。通过 fdisk,用户可以在磁盘上创建新的分区、删除旧的分区、调整现有分区的大小或类型,并显示分区的详细信息。

主要功能:

  1. 查看分区:列出磁盘上的所有分区及其详细信息。
  2. 创建新分区:在未分配空间的磁盘上创建新分区。
  3. 删除分区:删除现有的分区。
  4. 修改分区:调整分区的大小或类型。
  5. 更改分区类型:修改分区的文件系统类型(如从 Linux 类型更改为 Windows 类型)。
  6. 写入更改:将所做的更改写入磁盘。

fdisk -l:列出所有磁盘的分区信息。

fdisk /dev/sda:启动 fdisk 对 /dev/sda 磁盘进行操作。

|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| 选项 | 功能 |
| -u | 与 -l搭配使用,显示分区数目12 |
| -s | 指定分区2 |
| -v | 显示版本信息2 |
| m | 显示菜单和帮助信息13 |
| a | 活动分区标记/引导分区13 |
| d | 删除分区13 |
| l | 显示分区类型13 |
| n | 新建分区13 |
| p | 显示分区信息13 |
| t | 修改分区的类型13 |
| w | 保存并写入分区表的更改13 |
| q | 退出fdisk而不保存更改13 |
| v | 进行分区检查1 |

1,首先通过编辑虚拟机设置增加一块硬盘,格式为SCSI,大小为20G,命名为/dev/sdb

lsblk查看新增的硬盘设备,可以看到命名为/dev/sdb

2,对新增硬盘进行操作,需求是在硬盘上创建大小500MB,文件系统为ext4的/dev/sdb1的主分区

首先打开fdisk操作菜单 fdisk /dev/sdb

输入p,查看当前分区表。可以看到目前是没有任何分区的

根据信息可以看到/dev/sdb硬盘大小为21.5GB,21474836480 字节,41943040 个扇区,每个扇区大小是512字节。分别能从第七行的七个字段读取到起始扇区(Start)、结束扇区(End)、块数(Blocks)、分区ID(Id)以及分区类型(System)

3,输入n,创建一个新分区;输入p,选择创建主分区;输入该分区的其实,结束扇区,以确定分区大小。也可以使用+sizeM或sizeK的方式指定分区大小

4,输入L能够查看已知的分区类型及其id,例如linux的id为83。输入t,指定/dev/sdb1的文件类型为Linux

5,分区操作结束后,输入w,将分区信息写入分区表并退出

6,如果需要删除磁盘分区,则需在fdisk菜单下输入d,并选择需要删除的分区即可,删除操作完成之后输入w,保存退出

7,为了以便于项目二的实施开展,需要重复1-5的步骤以建立磁盘分区/dev/sdb2,/dev/sdb3。fdisk菜单操作完成效果如下

项目二: mkfs 工具使用

硬盘分区之后,下一步就需要建立文件系统。类似于windows下的格式化硬盘,在硬盘分区上建立文件系统会冲掉分区上的数据,而且不可恢复。建立文件系统的命令是mkfs

常见文件系统类型

|------------|----------------------------------------|------------------------------------------|
| 文件系统类型 | 描述 | 适用场景 |
| ext4 | 第四代扩展文件系统,是 Linux 的默认文件系统,具有良好的性能和稳定性。 | 适用于大多数 Linux 发行版,适合通用用途。 |
| xfs | 高性能的文件系统,特别适合于大型数据集和高并发环境。 | 适用于数据库服务器、文件服务器等高性能需求的场景。 |
| btrfs | 提供先进的功能,如快照、压缩和数据校验,但相对复杂。 | 适用于需要高级数据管理功能的场景,如备份和恢复。 |
| ntfs | Windows 的默认文件系统,兼容性好。 | 适用于需要与 Windows 系统互操作的场景。 |
| vfat | 适用于 FAT32 文件系统,常用于 USB 驱动器和移动设备。 | 适用于需要跨平台兼容的场景,如在 Linux 和 Windows 之间共享数据。 |

项目需求:在 /dev/sdb1 上建立 ext4 类型的文件系统,建立时检测磁盘坏块并显示详细信息

1,mkfs -t ext4 -V -c /dev/sdb1

命令解析

  • mkfs: 这是"make filesystem"的缩写,用于在指定的设备上创建文件系统。
  • -t ext4: 这个选项指定了要创建的文件系统类型为 ext4。ext4 是一种广泛使用的文件系统,适用于大多数 Linux 发行版。
  • -V: 这个选项表示详细模式(verbose mode),会在执行命令时显示详细的信息。
  • -c: 这个选项用于在创建文件系统之前检查设备上的坏块。
  • /dev/sdb1: 这是目标设备或分区,在这个例子中,文件系统将被创建在 /dev/sdb1 分区上。

执行效果

执行这个命令将会:

  1. 在 /dev/sdb1 分区上创建一个 ext4 文件系统。
  2. 在创建文件系统之前,检查设备上的坏块。
  3. 以详细模式显示创建文件系统的过程和相关信息。

2,完成存储设备的分区与格式操作,接下来就需要挂载并使用存储设备。

  1. 首先创建一个用于挂载设备的挂载点目录;mkdir /newFS
  2. 然后mount命令将存储设备与挂载点进行关联;mount /dev/sdb1 /newFS
  3. 查看挂载状态和硬盘使用量信息;df-h

项目三,fsck命令

fsck(文件系统一致性检查)是一个用于检查和修复文件系统错误的命令行工具。它在 Unix 和类 Unix 系统(如 Linux)中非常常见。

基本介绍

fsck 工具可以检查和修复各种类型的文件系统,包括 ext2、ext3、ext4、FAT、NTFS 等。在 Linux 中,fsck 工具的具体实现可能有所不同,不同的发行版可能会使用不同的工具。

基本用法

使用 fsck 命令时需要 root 权限。基本命令格式为:

fsck [选项] 设备名

其中,设备名可以是磁盘分区的设备名(如 /dev/sda1),也可以是磁盘镜像文件的路径。

常用选项

  • -a: 自动修复所有错误。
  • -y: 自动回答"是"来修复所有错误。
  • -n: 不执行实际的文件系统检查和修复操作,仅显示出要执行的操作。
  • -v: 显示详细的信息。
  • -c: 检查磁盘上的坏道。
  • -r: 交互式修复错误。

项目需求:检测分区**/dev/sdb1****是否有错误,如果有错误则自动修复(必须先把磁盘卸载才能检查分区)**

umount /dev/sdb1

fsck -a /dev/sdb1

项目四,dd命令

dd 命令最初是作为 Unix 操作系统的一部分开发的,它的名字来源于早期的 IBM 主机系统中的"数据定义"(Data Definition)概念。dd 命令可以用于多种用途,包括但不限于:

  • 制作启动盘
  • 备份和恢复磁盘或分区
  • 创建和操作文件系统
  • 生成随机数据
  • 转换文件格式

基本用法

dd 命令的基本语法如下:

dd if=输入文件 of=输出文件 bs=块大小

其中:

  • if=输入文件:指定输入文件的路径。可以是普通文件、设备文件或特殊文件。
  • of=输出文件:指定输出文件的路径。可以是普通文件、设备文件或特殊文件。
  • bs=块大小:设置每个块的大小。可以使用不同的单位(如字节、千字节、兆字节等)来指定大小。

常用选项

除了上述基本参数外,dd 命令还支持许多其他选项,用于更精细地控制其行为。以下是一些常用的选项:

  • count=块数:指定要复制的块数。
  • skip=块数:跳过输入文件的前几个块。
  • seek=块数:跳过输出文件的前几个块。
  • conv=转换选项:进行数据转换操作,如大小写转换、字节交换等。
  • status=状态:显示复制进度和传输速率信息。

项目需求:当系统的交换分区不能满足系统的要求,而磁盘上又没有可用空间时,可以使用交换文件提供虚拟内存

1, dd if=/dev/zero of=/swap bs=1024 count=10240

参数解释

  • if=/dev/zero: 指定输入文件为 /dev/zero,这是一个特殊的文件,它会不断提供空字符(null bytes)。
  • of=/swap: 指定输出文件为 /swap,这是你将要创建的交换文件的名称。
  • bs=1024: 指定块大小(block size)为 1024 字节。
  • count=10240: 指定要复制的块数为 10240。

计算交换文件大小

通过 bs=1024 和 count=10240,可以计算出交换文件的大小: 文件大小=块大小×块数=1024字节/块×10240块=10485760字节=10MB文件大小=块大小×块数=1024字节/块×10240块=10485760字节=10MB

2,mkswap /swap

这个命令用于将一个文件或分区格式化为交换空间。/swap 是交换文件或分区的路径。执行此命令后,系统会将指定的文件或分区初始化为交换空间,以便在内存不足时使用

3,swapon /swap

这个命令用于启用之前创建的交换空间。/swap 是交换文件或分区的路径。执行此命令后,系统会开始使用该交换空间来扩展内存

4,swapoff /swap

这个命令用于禁用之前启用的交换空间。/swap 是交换文件或分区的路径。执行此命令后,系统将不再使用该交换空间

项目五,df命令

df命令是Linux系统中的一个命令,它的作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。

df [选项] [文件名]

  • -a 或 --all:显示所有的文件系统,包括虚拟文件系统。
  • -B 或 --block-size:指定单位大小。比如1k,1m等。
  • -h 或 --human-readable:以人们易读的GB、MB、KB等格式显示。
  • -i 或 --inodes:不用硬盘容量,而是以inode的数量来显示。
  • -k:以KB的容量显示各文件系统。
  • -m:以MB的容量显示各文件系统。
  • --no-sync:在统计使用信息之前不调用sync命令(默认)。
  • -sync:在统计使用信息之前调用sync命令。
  • -P 或 --portability:使用POSIX格式显示。
  • -t 或 --type=TYPE:只显示指定类型的文件系统。
  • -T 或 --print-type:显示文件系统类型。
  • --help:显示帮助信息。
  • --version:显示版本信息

1,df 列出各文件系统的磁盘占用情况

2,df -ia 列出各文件系统的i节点的使用情况

3,df -T 列出文件系统类型

项目六, du 命令

du命令是Linux系统中的一个命令,它的作用是显示目录或文件所占磁盘空间的大小。可以用来查看磁盘已被使用多少空间和还剩余多少空间。

du [选项] [文件或目录]

  • -a 或 --all:为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
  • -B 或 --block-size=SIZE:以SIZE为计量单位显示目录或文件大小。
  • -b 或 --bytes:以byte为单位显示目录或文件大小。
  • -c 或 --total:除了显示目录或文件的大小外,同时显示所有目录或文件的总和。
  • -h 或 --human-readable:以K,M,G为单位,提高信息的可读性。
  • -H 或 --si:与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
  • -l 或 --count-links:重复计算硬连接的文件。
  • -L 或 --dereference:统计符号连接源文件大小。
  • -P 或 --no-dereference:不同符号链接源文件的大小,默认。
  • -s 或 --summarize:仅显示总计,即当前目录的大小。
  • -S 或 --separate-dirs:显示每个目录的大小时,并不含其子目录的大小。
  • -x 或 --one-file-system:忽略位于其他文件系统上的目录。
  • --exclude=PATTERN:忽略符合PATTERN规则的目录或文件。
  • --max-depth=N:只显示N层内的目录大小。
  • --time:显示目录或子目录中文件的最后修改时间。
  • --time-style=STYLE:以STYLE指定的格式显示时间。

1,以字节为单位列出所有文件和目录的磁盘空间占用情况 du -ab

**项目七,**mount/umount

  • 在磁盘建立好文件系统后,还需要将新建立的文件系统挂载到操作系统上才能使用,这个过程称为挂载。文件系统所挂载的目录称为挂载点(Mount Point)
  • linux提供了/mnt,/media两个挂载点。一般挂载点是一个空目录,否则目录中原来的文件系统将被隐藏
  • 通常将光盘和软盘挂载载到/media/cdrom,/mnt/cdrom,/media/floppy/mnt/floppy中,对应的设备文件名正是/dev/cdrom和/dev/fd0

mount命令用于挂载文件系统,而umount命令用于卸载已经挂载的文件系统。这两个命令通常成对使用,以确保文件系统的正确管理和数据的一致性

mount [-afFhnrvVw] [-L标签] [-o选项] [-t文件系统类型] [设备名] [加载点]

常用选项

  • -a:加载/etc/fstab中所有的文件系统。
  • -f:不实际加载设备,可与-v等参数同时使用以查看mount的执行过程。
  • -o:指定加载文件系统时的选项,如async、atime、auto等。
  • -t:指定设备的文件系统类型,如hpfs、iso9660等。
  • -w:以可读写模式加载设备,默认设置。

umount [选项] [挂载点或设备]

常用选项

  • -f:强制卸载(仅用于NFS挂载的文件系统)。
  • -l:懒卸载,立即取消挂载点的挂载,但实际上延迟到文件系统不再使用时再完成卸载操作。
  • -v:显示详细信息。
  • -r:在卸载失败时尝试以只读方式重新挂载文件系统。

1,将 /dev/sdb1 设备上的 ext4 文件系统挂载到 /newFS 目录

mount -t ext4 /dev/sdb1 /newFS

2,卸载/dev/sdb1设备

umount /dev/sdb1 或者 umount /newFS

项目八,文件系统的自动挂载

在Linux系统中,文件系统的自动挂载可以通过两种主要方式实现:使用/etc/fstab文件和使用Autofs服务。

1**,使用/etc/fstab文件**

/etc/fstab文件包含了系统启动时需要自动挂载的文件系统信息。通过编辑这个文件,你可以指定哪些设备应该在系统启动时挂载到哪些挂载点。

步骤:

  1. 使用文本编辑器(如vim)打开/etc/fstab文件:
    vim /etc/fstab
  2. 在文件中添加一行来指定要自动挂载的文件系统。例如,如果你想将/dev/sdb1挂载到/newFS,可以添加如下行:
    /dev/sdb1 /newFS ext4 defaults 0 2
    这行的含义如下:
    • /dev/sdb1: 要挂载的设备或分区。
    • /newFS: 挂载点。
    • ext4: 文件系统类型。
    • defaults: 使用默认挂载选项。
    • 0: 表示是否需要备份(0表示不需要)。
    • 2: 表示文件系统检查的顺序(2表示在根文件系统之后检查)。
  3. 保存并退出编辑器。
  4. 验证实验效果 mount -a

2 使用Autofs服务

Autofs是一种自动挂载服务,它可以在需要时自动挂载文件系统,并在文件系统不再使用时自动卸载。

步骤:

  1. 安装Autofs服务(如果尚未安装):
    apt-get install -y autofs
  1. 配置/etc/auto.master 文件来指定自动挂载的挂载点和配置文件。例如,你可以添加如下行:
    /auto /etc/auto.misc --timeout 60
    这行的含义如下:
    • /auto: 挂载点。
    • /etc/auto.misc: 配置文件。
    • --timeout 60: 文件系统在空闲60秒后自动卸载。
  2. 创建或编辑/etc/auto.misc 文件来指定具体的挂载信息。例如:
    cd /dev/cdrom
    fd /dev/fd0
  3. 启动Autofs服务:
    sudo systemctl start autofs
  4. 设置Autofs服务在系统启动时自动启动:
    sudo systemctl enable autofs
相关推荐
qq_2430507927 分钟前
aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(一)
linux·web安全·网络安全·黑客·渗透测试·模糊测试·kali linux
小慧10241 小时前
2.1话题发布
linux·ros
夜影风3 小时前
Linux系统中自签名HTTPS证书
linux·运维·https
wb1893 小时前
流编辑器sed
运维·笔记·ubuntu·云计算
成工小白4 小时前
【Linux】C语言模拟实现shell命令行(程序替换原理)
linux·运维·服务器
西装没钱买5 小时前
C语言多进程TCP服务器与客户端
服务器·c语言·tcp/ip·进程
福理原乡大王5 小时前
Linux信号详解
linux·运维·服务器·c++·ubuntu·信号处理
锅锅是锅锅6 小时前
ubuntu调整硬盘大小-使用gparted
linux·ubuntu·硬盘·gparted
ldq_sd6 小时前
centos 8.3(阿里云服务器)mariadb由系统自带版本(10.3)升级到10.6
服务器·阿里云·centos
孙克旭_6 小时前
day031-Shell自动化编程-数组与案例
linux·运维·自动化