3-12-磁盘管理二

Linux磁盘分区实战

硬盘接口类型

  1. IDE接口(Integrated Drive Electronics)

    • 概述
      • IDE接口也被称为ATA(Advanced Technology Attachment)接口,是早期计算机硬盘广泛使用的接口类型。它的主要特点是将硬盘控制器与硬盘本身集成在一起,减少了硬盘与主板之间连接的复杂性。这种接口在个人计算机发展历程中发挥了重要作用,使得硬盘的安装和使用变得更加简便。
    • 传输方式和速度
      • IDE接口采用并行传输方式,数据通过多条数据线同时传输,以提高传输效率。不过,早期的IDE标准传输速度相对较慢。例如,IDE接口的第一代标准ATA - 1,其最大数据传输率仅为3.3MB/s。随着技术的发展,后续出现了ATA - 2、ATA - 3等标准,传输速度有所提升,但在面对现代高速数据传输需求时仍显得力不从心。
    • 连接方式和兼容性
      • IDE接口的硬盘通过一条扁平的数据线与主板相连,数据线一般有40针或80针。同时,还需要连接电源线来为硬盘供电。IDE接口具有较好的兼容性,在早期的Windows 95/98、Windows Me以及部分早期Linux系统等多种操作系统下都能很好地工作。而且,除了硬盘外,IDE接口还可以连接光驱等其他存储设备,不过同一根IDE数据线上连接的设备需要通过设置主从设备(Master/Slave)来区分优先级。
  2. SATA接口(Serial ATA)

    • 概述
      • SATA接口是目前主流的硬盘接口类型,它是一种串行接口,相较于IDE接口的并行传输方式,SATA接口在性能、稳定性和扩展性等方面都有显著提升。SATA接口的出现适应了计算机技术快速发展对数据传输速度和可靠性的要求。
    • 传输方式和速度
      • SATA接口采用串行传输方式,通过一对差分信号线来传输数据,这种方式可以有效减少信号干扰,提高传输的稳定性和距离。SATA接口有多个版本,SATA 1.0的理论传输速度为1.5Gbps(约150MB/s),SATA 2.0提升到3.0Gbps(约300MB/s),SATA 3.0更是达到了6.0Gbps(约600MB/s)。实际应用中的传输速度会受到硬盘内部性能等多种因素的影响,但SATA接口的高速特性已经能够满足大多数普通用户和许多商业应用场景下的硬盘读写需求。
    • 连接方式和兼容性
      • SATA接口的硬盘通过一条较细的数据线与主板相连,数据线两端的接口呈L形,便于插拔且占用空间小。在电源供应方面,有专门的SATA电源线与之配合。SATA接口在兼容性方面表现出色,几乎所有现代操作系统,如Windows、Linux、macOS等都对其提供了完善的支持。并且,SATA接口可以方便地支持热插拔(在一定条件下,设备在计算机运行过程中可以安全插拔),这为用户更换硬盘或外部存储设备提供了便利。
  3. SCSI接口(Small Computer System Interface)

    • 概述
      • SCSI接口主要用于服务器和高端工作站等高性能计算机设备。它是一种智能型的接口,能够提供比普通硬盘接口更高的性能和更多的功能,如支持多设备连接、更高的传输速度和更好的并行处理能力。
    • 传输方式和速度
      • SCSI接口采用并行传输方式,通过多条数据线同时传输数据。SCSI接口也有多个标准和版本,传输速度因版本而异。例如,早期的SCSI - 1标准传输速度较低,而Ultra320 SCSI的最大传输速度可达320MB/s。一些最新的SCSI标准,如SAS(Serial Attached SCSI)采用串行传输方式,速度更是有了大幅提升,能够满足服务器等对数据传输速度要求极高的应用场景。
    • 连接方式和兼容性
      • SCSI接口的硬盘通过一条较宽的扁平数据线与主机或存储控制器相连,并且需要专门的SCSI控制器来管理和协调设备之间的通信。SCSI接口可以同时连接多个设备(如多个硬盘、磁带机等),这些设备在SCSI总线上通过设备ID来区分。不过,SCSI接口设备的价格相对较高,而且其复杂性使得它主要应用于专业领域,如企业级服务器、高端图形工作站等,在普通个人计算机中很少使用。
  4. NVMe接口(Non - Volatile Memory Express)

    • 概述
      • NVMe接口是专门为固态硬盘(SSD)设计的高性能接口标准。随着固态硬盘技术的飞速发展,传统的接口标准(如SATA)在一定程度上限制了固态硬盘性能的充分发挥。NVMe接口应运而生,它基于PCI - E(Peripheral Component Interconnect Express)总线,能够实现固态硬盘与计算机系统之间的高速数据传输。
    • 传输方式和速度
      • NVMe接口采用串行传输方式,利用PCI - E通道进行数据传输。它的传输速度极快,目前主流的NVMe固态硬盘的读取速度可以轻松达到3GB/s以上,写入速度也能达到2GB/s以上,远远超过了传统SATA接口固态硬盘的速度。这种高速传输性能使得固态硬盘在启动系统、加载软件和处理大量数据时能够实现几乎即时响应。
    • 连接方式和兼容性
      • NVMe接口的固态硬盘通过插入主板上的PCI - E插槽来连接,其外形通常与传统的M.2接口固态硬盘相似,但在性能上有巨大提升。NVMe接口在兼容性方面,需要主板和操作系统的支持。目前,大多数现代主板都支持NVMe接口,并且Windows、Linux等操作系统也都提供了对NVMe设备的良好支持。由于其高性能和相对较高的成本,NVMe接口固态硬盘主要应用于对存储性能要求极高的场景,如高端游戏电脑、数据中心的高性能存储服务器等。

image-20250110223809912

image-20220228203443187

sata

目前常见的接口方面又分为SATA、SAS、MSATA、M.2。

image-20220228203633983

sata是用在个人PC上最为主流的硬盘接口,主要是机械硬盘,廉价,大容量。

sas

image-20220331170753522

sas接口为企业级专业硬盘使用接口,满足高性能、高可靠性。

以前还有SCSI接口,已经被sas接口取代了。

关于硬盘的历史,主要是如下升级

  • 个人主机

    • IDE(Integrated Drive Electronics)传统级硬盘接口、
      • 被SATA取代
  • 企业服务器

    • SCSI(Small Computer System Interface),小型计算机系统专用接口
      • 被SAS(Serial Attached SCSI)取代

image-20220228204516274

机械硬盘、固态硬盘特点

机械硬盘、怕摔、怕震动
固态硬盘、怕突然断电
  1. 机械硬盘(HDD - Hard Disk Drive)特点

    • 存储容量

      • 大容量优势:机械硬盘的存储容量通常较大。目前市场上常见的机械硬盘容量有1TB、2TB、4TB甚至更高。这是因为它是通过在盘片的磁性涂层上存储数据,盘片可以多层堆叠,技术上比较容易实现大容量存储。例如,对于需要存储大量视频、音频、照片等数据的用户,如影视制作公司存储素材、数据中心备份数据,大容量的机械硬盘是一种经济实惠的选择。
      • 容量扩展相对容易:在存储容量需要扩展时,只需购买新的机械硬盘并安装到计算机机箱内(如果有足够的硬盘位),或者通过外部硬盘盒将其作为外置硬盘使用。用户可以根据自己的需求灵活增加存储容量。
    • 数据读写速度

      • 顺序读写性能:在顺序读写大量数据时,机械硬盘表现尚可。例如,在读取或写入连续存储的视频文件时,其顺序读取速度可以达到100 - 200MB/s左右。这是因为顺序读写时,磁头可以沿着盘片的磁道连续读取或写入数据,减少了寻道时间对读写速度的影响。
      • 随机读写性能差:然而,机械硬盘的随机读写性能较差。由于其数据存储在高速旋转的盘片上,磁头需要在盘片上频繁移动来定位数据。每次磁头移动都需要时间,这个寻道时间会严重影响随机读写速度。例如,在打开包含大量小文件的文件夹时,机械硬盘可能需要较长时间来加载每个文件的信息,因为磁头要不断地在盘片的不同位置之间移动。
    • 工作原理与内部结构

      • 盘片和磁头:机械硬盘内部有一个或多个盘片,这些盘片是存储数据的介质,表面涂有磁性材料。磁头负责在高速旋转的盘片上进行数据的读写操作。磁头与盘片之间的距离非常小,工作时磁头悬浮在盘片上方,以避免与盘片接触造成损坏。例如,当硬盘工作时,电机带动盘片以每分钟几千转(常见的有7200转/分钟)的速度旋转,磁头通过电磁感应来读取或写入盘片上的数据。
      • 机械部件易损:由于存在高速旋转的盘片和移动的磁头这些机械部件,机械硬盘在受到震动、碰撞时容易损坏。例如,如果在硬盘工作时受到较大的震动,磁头可能会划伤盘片,导致数据丢失。而且,随着使用时间的增加,机械部件的磨损也可能会导致硬盘出现故障。
    • 成本与价格

      • 价格优势:机械硬盘的制造成本相对较低,这使得它在市场上价格比较亲民。相同存储容量下,机械硬盘的价格通常比固态硬盘低很多。例如,1TB的机械硬盘价格可能在两三百元左右,而1TB的固态硬盘价格可能在四五百元甚至更高。这使得机械硬盘在对读写速度要求不是特别高的大容量存储场景下,具有很高的性价比。
    • 数据存储稳定性

      • 长期存储可靠性:在数据长期存储方面,机械硬盘如果保存得当,数据可以稳定存储很长时间。因为其数据存储在磁性涂层上,只要磁性不消失,数据就可以保存。不过,需要注意避免磁场干扰,否则可能会导致数据损坏。例如,将机械硬盘放置在远离强磁场源(如磁铁、大型电机等)的地方,可以保证数据存储的稳定性。
  2. 固态硬盘(SSD - Solid - State Drive)特点

    • 存储容量

      • 容量范围较窄(相对):固态硬盘的存储容量相对机械硬盘来说范围较窄。常见的固态硬盘容量有256GB、512GB、1TB等,虽然也有一些大容量的固态硬盘,但价格相对较高。这是因为固态硬盘是基于闪存芯片存储数据,闪存芯片的成本较高,且大容量闪存芯片的生产技术相对复杂。
      • 容量提升技术难度大:随着技术的发展,固态硬盘的容量在不断提升,但要实现像机械硬盘那样的高容量存储仍然面临一些技术挑战。例如,增加闪存芯片的数量会带来成本增加、体积增大以及可能出现的散热等问题。
    • 数据读写速度

      • 超高的读写速度:固态硬盘的读写速度非常快。其读取速度可以轻松达到几GB/s,写入速度也能达到数GB/s,远远超过机械硬盘。例如,在系统启动、软件加载和游戏启动等场景中,固态硬盘可以使计算机的响应速度大幅提升。这是因为固态硬盘使用闪存芯片存储数据,数据的读写是通过电信号控制闪存芯片内的晶体管来实现的,没有机械部件的限制,数据可以快速地被定位和传输。
      • 出色的随机读写性能:固态硬盘在随机读写方面表现卓越。无论是读取还是写入小文件,固态硬盘都能快速响应。这是因为闪存芯片的存储结构和工作方式使得数据的定位不需要像机械硬盘那样移动磁头,大大缩短了数据的读写时间。例如,在打开包含大量小文件的文件夹或者运行多个程序同时频繁读写数据时,固态硬盘能够提供流畅的体验。
    • 工作原理与内部结构

      • 闪存芯片和控制器:固态硬盘内部主要由闪存芯片和控制器组成。闪存芯片是存储数据的核心部件,数据以二进制的形式存储在闪存芯片的晶体管中。控制器则负责管理和传输数据,包括数据的读写、缓存管理、磨损均衡等操作。例如,控制器会根据数据的读写请求,合理地分配闪存芯片中的存储单元来存储数据,并通过复杂的算法来延长闪存芯片的使用寿命。
      • 无机械部件优势:固态硬盘没有机械部件,这使得它具有抗震性强、噪音小等优点。由于不存在高速旋转的盘片和移动的磁头,固态硬盘在受到震动、碰撞时数据不容易丢失,也不会因为机械部件的磨损而出现故障。例如,在笔记本电脑等移动设备中,固态硬盘可以更好地适应设备在移动过程中可能遇到的各种情况。
    • 成本与价格

      • 价格相对较高:固态硬盘的制造成本较高,主要是因为闪存芯片的成本较高以及其复杂的制造工艺。这导致其在市场上的价格相对机械硬盘要高。不过,随着技术的发展和市场竞争的加剧,固态硬盘的价格在逐渐下降。例如,以前1TB的固态硬盘价格可能在千元左右,现在价格已经有所降低,但仍然比相同容量的机械硬盘贵。
    • 数据存储稳定性
      • 数据安全考虑因素不同:虽然固态硬盘没有机械硬盘那样的磁头和盘片磨损问题,但它也有自己的数据安全问题。例如,闪存芯片有写入寿命限制(P/E - Program/Erase Cycles),经过一定次数的写入和擦除操作后,闪存芯片可能会出现故障。不过,固态硬盘制造商通过采用各种技术,如磨损均衡、冗余备份等,来提高数据存储的稳定性和闪存芯片的使用寿命。

硬盘命名规则

  1. 传统命名方式(基于IDE和SCSI接口)
    • 在Ubuntu(以及其他Linux系统)中,对于传统的IDE接口硬盘,设备名通常以“/dev/hdX”的形式命名。其中,“X”可以是“a”、“b”等字母。例如,“/dev/hda”表示系统中的第一个IDE硬盘,“/dev/hdb”表示第二个IDE硬盘。如果硬盘有多个分区,分区会以数字编号,如“/dev/hda1”表示第一个IDE硬盘的第一个分区,“/dev/hda2”表示第一个IDE硬盘的第二个分区,以此类推。
    • 对于SCSI接口的硬盘(包括SATA硬盘,在Linux系统中SATA硬盘被视为SCSI设备处理),设备名通常以“/dev/sdX”的形式出现。这里的“X”同样是字母,如“/dev/sda”代表第一个SCSI(或SATA)硬盘,“/dev/sdb”代表第二个。分区编号方式和IDE硬盘类似,例如“/dev/sda1”是第一个SCSI(或SATA)硬盘的第一个分区。
  2. 基于NVMe接口的固态硬盘命名
    • 对于采用NVMe接口的固态硬盘,设备名一般是“/dev/nvmeXnY”的形式。其中,“X”是一个数字,表示NVMe设备的编号,比如“/dev/nvme0”表示第一个NVMe设备。“n”是固定的字符,用于分隔设备编号和命名空间编号。“Y”也是一个数字,表示命名空间(Namespace)编号。在大多数情况下,对于普通用户使用的单分区NVMe固态硬盘,可能看到的设备名是“/dev/nvme0n1”,表示第一个NVMe设备的第一个命名空间对应的分区。
  3. 虚拟硬盘和特殊设备的命名(如磁盘阵列等)
    • 在Ubuntu中,还有一些特殊的硬盘命名方式。例如,对于虚拟硬盘(如通过软件创建的虚拟磁盘),其命名可能会根据创建软件和虚拟磁盘的类型而有所不同。一些磁盘阵列设备(如RAID阵列)也有自己的命名规则。如果是通过mdadm工具创建的软件RAID设备,设备名可能是“/dev/mdX”,其中“X”是一个数字,表示RAID设备的编号,如“/dev/md0”表示第一个RAID设备。这些设备的分区命名方式同样也是在设备名后加上分区数字编号,例如“/dev/md0p1”表示第一个RAID设备的第一个分区。

不同硬盘(不同接口)插入到系统中,有不同的名字

OS IDE(并口) SATA(串口) SCSI
RHEL5 /dev/hda /dev/sda /dev/sda
RHEL6 /dev/sda /dev/sda /dev/sda
RHEL7 /dev/sda /dev/sda /dev/sda

多块硬盘的名字

https://www.debian.org/releases/sarge/i386/apbs04.html.zh_TW

image-20220301165015507

还有就是惠普服务器的硬盘

/dev/cciss/c0d0
/dev/cciss/c0d0p1           c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2           c0第一个控制器, d0第一块磁盘, p2分区2

image-20191202141327282

提问关于分区名

1.centos上看到的如下文件名字,表示什么?(Linux一切接文件,磁盘在系统中,也以文件形式展示)

/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5

2.解读下,如下命令是什么

[root@lamp-241 ~]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2

磁盘分区

MBR分区特点

不支持2T以上硬盘
最多支持4个主分区
fdisk命令只能创建MBR分区

磁盘分区步骤

1.执行fdisk /dev/sdb命令,给硬盘创建分区/dev/sdb1、/dev/sdb2、

2.刷新分区表

3.格式化分区文件系统、mkfs.ext4 /dev/sdb1

4.挂载使用该分区,mount

5.开机自动挂载、autofs自动挂载

磁盘分区结构(重要)

主分区

  • 一个硬盘的主分区也就是包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则该硬盘必须得有一个主分区。
  • 主分区,也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。
  • 主分区中不能再划分其他类型的分区

image-20220330230304283

扩展分区/逻辑分区

扩展分区也就是除主分区外的分区,但它不能直接使用,必须再将它划分为若干个逻辑分区才行。

逻辑分区也就是我们平常在操作系统中所看到的D、E、F等盘。

image-20220301170937959

  • 主分区,primary partition
  • 扩展分区,extended
    • 逻辑分区

image-20220331171755712

系统默认分区1~4留给了主分区和扩展分区

  • 主分区1 * (星号代表是引导分区,引导分区装在这里)
  • 主分区2
  • 主分区3
  • 主分区4(extended)
    • 逻辑分区n

分区须知(记忆)

  1. 最多只能分4个主分区,主分区编号1-4
  2. 逻辑分区大小总和不能超过扩展分区大小,逻辑分区分区编号从5开始
  3. 如果删除扩展分区,下面的逻辑卷分区也被删除
  4. 扩展分区的分区编号(1-4)

关于fdisk命令

  1. 概述

    • fdisk是一个在Ubuntu(以及其他Linux系统)中用于磁盘分区操作的命令行工具。它功能强大,可以创建、删除、调整磁盘分区等,是系统管理员和高级用户管理磁盘分区的重要工具。
  2. 查看磁盘分区信息

    • 基本语法fdisk -l。这个命令会列出系统中所有磁盘设备的分区信息。例如,在终端输入fdisk -l后,它会显示每个磁盘设备(如/dev/sda/dev/sdb等)的大小、分区数量、每个分区的起始和结束位置、分区类型(如Linux分区、Windows分区等)等信息。
    • 信息解读
      • 对于每个磁盘分区,输出信息中会包含像Device(设备名,如/dev/sda1)、Boot(是否为启动分区,*表示是启动分区)、Start(分区起始位置,通常以扇区为单位)、End(分区结束位置)、Blocks(分区包含的块数,块是文件系统管理磁盘空间的单位)、Id(分区系统ID,用于识别分区类型,如83表示Linux分区)、System(分区系统类型,如Linux)等内容。通过这些信息,可以详细了解磁盘的分区布局。
  3. 进入分区操作界面

    • 基本语法fdisk [磁盘设备名]。例如,如果要对/dev/sda进行分区操作,可以在终端输入fdisk /dev/sda。这会进入fdisk的交互式分区操作界面。
    • 操作提示:在交互式界面中,会出现命令提示符(如Command (m for help):),此时可以输入各种命令来进行分区操作。输入m可以查看所有可用的命令及其说明。
  4. 分区操作命令

    • 创建新分区(n)
      • 在交互式界面中输入n,然后按照提示操作可以创建新分区。首先会让你选择是创建主分区(p)还是逻辑分区(l)。对于主分区,最多可以创建4个(在MBR分区模式下)。选择类型后,需要指定分区编号(如已经有/dev/sda1/dev/sda2,新的主分区编号可能是/dev/sda3)、起始扇区(通常可以直接按回车键使用默认值)和结束扇区(可以通过指定扇区数量或者分区大小来确定)来定义分区的范围。
    • 删除分区(d)
      • 输入d后,需要指定要删除的分区编号。例如,输入d,然后输入3,会删除/dev/sda3这个分区。要注意的是,删除分区会导致分区上的数据全部丢失,所以在操作之前一定要确保数据已经备份。
    • 查看分区表(p)
      • 输入p可以查看当前磁盘的分区表,这会显示所有现有分区的详细信息,包括前面提到的分区编号、起始和结束位置、分区类型等。这个命令在创建或修改分区后可以用于检查分区设置是否正确。
    • 保存并退出(w)或不保存退出(q)
      • 完成分区操作后,如果想要保存修改后的分区表,可以输入w。这会将分区表的更改写入磁盘并退出fdisk。如果不想保存任何修改,可以输入q直接退出。在输入w之前,一定要确保分区操作是正确的,因为一旦保存,分区的更改是不可逆的(除了通过数据恢复工具尝试恢复数据,但这也不能保证完全恢复)。
  5. 注意事项

    • 谨慎操作:由于fdisk操作涉及到磁盘分区的更改,操作不当可能会导致数据丢失。在使用fdisk对正在使用的系统磁盘进行操作之前,最好先备份重要数据。
    • 分区表更新:在一些情况下,如创建新分区或修改分区后,可能需要手动更新系统的分区表信息。在Ubuntu中,可以使用partprobe命令来通知内核重新读取分区表,以确保系统能够正确识别新的分区设置。

image-20191202143848679

[root@lamp-241 ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0001d899

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

fdisk命令

使用fdisk分区

添加新硬盘

vmware添加硬盘

重启linux虚拟机,必须!

查看新添加的硬盘(查看磁盘信息)

lsblk命令

  1. 命令概述

    • lsblk是一个在Ubuntu(以及其他Linux系统)中非常实用的命令,用于列出系统中的块设备(block devices)信息。块设备是一种以块为单位进行数据读写的设备,包括硬盘、固态硬盘、USB存储设备、光盘驱动器等存储设备,还包括磁盘分区、逻辑卷等。
  2. 基本语法和输出信息

    • 基本语法lsblk [选项]。常用的选项包括-a(显示所有设备,包括空设备)、-b(以字节为单位显示设备大小)、-f(显示文件系统信息)、-m(显示设备的挂载点信息)等。如果不加任何选项,lsblk会以树状结构列出块设备的基本信息。
    • 输出信息解读
      • NAME(名称):这是设备的名称,例如/dev/sda是一个磁盘设备名称,/dev/sda1是该磁盘的一个分区名称。名称的格式与设备在系统中的命名规则一致,对于IDE和SCSI(包括SATA)设备,磁盘通常是/dev/sdXX为字母),分区是/dev/sdXnn为数字);对于NVMe设备,可能是/dev/nvmeXnY的形式。
      • MAJ:MIN(主设备号和次设备号):主设备号用于标识设备类型,次设备号用于在同一类型设备中区分不同的个体。这两个数字组合起来可以唯一确定一个设备,主要用于系统内核识别和管理设备。不过,对于普通用户来说,这些数字的直接用途不大。
      • RM(可移动设备):这个字段的值为010表示设备不是可移动设备,如内置硬盘;1表示设备是可移动设备,如USB闪存盘。
      • SIZE(大小):以比较直观的方式显示设备的容量大小,如100G表示设备容量为100GB,2T表示2TB。如果使用-b选项,会以字节为单位显示精确的大小。
      • RO(只读):该字段的值为010表示设备不是只读的,即可以进行读写操作;1表示设备是只读的,如某些光盘驱动器在特定情况下可能是只读的。
      • TYPE(类型):显示设备的类型,如disk表示磁盘设备,part表示分区,lvm表示逻辑卷管理(Logical Volume Management)相关的设备等。这有助于快速了解设备在系统中的角色。
      • MOUNTPOINT(挂载点):如果设备已经挂载到文件系统中的某个目录,这里会显示挂载点的名称。例如,如果一个分区挂载到/home目录,那么在该分区对应的行中,MOUNTPOINT字段会显示/home。如果设备没有挂载,这个字段为空。
  3. 使用场景和示例

    • 查看磁盘和分区布局:在没有任何选项的情况下,lsblk会以简洁明了的方式展示系统中磁盘和分区的层次结构。例如,它可以清晰地显示出一个磁盘有几个分区,分区之间的关系,以及每个分区是否挂载等信息。这对于了解系统的存储架构非常有用,比如在安装新软件或者配置数据存储时,需要知道系统中有多少可用的磁盘空间以及分区情况。
    • 检查设备挂载情况:通过-m选项可以重点关注设备的挂载点信息。例如,在排查系统启动问题或者文件访问问题时,如果怀疑是某个存储设备没有正确挂载,可以使用lsblk -m来快速检查设备的挂载状态。
    • 查看文件系统信息:使用-f选项可以查看设备上的文件系统信息。这在需要了解磁盘分区采用何种文件系统(如ext4、NTFS等),或者检查文件系统是否正常时非常有用。例如,在数据恢复或者系统迁移过程中,需要明确每个分区的文件系统类型,以便采取正确的操作。

image-20220301172636213

[root@lamp-241 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Mar  2 01:16 /dev/sda
brw-rw---- 1 root disk 8,  1 Mar  2 01:16 /dev/sda1
brw-rw---- 1 root disk 8,  2 Mar  2 01:16 /dev/sda2
brw-rw---- 1 root disk 8, 16 Mar  2 01:16 /dev/sdb

df命令

[root@lamp-241 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  6.1G   11G  36% /
devtmpfs                 899M     0  899M   0% /dev
tmpfs                    911M     0  911M   0% /dev/shm
tmpfs                    911M  9.6M  902M   2% /run
tmpfs                    911M     0  911M   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
tmpfs                    183M     0  183M   0% /run/user/0


显示信息文件系统列下面带tmpfs字样的是虚拟内存文件系统(此处不做展开)。

文件系统/dev/mapper/centos-root的挂载点是/(根目录),即通常所说的根分区(或根文件系统);
并且/dev/mapper是linux内核2.6中提供的一个从逻辑设备到物理设备的映射机制,简单说这就是如果你用了lvm,就会看到根目录是这个文件系统,因为它不是一个单纯的物理设备,而是一个虚拟机的逻辑卷组。


/dev/sda1(boot分区)中保存了内核映像和一些启动时需要的辅助文件;

还有一个特殊的分区,swap分区,swap分区是一块特殊的硬盘空间,当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换内存中,从而使当前的程序腾出更多的内存量。
但是由于其性能很差,生产环境是直接禁用的。

fdisk命令参数解释

image-20220301174210734

操作sdb硬盘

[root@lamp-241 ~]# fdisk  /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf0f33bf9.

Command(m for help): m                                  输出帮助信息
Commandaction
   a  toggle a bootable flag                          设置启动分区
   b  edit bsd disklabel                              编辑分区标签
   c  toggle the dos compatibility flag
   d  delete a partition                                删除一个分区
   l  list known partition types                      列出分区类型
   m  print this menu                                 帮助
   n  add a new partition                             建立一个新的分区
   o  create a new empty DOS partition table      创建一个新的空白DOS分区表
   p  print the partition table                   打印分区表
   q  quit without saving changes                   退出不保存设置
   s   createa new empty Sun disklabel                创建一个新的空的SUN标示
   t   changea partition's system id              改变分区的类型
   u   changedisplay/entry units                    改变显示的单位
   v   verifythe partition table                  检查验证分区表
   w  write table to disk and exit               保存分区表

任务:操作sdb硬盘(mbr分区)

任务:将sdb硬盘分区

  • 1个主分区
  • 1个扩展分区
  • 2个逻辑分区

要求图解

image-20220301175459705

操作截图

image-20191202161032664

任务完成操作记录

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf0f33bf9

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +256M
Partition 1 of type Linux and of size 256 MiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf0f33bf9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (2-4, default 2):
First sector (526336-41943039, default 526336):
Using default value 526336
Last sector, +sectors or +size{K,M,G} (526336-41943039, default 41943039):
Using default value 41943039
Partition 2 of type Extended and of size 19.8 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf0f33bf9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux
/dev/sdb2          526336    41943039    20708352    5  Extended

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (528384-41943039, default 528384):
Using default value 528384
Last sector, +sectors or +size{K,M,G} (528384-41943039, default 41943039): +10G
Partition 5 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf0f33bf9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux
/dev/sdb2          526336    41943039    20708352    5  Extended
/dev/sdb5          528384    21499903    10485760   83  Linux

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (21501952-41943039, default 21501952):
Using default value 21501952
Last sector, +sectors or +size{K,M,G} (21501952-41943039, default 41943039):
Using default value 41943039
Partition 6 of type Linux and of size 9.8 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf0f33bf9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux
/dev/sdb2          526336    41943039    20708352    5  Extended
/dev/sdb5          528384    21499903    10485760   83  Linux
/dev/sdb6        21501952    41943039    10220544   83  Linux

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 7
No free sectors available

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@lamp-241 ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 Mar  2 01:58 /dev/sdb
brw-rw---- 1 root disk 8, 17 Mar  2 01:58 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Mar  2 01:58 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Mar  2 01:58 /dev/sdb5
brw-rw---- 1 root disk 8, 22 Mar  2 01:58 /dev/sdb6
[root@lamp-241 ~]#

最后查看分区情况

[root@lamp-241 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
├─sdb1            8:17   0  256M  0 part
├─sdb2            8:18   0    1K  0 part
├─sdb5            8:21   0   10G  0 part
└─sdb6            8:22   0  9.8G  0 part
sr0              11:0    1  4.2G  0 rom

partx刷新分区

如果你创建完了分区,没有正确读取到分区信息,可能是linux内核还未读取到分区信息,可以主动告诉linux内核,新的分区情况。

#让内核重读分区表
# partx -a /dev/sdb

查看是mbr还是gpt?

fdisk命令看

image-20220301180358304

parted命令看

image-20220301180529042

任务,操作sdb硬盘(gpt分区)

当你在企业里遇见,超过2TB的大硬盘分区,就必须用GPT分区了。

小于2TB的磁盘都可以用fdisk分区,但是大于2TB的磁盘,只能用parted命令分区,且转换磁盘为GPT格式

于超老师这里删除了/dev/sdb磁盘的所有分区,使用的是20G的硬盘模拟,同学们可以自己添加新硬盘。

  1. 概述

    • parted是一个在Ubuntu(以及其他Linux系统)中功能强大的分区工具,尤其适用于处理GPT(GUID Partition Table)分区。与fdisk相比,parted支持更多高级的分区操作,并且对GPT分区有很好的兼容性。
  2. 启动和基本操作模式

    • 启动方式:在终端中输入parted [磁盘设备名]来启动parted工具并对指定磁盘进行操作。例如,要对/dev/sda进行分区操作,可以输入parted /dev/sda。进入parted后,会出现(parted)提示符,表示已进入parted的交互式操作环境。
    • 基本命令格式:在(parted)提示符下,输入命令来执行各种操作。可以使用help命令查看所有可用的命令及其简要说明。例如,help print会显示关于print命令(用于打印分区信息)的详细帮助内容。
  3. 处理GPT分区的常用操作

    • 查看分区信息(print)
      • 基本语法:在(parted)提示符下输入printprint allprint主要用于查看当前磁盘的分区表信息,包括分区编号、起始和结束位置、文件系统类型等。print all则会提供更全面的信息,除了分区表,还会显示磁盘的物理信息,如磁盘容量、扇区大小等。
      • 输出信息解读:对于分区表部分,输出会显示每个分区的Number(分区编号)、Start(起始位置,以字节为单位)、End(结束位置)、Size(分区大小)、File system(文件系统类型)、Name(分区名称,在GPT分区中每个分区可以有一个名称)等信息。这些信息有助于了解磁盘的分区布局和每个分区的属性。
    • 创建分区(mkpart)
      • 基本语法mkpart [分区类型] [文件系统类型] [起始位置] [结束位置]。分区类型可以是primary(主分区)、logical(逻辑分区)或extended(扩展分区,在GPT分区中通常不需要创建扩展分区,因为GPT分区没有主分区数量限制)。文件系统类型可以是ext4fat32ntfs等常见的文件系统。起始位置和结束位置以字节为单位指定分区的范围。例如,mkpart primary ext4 1MB 10GB会创建一个从1MB开始到10GB结束的主分区,并格式化为ext4文件系统。
      • 注意事项:在创建分区时,要确保指定的位置和大小是合理的,避免与已有的分区重叠。同时,由于parted操作直接对磁盘进行更改,操作前一定要备份重要数据,因为分区操作可能会导致数据丢失。
    • 删除分区(rm)
      • 基本语法rm [分区编号]。例如,rm 1会删除编号为1的分区。和其他分区删除操作一样,这会导致分区上的数据全部丢失,所以要谨慎使用。
    • 设置分区名称(name)
      • 基本语法name [分区编号] [新名称]。这是GPT分区特有的功能,允许为分区设置一个名称。例如,name 2 MyDataPartition会将编号为2的分区名称设置为MyDataPartition。分区名称可以方便用户识别分区的用途。
    • 对齐分区(align - check和align - to)
      • 对齐检查(align - check):基本语法为align - check [分区类型] [分区编号]。分区类型可以是minimal(最小对齐)或optimal(最佳对齐)。这个命令用于检查分区是否按照指定的对齐方式对齐。例如,align - check minimal 3会检查编号为3的分区是否按照最小对齐方式对齐。
      • 对齐设置(align - to):基本语法为align - to [对齐方式] [对齐值]。对齐方式可以是sector(扇区)、cylinder(柱面)等,对齐值是一个具体的数字。这个命令用于设置分区的对齐方式。正确的分区对齐可以提高磁盘性能,特别是在使用固态硬盘(SSD)时,良好的对齐可以优化读写操作。
  4. 保存和退出

    • 在完成分区操作后,输入quit命令退出partedparted会自动将分区表的更改保存到磁盘。不过,在进行复杂的分区操作或者不确定操作是否正确时,最好先备份数据,因为一旦出现错误,可能会导致数据丢失。
[root@lamp-241 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d
Partition number (1,2,5,6, default 6):

按下d即可删除分区,可以是主分区1,以及扩展分区2(携带删除所有逻辑分区)
最后按下w写入磁盘。

查看当前分区情况

[root@lamp-241 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
sr0              11:0    1  4.2G  0 rom

parted命令分区GPT

  • gpt分区表,没有扩展分区的类型,只有主分区、逻辑分区。
  • 可以用parted命令对磁盘分区为GPT,但是比较麻烦
  • 可以用parted命令,修改磁盘分区表类型(gpt改为mbr)
    • fdisk命令是专门针对mbr分区格式的,无法操作GPT格式硬盘。

parted命令修改磁盘为mbr类型。

[root@lamp-241 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

修改磁盘分区表类型为mbr类型

(parted) mktable msdos
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
(parted)
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags

(parted)

gdisk命令分区gpt类型

由于fdisk命令不支持gpt分区,parted命令又不好用,因此用gdisk命令(同样支持mbr分区表)。

  1. gdisk概述

    • gdisk是一个专门用于处理GPT(GUID Partition Table)分区的命令行工具,在Ubuntu等Linux系统中被广泛使用。它类似于fdisk,但主要专注于GPT分区的操作,提供了创建、删除、修改和查看GPT分区的功能。
  2. 查看分区信息

    • 基本语法gdisk -l [磁盘设备名]。例如,gdisk -l /dev/sda会列出/dev/sda磁盘的GPT分区信息。
    • 输出内容解读
      • 输出会显示磁盘的整体信息,包括磁盘大小、扇区大小等。对于每个分区,会显示Partition table scan:信息,表明分区表的扫描状态是否正常。然后会列出每个分区的Number(分区编号)、Start(起始扇区)、End(结束扇区)、Size(分区大小)、Code(分区类型代码,用于识别分区类型,如0700表示Microsoft基本数据分区)、Name(分区名称)等内容。通过这些信息可以详细了解磁盘的分区布局和每个分区的基本属性。
  3. 进入交互式分区操作界面

    • 基本语法gdisk [磁盘设备名]。例如,输入gdisk /dev/sda后,会进入gdisk的交互式分区操作界面。在这个界面中,会有一个命令提示符(如Command (? for help):),在这里可以输入各种命令来操作分区。
    • 可用命令帮助:在提示符下输入?可以查看所有可用的命令及其说明。这对于初次使用gdisk或者不熟悉某些命令的用户非常有用。
  4. 分区操作命令

    • 创建分区(n)
      • 输入n后,gdisk会引导用户创建新分区。首先需要指定分区编号(通常按回车键可以使用默认的下一个可用编号),然后是分区的起始扇区(可以按回车键使用默认值)和结束扇区(可以通过指定扇区数量或者分区大小来确定)。接着,需要为分区选择分区类型代码(可以输入L查看代码列表及其对应的分区类型,如8300表示Linux文件系统分区)。这样就可以创建一个新的GPT分区。
    • 删除分区(d)
      • 输入d后,需要指定要删除的分区编号。例如,输入d,然后输入3,就会删除编号为3的分区。要注意的是,删除分区会导致分区上的数据全部丢失,所以在操作之前一定要确保数据已经备份。
    • 转换分区类型(t)
      • 输入t后,先指定要转换类型的分区编号,然后输入新的分区类型代码。这在需要改变分区的用途(如从一个文件系统分区转换为另一个文件系统分区或者转换为其他特殊用途分区)时非常有用。
    • 查看分区表(p)
      • 输入p可以查看当前磁盘的分区表,这会显示所有现有分区的详细信息,包括前面提到的分区编号、起始和结束位置、分区类型等。这个命令在创建或修改分区后可以用于检查分区设置是否正确。
    • 保存并退出(w)或不保存退出(q)
      • 完成分区操作后,如果想要保存修改后的分区表,可以输入w。这会将分区表的更改写入磁盘并退出gdisk。如果不想保存任何修改,可以输入q直接退出。和其他分区工具一样,在输入w之前,一定要确保分区操作是正确的,因为一旦保存,分区的更改是不可逆的(除了通过数据恢复工具尝试恢复数据,但这也不能保证完全恢复)。
  5. 备份和恢复分区表

    • 备份分区表(b)
      • gdisk的交互式界面中,输入b,然后指定备份文件名,可以将当前磁盘的GPT分区表备份到一个文件中。例如,b backup.gpt会将分区表备份到当前目录下名为backup.gpt的文件中。这在需要恢复分区表或者进行灾难恢复时非常有用。
    • 恢复分区表(r)
      • 输入r可以进入恢复模式。在恢复模式下,可以通过之前备份的文件来恢复分区表。按照提示操作,指定备份文件的位置,就可以尝试恢复分区表。不过,这种恢复操作可能会覆盖当前的分区表设置,所以也要谨慎使用。
安装gdisk命令
[root@lamp-241 ~]# yum install gdisk -y


-l 列出硬盘的分区表信息

[root@lamp-241 ~]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************

Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 951AECF9-82E1-4DBA-9C2A-EECA931CC6E8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
[root@lamp-241 ~]#
[root@lamp-241 ~]#

gdisk对磁盘分区为gpt



查看gdisk语法帮助
[root@lamp-241 ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Command (? for help):
查看帮助信息


Command (? forhelp): ?
b    backupGPTdatatoafile
c    changeapartition'sname
d    deleteapartition                    #删除分区
i    showdetailedinformationonapartition
l    listknownpartitiontypes            #列出分区类型
n    addanewpartition                    #添加新分区
o    createanewemptyGUIDpartitiontable (GPT)
p    printthepartitiontable                #打印分区列表
q    quitwithoutsavingchanges            #不保存退出
r    recoveryandtransformationoptions (expertsonly)
s    sortpartitions
t    changeapartition'stypecode        #修改分区类型
v    verifydisk
w    writetabletodiskandexit            #保存退出
x    extrafunctionality (expertsonly)
?    printthismenu 


添加新分区

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D243B068-B5C3-4A77-8A70-86B69C0A9ED5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

添加分区指令
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D243B068-B5C3-4A77-8A70-86B69C0A9ED5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-41943006, default = 4196352) or {+-}size{KMGTP}:
Last sector (4196352-41943006, default = 41943006) or {+-}size{KMGTP}: +10G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D243B068-B5C3-4A77-8A70-86B69C0A9ED5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 16777149 sectors (8.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem
   2         4196352        25167871   10.0 GiB    8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

验收分区

[root@lamp-241 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
├─sdb1            8:17   0    2G  0 part
└─sdb2            8:18   0   10G  0 part
sr0              11:0    1  4.2G  0 rom

重新改为mbr分区类型

重置为mbr类型,会删除所有分区
[root@lamp-241 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable msdos
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags


再次查看分区表类型

[root@lamp-241 ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ad5a3

   Device Boot      Start         End      Blocks   Id  System

最后再重新改为mbr

任务:将sdb硬盘分区

  • 1个主分区 5G
  • 1个扩展分区 15G
    • 2个逻辑分区
[root@lamp-241 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G
Partition 1 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (2-4, default 2):
First sector (10487808-41943039, default 10487808):
Using default value 10487808
Last sector, +sectors or +size{K,M,G} (10487808-41943039, default 41943039):
Using default value 41943039
Partition 2 of type Extended and of size 15 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (10489856-41943039, default 10489856):
Using default value 10489856
Last sector, +sectors or +size{K,M,G} (10489856-41943039, default 41943039): +8G
Partition 5 of type Linux and of size 8 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (27269120-41943039, default 27269120):
Using default value 27269120
Last sector, +sectors or +size{K,M,G} (27269120-41943039, default 41943039):
Using default value 41943039
Partition 6 of type Linux and of size 7 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ad5a3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    41943039    15727616    5  Extended
/dev/sdb5        10489856    27267071     8388608   83  Linux
/dev/sdb6        27269120    41943039     7336960   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@lamp-241 ~]#

检查分区情况

image-20220301191715490

什么是磁盘格式化

  1. 定义

    • 磁盘格式化是指对磁盘或磁盘分区进行初始化的操作,其目的是为了在磁盘上建立起文件系统,使磁盘能够被操作系统识别并用于存储数据。简单来说,就像是为一片空地(磁盘)划分出不同的区域(文件系统结构),并制定好规则(文件存储和访问规则),以便能够有序地建造房屋(存储数据)。
  2. 过程与步骤

    • 清除原有数据结构:在格式化过程中,首先会清除磁盘或分区上原有的数据和数据结构。这包括之前存储的文件、文件夹、文件系统的索引信息等。例如,对于一个已经使用过的硬盘分区,格式化会将用户之前存储的文档、图片、程序等所有数据删除,使磁盘回到一个初始的“空白”状态。不过,需要注意的是,在某些情况下,格式化后的数据可能通过专业的数据恢复工具恢复一部分,但这种恢复并不保证能完全找回所有数据。
    • 划分存储单元:格式化操作会根据所选的文件系统类型,对磁盘空间进行划分。以常见的文件系统为例,会划分出扇区(Sector)、簇(Cluster)或块(Block)等存储单元。扇区是磁盘物理结构上的最小存储单位,一般大小为512字节。而簇(在FAT文件系统等中使用)或块(在Linux的ext文件系统等中使用)是文件系统管理磁盘空间的逻辑单位,它们是由一个或多个扇区组成的。例如,在FAT32文件系统中,簇的大小可能是4KB(即8个512字节的扇区),文件系统会以簇为单位来分配磁盘空间给文件。
    • 建立文件系统结构
      • 文件分配表(FAT - File Allocation Table)或索引节点(inode):不同的文件系统会建立不同的机制来管理文件的存储位置。在FAT文件系统中,会创建文件分配表,它记录了文件在磁盘上的存储位置,即文件占用了哪些簇。每个文件在FAT中有一个或多个表项,通过这些表项可以追踪文件数据在磁盘上的分布情况。在Linux的ext文件系统中,会使用索引节点(inode)来管理文件。每个文件都有一个对应的inode,inode中存储了文件的属性信息(如文件大小、所有者、权限等)以及指向文件数据块的指针,通过inode可以快速定位文件的数据存储位置。
      • 根目录(Root Directory):还会建立根目录,它是文件系统的起始点,所有的文件和文件夹都在根目录下或者根目录的子目录下进行组织。根目录就像是一棵树的树根,所有的树枝(文件夹)和树叶(文件)都从这里开始分支和生长。
  3. 文件系统类型与格式化的关系

    • 不同文件系统类型的特点
      • FAT32(File Allocation Table 32):这是一种比较常见的文件系统,兼容性很好,被广泛应用于各种存储设备,如U盘、移动硬盘等。FAT32文件系统的优点是兼容性强,几乎可以被所有操作系统识别。但是它也有一些局限性,如单个文件最大不能超过4GB,并且在存储大量小文件时,可能会因为簇的分配方式而导致磁盘空间利用率不高。
      • NTFS(New Technology File System):主要用于Windows操作系统。NTFS具有更高的安全性,支持文件加密、权限设置等功能。它能够处理大文件,并且在磁盘空间利用和文件存储效率方面比FAT32更优秀。例如,NTFS可以更好地处理大量小文件的存储,减少磁盘碎片的产生。
      • ext4(Fourth Extended File System):是Linux系统中常用的文件系统。ext4在性能、可靠性和功能方面都有很好的表现。它支持更大的文件系统容量和文件大小,具有日志功能(可以在系统崩溃或突然断电后更快地恢复文件系统),并且在存储效率和数据完整性保护方面也有出色的设计。
    • 格式化时选择文件系统类型:在进行磁盘格式化时,需要根据磁盘的用途和使用的操作系统来选择合适的文件系统。例如,如果磁盘主要用于在Windows和Linux系统之间交换数据,FAT32可能是一个比较好的选择;如果磁盘是专门用于Windows系统,并且需要存储大文件和进行高级的安全设置,那么NTFS更合适;而对于只在Linux系统中使用的磁盘,ext4通常是首选的文件系统。
  4. 格式化的应用场景和注意事项

    • 应用场景
      • 新磁盘初次使用:当安装新的硬盘、U盘或其他存储设备时,需要对其进行格式化,以建立文件系统,使其能够正常存储数据。例如,购买了一个新的移动硬盘,在第一次使用之前,需要将其连接到计算机上,通过操作系统的格式化工具对其进行格式化。
      • 重新分配磁盘用途或清除数据:如果想要改变磁盘分区的用途,或者清除磁盘上的所有数据,格式化是一种有效的方法。例如,当要将一个旧的硬盘从存储个人文件转变为存储系统备份数据时,可以先格式化该硬盘,然后再进行备份数据的存储。
    • 注意事项
      • 数据备份:由于格式化会清除磁盘上的所有数据,所以在进行格式化操作之前,一定要确保重要数据已经备份到其他存储设备上。
      • 不可逆性:格式化操作在大多数情况下是不可逆的。虽然有一些数据恢复工具可以尝试恢复格式化后的数据,但恢复的成功率和数据完整性无法保证,所以在操作时要谨慎。

格式化文件系统

分区完毕之后,就得进行格式化文件系统,磁盘才可以使用,这就好比,你买了个房,打完隔断之后,装修一下才能住!

磁盘格式化是因为不同的操作系统设置的文件属性、权限各不相同,还得将分区格式化后,成为操作系统能够识别、兼容的文件系统(filesystem)。

分区搞明白之后,下一步就是要进行分区格式化文件系统

1.分区等于是对磁盘的扇区做分配处理,每一个分区,占用哪一段连续的分区。

2.分区完了之后,你是一个普通人类,如何去读写扇区里的数据?答案就是文件系统

image-20220228194428280

文件系统介绍

计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念

用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址(数据块,也有编号)为多少的数据块上,只需要记住这个文件的所属目录和文件名,即可访问该文件。

  1. 文件系统的定义与作用

    • 定义:文件系统是操作系统用于在存储设备(如磁盘、光盘、闪存等)上组织、存储和检索数据的一种方法和数据结构。它就像是一个图书馆的管理系统,负责将各种书籍(数据)有序地存放在书架(存储设备)上,并能够方便地找到它们。
    • 作用
      • 数据存储与组织:文件系统将数据以文件和文件夹(目录)的形式存储在磁盘等存储介质上。文件是数据的基本存储单元,用于存储文本、图像、程序等各种信息。文件夹则用于对文件进行分类和组织,就像图书馆中的书架分区一样,使得用户可以方便地查找和管理数据。例如,在计算机的硬盘上,用户可以将文档文件放在“文档”文件夹中,将图片文件放在“图片”文件夹中。
      • 空间分配与管理:文件系统会合理地分配存储设备的空间给不同的文件和文件夹。它会根据一定的规则,如以簇(在某些文件系统中)或块(在另一些文件系统中)为单位来分配空间。例如,在FAT32文件系统中,以簇为单位进行空间分配,一个簇可能包含多个扇区,文件系统会根据文件的大小为其分配适当数量的簇。
      • 提供数据访问接口:文件系统为操作系统和应用程序提供了访问存储数据的接口。当用户或应用程序需要读取或写入文件时,通过文件系统提供的接口来操作。例如,当用户打开一个文本文件时,操作系统通过文件系统找到该文件在磁盘上的存储位置,读取文件内容并在文本编辑器中显示;当用户保存文件时,文件系统将新的内容写入到文件对应的磁盘位置。
  2. 常见文件系统类型及其特点

    • FAT32(File Allocation Table 32)
      • 兼容性广泛:FAT32是一种历史悠久且应用广泛的文件系统。它几乎可以被所有主流操作系统识别,包括Windows、Linux、macOS等。这使得它非常适合用于可移动存储设备,如U盘、移动硬盘等,方便在不同操作系统的计算机之间交换数据。
      • 简单的结构与限制:FAT32文件系统的结构相对简单,基于文件分配表(FAT)来管理文件的存储位置。然而,它也有一些局限性。例如,它的单个文件最大不能超过4GB。这在存储大型文件(如高清电影、大型软件安装包等)时会受到限制。此外,在处理大量小文件时,由于其簇的分配方式,可能会导致磁盘空间利用率不高。
    • NTFS(New Technology File System)
      • 高级功能与安全性:NTFS主要用于Windows操作系统。它提供了许多高级功能,如文件加密、访问权限控制、磁盘配额等。文件加密功能可以保护用户的敏感数据,防止未经授权的访问;访问权限控制允许管理员或用户为不同的文件和文件夹设置不同的访问权限,如只读、读写、完全控制等。磁盘配额功能可以限制用户对磁盘空间的使用,对于多用户共享的计算机或服务器非常有用。
      • 高效的空间利用和性能:NTFS在磁盘空间利用和文件存储效率方面表现出色。它能够更有效地处理大量小文件的存储,减少磁盘碎片的产生。相比FAT32,NTFS可以支持更大的文件和文件系统容量,能够满足现代计算机对存储大容量文件和大量数据的需求。
    • ext4(Fourth Extended File System)
      • Linux系统的主力文件系统:ext4是Linux系统中常用的文件系统。它在性能、可靠性和功能方面都有很好的表现。ext4支持更大的文件系统容量(理论上最大可达1EB,1EB = 1024PB)和文件大小(文件大小最大可达16TB),这使得它能够适应大型数据存储的需求。
      • 日志功能与数据完整性:ext4具有日志功能,这是它的一个重要特点。日志就像是一个操作记录,当系统出现故障(如突然断电、系统崩溃等)时,文件系统可以通过查看日志来快速恢复文件系统的状态,减少数据丢失的风险,保证数据的完整性。此外,ext4在存储效率和数据管理方面也有优秀的设计,能够有效地组织和存储文件。
  3. 文件系统的内部结构

    • 文件分配表(FAT)或索引节点(inode)
      • FAT文件系统:在FAT文件系统(如FAT32)中,文件分配表是核心的管理结构。FAT是一个链表结构,用于记录文件在磁盘上的存储位置。每个文件在FAT中有一个或多个表项,这些表项通过指针相连,指示文件占用的簇的顺序。例如,一个文件存储在磁盘上的第3个、第5个和第7个簇中,FAT中就会有相应的表项来记录这个顺序,通过这些表项可以追踪文件数据在磁盘上的分布情况。
      • ext文件系统(以ext4为例):在ext4文件系统中,使用索引节点(inode)来管理文件。每个文件都有一个对应的inode,inode存储了文件的属性信息(如文件大小、所有者、权限等)和指向文件数据块的指针。文件的数据块可能分布在磁盘的不同位置,inode中的指针可以准确地定位这些数据块。例如,当读取一个文件时,操作系统首先找到文件对应的inode,然后根据inode中的指针读取文件的数据块。
    • 目录结构:文件系统中的目录(文件夹)用于组织文件。目录本身也是一种特殊的文件,它存储了其中包含的文件和子目录的名称以及对应的索引信息(在FAT文件系统中是与FAT表相关的信息,在ext文件系统中是与inode相关的信息)。例如,在一个名为“文档”的目录中,文件系统会记录该目录下所有文件的名称和它们在磁盘上的存储位置索引,这样当用户访问这个目录时,文件系统可以快速地列出目录中的文件。
  4. 文件系统的发展历程与趋势

    • 发展历程:从早期简单的文件系统,如FAT文件系统的前身,到如今功能强大的文件系统,如ext4和NTFS,文件系统经历了漫长的发展过程。早期文件系统主要关注基本的数据存储和简单的访问功能,随着计算机技术的发展,对文件系统的容量、性能、安全性和数据完整性等方面的要求不断提高,促使文件系统不断进化。例如,NTFS的出现解决了FAT文件系统在安全性和容量方面的许多问题,ext4在Linux系统中的发展也提高了Linux系统的数据存储和管理能力。
    • 趋势
      • 适应大数据和云计算:随着大数据时代的到来,文件系统需要能够处理海量的数据存储和高速的数据访问。一些新的文件系统正在研究和开发中,以适应云计算环境下的数据存储和分布式计算的需求。例如,分布式文件系统(如Ceph等)能够将数据存储在多个节点上,提供高可用性和高扩展性的存储解决方案。
      • 提升性能和安全性:在性能方面,文件系统会不断优化数据读写的速度和效率,尤其是在固态硬盘(SSD)等新型存储设备上的性能。在安全性方面,加强数据加密、访问控制和数据完整性保护等功能仍然是重要的发展方向,以应对日益增长的网络安全威胁。

image-20220228195117900

图解文件系统的使用

image-20220228195649664

有哪些文件系统

磁盘文件系统是一种用来利用数据存储设备来保存计算机文件的计算机程序(c、c++)。

当你在企业里,比如遇见业务需要,公司需要你评估各种文件系统,有一批存储设备需要格式化文件系统,如U盘,移动硬盘,固态硬盘等。

image-20220228200527162

目前常见的系统平台就3类,分别是 微软的Windows,苹果的MacOS,开源社区的Linux,每个操作系统都有设计自己的文件系统,以本文讨论的几款文件系统来说,他们的归属如下:

Dev FAT32 exFAT NTFS ReFS HFS/HFS+ APFS Ext2/3/4 XFS
Window
Mac
Linux

文件系统的区别

总之不同的文件系统,区别在于

  • 兼容性,不同系统平台,不一定识别、或者无法读写操作
  • 容量大小、支持硬盘最大容量有限制

文件系统的兼容性

我们经常需要跨平台工作,例如从 Win10 拷贝个文件到U盘,然后插入到 Mac Book中,或者 Linux 电脑中,这时候如果U盘的文件系统兼容性不够好,就会导致有的平台能识别U盘的文件,有的电脑无法识别。

image-20220228201706755

不同系统之间的文件系统不兼容,就得通过一些第三方工具来实现读写,否则可能只能读取,无法写入。

支持的磁盘容量限制

image-20220228201828730

不同系统支持的文件系统

  • window
    • 最古老的FAT32用于windows XP,无法支持大于32G的存储分区和大于4G的文件
    • Win10 使用NTFS,支持加密、压缩、权限控制等等,且还支持日志保证数据一致性,主流硬盘都是NTFS
    • 专门给闪存使用的ExFAT,属于是FAT32和NTFS选择的折中,并且同时支持win和macos。
  • linux
    • Ext系列则是Linux社区上设计的文件系统,由于Linux称霸服务器端,大部分开发者其实都或多或少接触过Ext系列文件系统。
    • 在centos7.x之前,都还是Ext4、Ext3都支持日志功能
      • (日志功能指的是,不会因为突然断电,导致磁盘数据损坏,能够通过日志恢复磁盘文件)
    • XFS(重点,centos7开始默认文件系统)

日志文件系统

journaling fs就是我们常说的: 日志型文件系统。

比较典型的有: ext3, ext4, xfs等, 而ext2是不支持 日志的文件系统,该文件系统基本上已经不再使用;

简单介绍其实现原理: 在磁盘上有一块区域专门用来保存日志,叫做journaling(日志) 区域,在更新磁盘上特定的block之前,首先把要做的变更 记录到 journaling 区域,然后才去更新相应的block。

这样在系统崩溃的时候,可以通过journaling区域的信息,进行replay, 从而实现恢复;

image-20191203101421874

简单理解

如果是非日志文件系统,进行读写操作,内核直接修改文件元数据,如果在写入过程异常崩溃,文件一致性就会出错,且修复过程很漫长,因此必须使用日志类型文件系统。

XFS(centos7)

XFS是高性能文件系统,由于它的高性能,XFS成为了许多企业级系统的首选,特别是有大量数据,需要结构化伸缩性和稳定性的。

例如,RHEL/CentOS 7 和Oracle Linux将XFS作为默认文件系统,SUSE/openSUSE已经为XFS做了长期支持。

XFS有许多独特的性能提升功能使他从众多文件系统中脱颖而出,像可伸缩/并行 IO,元数据日志,热碎片整理,IO 暂停/恢复,延迟分配等。

XFS 文件系统有一些缺陷,例如它不能压缩,删除大量文件时性能低下。

因此,在大公司里,面对超大流量的业务,面对特殊领域的业务,服务器依然会采用其他的文件系统,我们只需要根据业务,继续做调研,然后重新格式化硬盘,选择一个合适的文件系统即可。

网络文件系统

  • Smb,Server Message Block、服务消息块,文件共享协议
  • NFS,Network File System(NFS),网络文件系统,访问网络中其他主机的文件就像是自己计算机一样

分布式文件系统

  • Ceph 是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

格式化文件系统实践

windows常用文件系统

FAT32 最大支持单个文件大小不超过4G
NTFS,最大可以存储16EB数据

linux常用文件系统

EXT4 单个文件最大支持16TB,最大支持1EB文件系统,centos7之前用这个多
xfs  比ext4更先进的文件系统,最大支持8EB文件系统,单个文件最大支持8EB,也是centos7默认的文件系统。

blkid命令查看分区信息

blkid 命令:可以查看块设备(包括交换分区)的文件系统类型、LABEL、UUID、挂载目录等信息
指定查看磁盘或分区的信息
[root@yuchao-linux-242 yum.repos.d]# blkid /dev/sda
/dev/sda: PTTYPE="dos"
[root@yuchao-linux-242 yum.repos.d]#
[root@yuchao-linux-242 yum.repos.d]# blkid /dev/sda1
/dev/sda1: UUID="c07b71e0-a0a4-41e5-9c12-24646b84c73f" TYPE="xfs"

显示所有分区的信息
[root@yuchao-linux-242 yum.repos.d]# blkid
/dev/sda1: UUID="c07b71e0-a0a4-41e5-9c12-24646b84c73f" TYPE="xfs"
/dev/sda2: UUID="S2y7zo-9SQ9-prrr-ZOtT-NdW8-vVLo-jFwngl" TYPE="LVM2_member"
/dev/sr0: UUID="2018-05-03-20-55-23-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="0a7fed5a-edce-4354-aa17-2aa6781e1b85" TYPE="xfs"
/dev/mapper/centos-swap: UUID="706d68e5-0a75-46d2-ab62-cede96863212" TYPE="swap"
  1. 命令概述

    • blkid是Ubuntu(以及其他Linux系统)中一个用于定位或打印块设备(如硬盘、分区、USB存储设备等)相关属性信息的工具。这些属性信息主要包括设备的UUID(通用唯一识别码)、文件系统类型、标签等,它可以帮助用户快速了解系统中存储设备的关键信息。
  2. 基本语法和输出信息

    • 基本语法blkid [选项] [设备名]。常见的选项有-o(用于指定输出格式)、-s(用于指定要显示的标签)等。如果不指定设备名,blkid会显示所有块设备的相关信息;如果指定设备名,如blkid /dev/sda1,则只显示/dev/sda1这个设备的信息。
    • 输出信息解读
      • 设备名(如/dev/sda1):这是块设备在系统中的名称,通过这个名称可以在其他命令(如mount)中引用该设备。设备名的格式与设备类型有关,例如/dev/sdX通常表示SCSI或SATA接口的磁盘设备及其分区(X为字母或数字),/dev/nvmeXnY表示NVMe接口的固态硬盘设备及其分区(XY为数字)。
      • UUID(通用唯一识别码):这是一个很长的字符串,用于在系统中唯一标识一个块设备。UUID的优点是它不依赖于设备的挂载顺序或设备名等因素,在系统配置文件(如/etc/fstab)中使用UUID来指定设备可以提高系统的稳定性和可靠性。例如,UUID="12345678 - 9abc - def0 - 1234 - 56789abcdef0"这样的格式,不同的设备有不同的UUID。
      • 文件系统类型(TYPE):显示设备上所使用的文件系统,如ext4NTFSvfat等。这有助于用户了解设备的文件系统格式,特别是在挂载设备或者进行数据恢复等操作时,需要知道设备的文件系统类型。
      • 标签(LABEL):有些设备可能会有一个用户定义的标签,用于更方便地识别设备。例如,一个USB存储设备可能被标记为MyUSB,这个标签就会在blkid的输出中显示。标签可以在格式化设备或者使用文件系统工具时设置。
  3. 使用场景和示例

    • 查看设备信息用于挂载操作:在Ubuntu中,当需要挂载一个存储设备(如外部硬盘或U盘)时,blkid可以提供设备的文件系统类型和UUID等信息。例如,要将一个新插入的U盘挂载到/media/usb目录下,首先可以使用blkid查看U盘的设备名、文件系统类型等信息,然后根据这些信息使用mount命令进行正确的挂载操作。
    • 在系统配置文件中使用/etc/fstab是Ubuntu系统中用于自动挂载文件系统的配置文件。在这个文件中,可以使用设备的UUID来指定要挂载的设备,这样即使设备名在系统重启后发生变化(如添加新的磁盘设备导致设备名重新编号),系统仍然能够正确地挂载设备。blkid可以帮助用户获取设备的UUID,以便在/etc/fstab文件中准确地填写配置信息。例如,将/dev/sda1设备(假设是一个ext4文件系统的分区)的挂载信息添加到/etc/fstab中,用户可以先通过blkid获取/dev/sda1的UUID,然后在/etc/fstab中添加类似于UUID=xxxxxxx /mnt/data ext4 defaults 0 0的内容(其中xxxxxxx是实际的UUID),这样系统在启动时就会自动挂载该分区。
    • 检查文件系统类型和标签:如果用户不确定某个设备的文件系统类型或者想要查看设备是否有标签,可以使用blkid。例如,在处理一个旧的硬盘分区时,通过blkid可以快速确定它是ext4还是NTFS文件系统,并且查看是否有自定义的标签来辅助识别分区的用途。

mkfs命令

  1. 命令概述

    • mkfs(make filesystem)是Ubuntu(以及其他Linux系统)中用于在磁盘分区或存储设备上创建文件系统的命令。它是一个功能强大的工具,可以创建多种类型的文件系统,如ext4ext3vfatntfs等,从而使存储设备能够被操作系统有效地用于存储数据。
  2. 基本语法和参数

    • 基本语法mkfs [选项] -t <文件系统类型> <设备名>。其中,-t选项用于指定要创建的文件系统类型,<设备名>是要创建文件系统的目标设备,如/dev/sda1(表示第一个SCSI/SATA硬盘的第一个分区)、/dev/nvme0n1(表示第一个NVMe固态硬盘的第一个分区)等。
    • 常用选项
      • -c:在创建文件系统之前,先检查设备上的坏块。这是一个很有用的选项,特别是对于新的或者可能有损坏的磁盘。例如,mkfs -t ext4 -c /dev/sda1会在创建ext4文件系统之前检查/dev/sda1分区中的坏块。
      • -L:用于为创建的文件系统设置一个标签(label)。标签可以方便用户识别设备,例如mkfs -t vfat -L MYUSB /dev/sdb1会在/dev/sdb1分区创建一个vfat文件系统,并将其标签设置为MYUSB
  3. 创建不同类型文件系统的示例

    • 创建ext4文件系统
      • 例如,要在/dev/sda2分区创建一个ext4文件系统,可以使用命令mkfs -t ext4 /dev/sda2。执行此命令后,mkfs会在/dev/sda2分区上构建ext4文件系统的结构,包括创建索引节点(inode)、分配存储块、建立目录结构等操作,使该分区能够存储和管理ext4格式的文件。
    • 创建vfat文件系统(适用于可移动存储设备和与Windows系统交换数据)
      • 如果要格式化一个U盘(假设设备名为/dev/sdb1)为vfat文件系统,方便在Windows和Linux系统之间交换数据,可以使用命令mkfs -t vfat /dev/sdb1。这样,U盘就被格式化为vfat文件系统,能够被大多数操作系统识别并用于存储文件。
    • 创建ntfs文件系统(在Linux系统中用于与Windows系统兼容的分区)
      • 虽然Linux系统原生支持ntfs文件系统的读写,但有时候可能需要在一个分区上重新创建ntfs文件系统。例如,在/dev/sda3分区创建ntfs文件系统可以使用命令mkfs -t ntfs /dev/sda3。不过,需要注意的是,在Linux系统中创建ntfs文件系统可能需要安装额外的软件包(如ntfs - 3g)来提供完整的支持。
  4. 注意事项

    • 数据丢失风险mkfs命令会在目标设备上创建新的文件系统,这一过程会擦除设备上原有的所有数据和文件系统结构。因此,在使用mkfs命令之前,务必确保设备上的数据已经备份到其他安全的存储位置。
    • 权限要求:执行mkfs命令通常需要root(超级用户)权限。所以在使用该命令时,要么以root用户身份登录系统,要么使用sudo命令来获取足够的权限。例如,普通用户可以使用sudo mkfs -t ext4 /dev/sda2来在/dev/sda2分区创建ext4文件系统。
    • 设备正确识别:要确保指定的设备名是正确的。错误地指定设备可能会导致意外地格式化其他重要的设备,从而造成数据丢失。在执行mkfs命令之前,可以使用lsblkfdisk -l等命令来确认设备名和分区信息。
mkfs命令
mkfs把分区格式化为某种文件系统

image-20191203102030275

xfs文件系统工具集

sudo apt update
sudo apt install xfsprogs

xfs_info查看文件系统属性

  • dumpe2fs命令用于打印文件系统的超级块和块组信息,用于ext2 ext3 ext4文件

  • 然而centos7使用的xfs文件系统,更换xfs_info命令查看分区信息

  • 命令概述

    • 在Ubuntu中,xfs_info是用于查看XFS文件系统信息的工具。XFS是一种高性能的日志文件系统,主要用于Unix - like操作系统(包括Ubuntu),尤其适用于大容量磁盘和对性能要求较高的场景,如服务器存储、高性能计算等。xfs_info命令可以帮助用户了解XFS文件系统的各种参数和状态。
  • 基本语法和输出信息

    • 基本语法xfs_info [选项] <挂载点或设备名>。通常,如果只提供挂载点(文件系统挂载的目录位置)或设备名(如/dev/sda1),xfs_info就会显示该XFS文件系统的基本信息。
    • 输出信息解读
      • 文件系统名称和挂载点:输出的开头部分会显示文件系统的名称(如/dev/sda1)和挂载点。例如,如果文件系统挂载在/mnt/data,会显示meta - data = /dev/sda1 isize = 512 agcount = 4, agsize = 655360 blks等信息,其中/mnt/data就是挂载点。
      • 元数据信息(meta - data):包括isize(inode大小,以字节为单位,用于存储文件属性等信息)、agcount(分配组的数量,XFS文件系统将磁盘空间划分为多个分配组来管理)、agsize(每个分配组的大小,以块为单位,块大小通常是操作系统设定的固定值)等内容。这些元数据参数描述了文件系统的基本结构和存储分配方式。
      • 数据块信息(data):会显示与数据块相关的参数,如bsize(数据块大小,用于存储文件数据)、sunit(条带单元大小,在RAID等存储阵列环境下用于优化数据读写)、swidth(条带宽度,与sunit相关,用于描述数据在存储阵列中的分布方式)等。这些信息对于理解文件系统的数据存储方式和性能优化很有帮助。
      • 日志信息(log):XFS是一种日志文件系统,输出会包含日志相关的信息,如logstart(日志起始块位置)、logsize(日志大小,以块为单位)等。日志用于在系统故障(如突然断电、系统崩溃等)时快速恢复文件系统的状态,确保数据的完整性。
  • 使用场景和示例

    • 查看文件系统基本参数:在对XFS文件系统进行性能优化、故障排查或者容量规划时,xfs_info可以提供关键的文件系统参数。例如,要了解一个挂载在/data目录的XFS文件系统的基本参数,可以在终端中输入xfs_info /data,然后根据输出的信息,如分配组数量、数据块大小等,来评估文件系统的性能和存储能力。
    • 检查日志信息用于故障恢复:当系统出现异常(如文件系统错误或数据不一致)时,查看日志信息是很重要的。xfs_info提供的日志起始位置和大小等信息可以帮助管理员在必要时进行手动的文件系统修复或恢复操作。例如,如果怀疑文件系统因为突然断电而出现问题,可以先查看xfs_info中的日志信息,然后使用相关的XFS修复工具(如xfs_repair),根据日志来定位和修复可能出现的问题。
  • 注意事项

    • 权限要求:一般需要具有足够的权限(通常是root或通过sudo获取权限)来执行xfs_info命令,因为文件系统信息可能包含敏感的存储配置细节。
    • 设备挂载状态:要查看的文件系统需要处于挂载状态。如果文件系统未挂载,xfs_info可能无法正确显示全部信息或者会显示错误信息。在这种情况下,需要先挂载文件系统再使用xfs_info命令。

lsblk命令

列出所有设备的关系、以及显示文件系统。

[root@lamp-241 ~]# lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         67db0801-a3e0-49a8-9ca9-2313dc74d07b   /boot
└─sda2          LVM2_member                 UX2cdQ-UKp2-EaSV-cs9j-pmQ7-KQ7O-eVU5Kh
  ├─centos-root xfs                         05e85031-542d-4a1b-91a0-b6fa7ec0df49   /
  └─centos-swap swap                        9230f736-0176-47cb-bac0-0a9d58ba4090   [SWAP]
sdb
├─sdb1
├─sdb2
├─sdb5
└─sdb6
sr0             iso9660     CentOS 7 x86_64 2018-05-03-20-55-23-00

会发现,我们创建好的sdb分区,都没有文件系统,是无法使用的。

报错,未知的文件系统null,空。

[root@lamp-241 ~]# mount /dev/sdb5  /mnt
mount: /dev/sdb5 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'

给分区加上文件系统

给刚打好隔断的房间,装修------给刚分区号的磁盘格式化文件系统

主流的服务器使用文件系统,就是ext4和xfs两种,区别是高并发下压测下

  • ext4更稳定
  • xfs性能更强

ext4

[root@lamp-241 ~]# mkfs.ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2097152 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information: done

挂载使用该分区

[root@lamp-241 ~]# mount /dev/sdb5 /yc-ext4/
[root@lamp-241 ~]#
[root@lamp-241 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  6.1G   11G  36% /
devtmpfs                 899M     0  899M   0% /dev
tmpfs                    911M     0  911M   0% /dev/shm
tmpfs                    911M  9.6M  902M   2% /run
tmpfs                    911M     0  911M   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
tmpfs                    183M     0  183M   0% /run/user/0
/dev/sdb5                7.8G   36M  7.3G   1% /yc-ext4

[root@lamp-241 ~]# touch /yc-ext4/超哥牛逼.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls /yc-ext4/
lost+found  超哥牛逼.txt
[root@lamp-241 ~]# umount /yc-ext4/
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls /yc-ext4/
[root@lamp-241 ~]#

xfs

[root@lamp-241 ~]# mkfs.xfs /dev/sdb6
meta-data=/dev/sdb6              isize=512    agcount=4, agsize=458560 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1834240, 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@lamp-241 ~]# lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         67db0801-a3e0-49a8-9ca9-2313dc74d07b   /boot
└─sda2          LVM2_member                 UX2cdQ-UKp2-EaSV-cs9j-pmQ7-KQ7O-eVU5Kh
  ├─centos-root xfs                         05e85031-542d-4a1b-91a0-b6fa7ec0df49   /
  └─centos-swap swap                        9230f736-0176-47cb-bac0-0a9d58ba4090   [SWAP]
sdb
├─sdb1
├─sdb2
├─sdb5          ext4                        f78d5154-6690-4f7b-926a-50d223efba55
└─sdb6          xfs                         5e52d409-e1a8-4bd3-b70b-46c45e3ffb76
sr0             iso9660     CentOS 7 x86_64 2018-05-03-20-55-23-00

挂载xfs分区

[root@lamp-241 ~]# mount /dev/sdb6 /yc-ext4/
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls /yc-ext4/
[root@lamp-241 ~]#
[root@lamp-241 ~]# touch /yc-ext4/于超老师带你学磁盘管理.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls /yc-ext4/
于超老师带你学磁盘管理.txt
[root@lamp-241 ~]#

[root@lamp-241 ~]# umount /yc-ext4/
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls /yc-ext4/

mount挂载实践

  1. 定义

    • 在Ubuntu(以及其他操作系统)中,“挂载(mount)”是一种将文件系统与存储设备(如硬盘分区、USB设备、光盘等)关联起来,并使其在操作系统的文件目录树中可用的操作。可以把挂载想象成将一个装满文件的“箱子”(存储设备)连接到一个已经存在的“文件架”(文件目录)上,这样就可以通过文件架来访问箱子里的文件。
  2. 挂载的目的和作用

    • 统一文件访问方式:通过挂载,操作系统可以使用统一的文件访问方式来处理不同类型的存储设备。无论存储设备是硬盘、U盘、光盘还是网络存储,挂载后都可以像访问本地硬盘文件一样去访问这些设备上的文件。例如,将一个U盘挂载到/media/usb目录后,用户就可以通过访问/media/usb下的文件和文件夹来操作U盘中的内容。
    • 组织文件系统层次结构:挂载点允许将存储设备的文件系统整合到操作系统的文件层次结构中。这样可以根据用户的需求和设备的用途来合理安排文件存储位置。例如,将一个新的硬盘分区挂载到/home/user/data目录下,就可以将这个分区专门用于存储用户的数据文件,使其成为用户主目录下文件系统的一部分。
  3. 挂载点(Mount Point)

    • 定义:挂载点是操作系统文件目录树中的一个目录,用于作为存储设备文件系统的接入点。它是一个已经存在的本地目录,在挂载过程中,存储设备的根目录会被映射到这个挂载点目录。例如,常见的挂载点有/mnt(用于临时挂载设备)、/media(用于自动挂载可移动设备)等。用户也可以创建自己的挂载点目录,如/home/user/mydisk
    • 选择挂载点的注意事项
      • 不能是已被占用的目录:挂载点在挂载操作期间不能是正在被其他文件系统使用的目录。例如,如果/home/user/documents目录正在被访问或者已经挂载了其他设备,就不能再将另一个设备挂载到这个目录,否则可能会导致数据访问混乱或者错误。
      • 符合文件系统层次结构规划:挂载点的选择应该符合用户对文件系统布局的整体规划。例如,将存储系统备份文件的设备挂载到/backup目录,将存储多媒体文件的设备挂载到/media/multimedia目录等,这样可以方便用户对不同类型的数据进行管理。
  4. 挂载的操作过程(以命令行为例)

    • 基本挂载命令语法:在Ubuntu中,挂载命令通常是mount [选项] <设备名> <挂载点>。例如,要将/dev/sda1(一个硬盘分区)挂载到/mnt/data目录,可以使用命令mount /dev/sda1 /mnt/data
    • 常用挂载选项
      • -t:用于指定设备的文件系统类型。例如,mount -t ext4 /dev/sda1 /mnt/data表示将/dev/sda1分区(假设是ext4文件系统)挂载到/mnt/data目录。这个选项很重要,因为操作系统需要知道设备的文件系统类型才能正确地读取和写入数据。
      • -o:用于指定挂载选项,如ro(只读挂载)、rw(读写挂载)、user(允许普通用户挂载)等。例如,mount -o ro /dev/sda1 /mnt/data会将/dev/sda1以只读方式挂载到/mnt/data目录,这样用户就不能对挂载后的文件系统进行写入操作。
    • 自动挂载配置(/etc/fstab)
      • /etc/fstab是一个系统配置文件,用于定义在系统启动时自动挂载的文件系统。文件中的每一行代表一个挂载配置,格式通常为<设备名> <挂载点> <文件系统类型> <挂载选项> <备份选项> <检查顺序>。例如,/dev/sda1 /mnt/data ext4 defaults 0 0表示在系统启动时将/dev/sda1ext4文件系统)自动挂载到/mnt/data目录,采用默认的挂载选项,不进行备份(0),检查顺序为最后(0)。用户可以通过编辑这个文件来添加、修改或删除自动挂载的文件系统。
  5. 卸载(Unmount)操作

    • 定义和作用:卸载是挂载的逆操作,用于将已经挂载的文件系统从挂载点上分离,使得存储设备可以安全地移除(对于可移动设备)或者进行其他操作。例如,在拔出U盘之前,需要先卸载U盘对应的文件系统,以避免数据损坏。
    • 卸载命令语法:在Ubuntu中,卸载命令是umount [设备名或挂载点]。例如,要卸载之前挂载到/mnt/data的设备,可以使用umount /mnt/data或者umount /dev/sda1(如果知道设备名)。需要注意的是,在卸载操作时,不能有程序正在访问挂载点目录下的文件,否则卸载操作会失败。

例如图示Linux访问U盘数据

图1,还未挂载

image-20191203144528306

图2,挂载后

image-20191203144537469

挂载通常是将一个存储设备挂接到一个已经存在的目录上,访问这个目录就是访问该存储设备的内容。

对于Linux系统来说,一切皆文件,所有文件都放在以根目录为起点的树形目录结构中,任何硬件设备也都是文件形式

如图所示,是U盘存储设备和Linux系统自己的文件系统结构,此时Linux想要使用U盘的硬件设备,必须将Linux本身的目录和硬件设备的文件目录合二为一,此过程就称之为挂载

挂载点

挂载操作会隐藏原本Linux目录中的文件,因此选择Linux本身的目录,最好是新建空目录用于挂载

挂载之后,这个目录被称为挂载点。

挂载注意事项

1.一个目录、同一时间只能被一个设备挂载
2.一个设备可以挂载多个目录


3.如果一个目录被多个设备挂载,只能看到最后一个挂载的设备数据,其他的设备数据会被隐藏。

4.工作里建议用新的文件夹,作为挂载点。

mount命令

mount命令可以将指定的文件系统挂载到指定目录(挂载点),在Linux系统下必须先挂载后才能访问设备资料

  • 新的硬盘插到机器上,分区、格式化文件系统后,此时可以可以存放数据了
  • 此时的硬盘插到linux上,也只是读取出了一个封闭的盒子,无法读写
  • 和linux的文件夹进行关联、挂载后,即可通过访问被挂载的文件夹,访问到硬盘的数据

mount选项

参数 解释
-l 显示系统以挂载的设备信息
-a 加载文件/etc/fstab中设置的所有设备
-t t<文件系统类型> 指定设备的文件系统类型。如果不设置,mount自行选择挂载的文件类型 minix Linux最早使用的文件系统。 ext2 Linux目前的常用文件系统。 msdos MS-DOS 的 FAT。 vfat Win85/98 的 VFAT。 nfs 网络文件系统。 iso9660 CD-ROM光盘的标准文件系统。 ntfs Windows NT的文件系统。 hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。 auto 自动检测文件系统。
-o 添加挂载选项,是安全、性能优化重要参数
-r 只读,等于-o ro
-w 读写,等-o rw

mount -o选项详解

参数 含义
async 以异步方式处理文件系统I/O操作,数据不会同步写入磁盘,而是写到缓冲区,提高系统性能,但损失数据安全性
sync 所有I/O操作同步处理,数据同步写入磁盘,性能较弱,数据安全性高
atime/noatime 文件被访问时是否修改时间戳,不更改时间,可以提高磁盘I/O速度
auto/noauto 通过-a参数可以自动被挂载/不自动挂载
defaults 默认值包括rw、suid、dev、exec、auto、nouser、async,/etc/fstab大多默认值
exec/noexec 是否允许执行二进制程序,取消提供安全性
suid/nosuid 是否允许suid(特殊权限)生效
user/nouser 是否允许普通用户挂载
remount 重新挂载
ro 只读
rw 读写

mount挂载案例

image-20191203160548239

只读挂载

[root@lamp-241 ~]# mount -o ro /dev/sdb6 /mnt
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls /mnt
[root@lamp-241 ~]#
[root@lamp-241 ~]# touch /mnt/超哥牛逼.txt
touch: cannot touch ‘/mnt/超哥牛逼.txt’: Read-only file system
[root@lamp-241 ~]#

禁止可执行文件

[root@lamp-241 ~]# mount -o noexec /dev/sdb6 /mnt
[root@lamp-241 ~]#
[root@lamp-241 ~]# cd /mnt
[root@lamp-241 mnt]# echo 'echo "爱的供养"' > music.sh
[root@lamp-241 mnt]#
[root@lamp-241 mnt]# chmod 777 music.sh
[root@lamp-241 mnt]# ll
total 4
-rwxrwxrwx 1 root root 20 Mar  2 17:54 music.sh
[root@lamp-241 mnt]#
[root@lamp-241 mnt]# ./music.sh
-bash: ./music.sh: Permission denied
[root@lamp-241 mnt]#

重新挂载之后,默认是运行执行挂载目录的文件的。

[root@lamp-241 mnt]# cd ~
[root@lamp-241 ~]#
[root@lamp-241 ~]#
[root@lamp-241 ~]# umount /mnt
[root@lamp-241 ~]# mount /dev/sdb6  /mnt
[root@lamp-241 ~]#
[root@lamp-241 ~]# /mnt/music.sh
爱的供养

[root@lamp-241 ~]# mount -l |grep mnt
/dev/sdb6 on /mnt type xfs (rw,relatime,attr2,inode64,noquota)

参数解释
rw 读写
relatime   mount 选项 relatime(relative atime 的意思)。relatime 的意思是访问文件时,仅在 atime 早于文件的更改时间时对 atime 进行更新。

attr2   在磁盘上存储内联扩展属性,提升性能
inode64 允许在文件系统的任意位置创建 inode
noquota 强制关闭所有文件系统限额功能

关于umount的坑

你如果在挂载目录里呆着,是无法umount的。

umount用于取消已经挂载的设备

-f 强制卸载

正常卸载

当该设备无人使用时
无进程在使用时
可以正常卸载

[yuchao-linux01 root ~]$umount /my_sdb7/
[yuchao-linux01 root ~]$df -h|grep my_sdb7
[yuchao-linux01 root ~]$

该目录中有人在访问

重新挂载
[yuchao-linux01 root ~]$mount -a
[yuchao-linux01 root ~]$
再开一个终端,模拟有人在访问该目录

此时无法正常卸载
[yuchao-linux01 root ~]$umount /my_sdb7/
umount: /my_sdb7: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[yuchao-linux01 root ~]$


解决办法
1.让那人离开目录
2.干掉操作该目录的进程

使用lsof命令
[yuchao-linux01 root ~]$lsof /my_sdb7/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    47861 root  cwd    DIR   8,23        6   64 /my_sdb7
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$ps -ef|grep 47861
root      47861  47859  0 19:31 pts/4    00:00:00 -bash
root      47906  47758  0 19:33 pts/3    00:00:00 grep --color=auto 47861

强制让他滚蛋。。。

[yuchao-linux01 root ~]$ps -ef|grep 47861
root      47861  47859  0 19:31 pts/4    00:00:00 -bash
root      47908  47758  0 19:33 pts/3    00:00:00 grep --color=auto 47861
[yuchao-linux01 root ~]$kill -9 47861
[yuchao-linux01 root ~]$

此时可以正常卸载
[yuchao-linux01 root ~]$df -h |grep my_sdb7
/dev/sdb7                    2.0G   33M  2.0G   2% /my_sdb7
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$umount /my_sdb7/
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$df -h |grep my_sdb7
[yuchao-linux01 root ~]$

开机自动挂载fstab

什么是开机自动挂载?

刚才学的是手动挂载,mount,但是这个操作是临时生效,重启后丢失
如果你重启了服务器,又忘记了去挂载,必然会导致使用该挂载点的程序,全部故障


因此如果你要一直访问这个挂载点,访问该设备,你得设置开机自动挂载

这个功能是/etc/fstab文件

该文件的作用

/etc/fstab配置文件作用是,设置设备开机自动挂载,包括了根目录、以及boot启动分区都是在这里设置的

image-20220331191656445

fstab文件语法

image-20220331192051839

第四列、挂载参数详解

和上面于超老师写的 mount挂载参数一致,它俩一个意思。

第五列、是否备份,了解即可,一般是0

0 不备份
1 每天备份
2 每隔一天备份

第六列、是否检查分区,一般是0

0 不检查
1 先检查该设备
2 排第二检查

自动挂载磁盘分区

[yuchao-linux01 root ~]$blkid /dev/sdb7
/dev/sdb7: UUID="d83e18c9-8b3e-4f38-b25f-6e9818e00b55" TYPE="xfs"

[yuchao-linux01 root ~]$vim /etc/fstab

写入如下挂载信息

image-20220331192737279

让系统重新挂载所有设备

检查当前的挂载情况
[yuchao-linux01 root ~]$df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/centos-root       17G  8.9G  8.1G  53% /
devtmpfs                     3.8G     0  3.8G   0% /dev
tmpfs                        3.9G     0  3.9G   0% /dev/shm
tmpfs                        3.9G   28M  3.8G   1% /run
tmpfs                        3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1                   1014M  142M  873M  14% /boot
/dev/mapper/vg--qiaofu-lv01   50G  575M   50G   2% /qiaofu-data
tmpfs                        781M     0  781M   0% /run/user/0

挂载所有设备
[yuchao-linux01 root ~]$mount -a
[yuchao-linux01 root ~]$df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/centos-root       17G  8.9G  8.1G  53% /
devtmpfs                     3.8G     0  3.8G   0% /dev
tmpfs                        3.9G     0  3.9G   0% /dev/shm
tmpfs                        3.9G   28M  3.8G   1% /run
tmpfs                        3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1                   1014M  142M  873M  14% /boot
/dev/mapper/vg--qiaofu-lv01   50G  575M   50G   2% /qiaofu-data
tmpfs                        781M     0  781M   0% /run/user/0
/dev/sdb7                    2.0G   33M  2.0G   2% /my_sdb7
[yuchao-linux01 root ~]$

重启

重启,查看是否依然会自动挂载

reboot

磁盘管理常用命令

  • df
  • du
  • dd

dd命令

复制文件,且进行数据格式转换。

语法
dd - 转换和复制一个文件

dd if=输入 of=输出 bs=块大小 count=总数

常用
if=file
of=file
bs=size
count=N

命令实践

# 生成一个1G大小的文件
[root@yuchao-tx-server ~]# dd if=/dev/zero of=/opt/1G.txt2 bs=100M count=10
记录了10+0 的读入
记录了10+0 的写出
1048576000字节(1.0 GB)已复制,4.42348 秒,237 MB/秒

查看该文件大小
[root@yuchao-tx-server ~]# ll -h /opt/
总用量 2.0G
-rw-r--r-- 1 root root 1000M 3月  30 23:22 1G.txt
-rw-r--r-- 1 root root 1000M 3月  30 23:23 1G.txt2
drwxr-xr-x 3 root root  4.0K 3月  20 22:19 containerd

linux特殊设备文件

/dev/null
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。比较常见的用法是把不需要的输出重定向到这个文件。
ping yuchaoit.cn > /dev/null &


/dev/zero
零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。
dd if=/dev/zero of=test.log bs=1M count=50


/dev/random和/dev/urandom
dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。

危险玩法,比如实现类似于shred粉碎文件的作用
[root@yuchao-tx-server ~]# dd bs=1M count=30  if=/dev/urandom of=./t1

也可以销毁硬盘分区数据
dd if=/dev/urandom of=/dev/sda5

移动介质挂载

linux不像windows那样,设备插上,自动可以通过设备名,访问u盘或光盘的数据,得手动挂载后可访问。

光盘挂载

[yuchao-linux-242 root ~]#mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only

[yuchao-linux-242 root ~]#
[yuchao-linux-242 root ~]#df -h |grep mnt
/dev/sr0                 4.2G  4.2G     0 100% /mnt
[yuchao-linux-242 root ~]#

[yuchao-linux-242 root ~]#ll /mnt
total 678
-rw-rw-r-- 1 root root     14 May  2  2018 CentOS_BuildTag
drwxr-xr-x 3 root root   2048 May  4  2018 EFI
-rw-rw-r-- 1 root root    227 Aug 30  2017 EULA
-rw-rw-r-- 1 root root  18009 Dec 10  2015 GPL
drwxr-xr-x 3 root root   2048 May  4  2018 images
drwxr-xr-x 2 root root   2048 May  4  2018 isolinux
drwxr-xr-x 2 root root   2048 May  4  2018 LiveOS
drwxrwxr-x 2 root root 655360 May  4  2018 Packages
drwxrwxr-x 2 root root   4096 May  4  2018 repodata
-rw-rw-r-- 1 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 1 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root   2883 May  4  2018 TRANS.TBL

Eject弹出设备命令

eject # 弹出光驱

eject -r /dev/sr0 # 指定设备弹出

[yuchao-linux-242 root ~]#eject

U盘挂载

安装工具包
[yuchao-linux-242 root ~]#yum install usbutils -y

查看usb设备列表
[yuchao-linux-242 root ~]#lsusb

查看u盘信息
[yuchao-linux-242 root ~]#fdisk -l /dev/sdb

Disk /dev/sdb: 31.5 GB, 31457280000 bytes, 61440000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x3031b379

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        4096    61439999    30717952    7  HPFS/NTFS/exFAT
[yuchao-linux-242 root ~]#


linux不认识exfat格式,你得重新格式化为linux可识别的文件系统,方可读写数据
比如进行格式化为xfs类型,可以读写数据。


# 注意这个是个危险命令,删除分区,就立即删除了,数据也没了
[yuchao-linux-242 root ~]#parted /dev/sdb

(parted) rm 1
(parted) p
Model: Generic Flash Disk (scsi)
Disk /dev/sdb: 31.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags


u盘的分区没了

[yuchao-linux-242 root ~]#ls /dev/sdb*
/dev/sdb

重新格式化文件系统即可,比如格式化为xfs类型
[yuchao-linux-242 root ~]#mkfs.xfs  -f /dev/sdb

此时读写数据
[yuchao-linux-242 root ~]#mount /dev/sdb /my_usb/
[yuchao-linux-242 root ~]#
[yuchao-linux-242 root ~]#df -h|grep usb
/dev/sdb                  30G   33M   30G   1% /my_usb

[yuchao-linux-242 root ~]#touch /my_usb/超哥带你学linux
[yuchao-linux-242 root ~]#ls /my_usb/
超哥带你学linux

u盘格式化为ntfs类型

windows下可识别的ntfs类型

linux默认不支持格式化utfs,需要额外安装工具
[yuchao-linux-242 root ~]#yum install ntfsprogs -y

使用fdisk命令,给u盘设备分区
[yuchao-linux-242 root ~]#fdisk /dev/sdb

创建ntfs文件系统
[yuchao-linux-242 root ~]#mkfs.ntfs -f /dev/sdb1
Cluster size has been automatically set to 4096 bytes.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

查看该设备的类型
[yuchao-linux-242 root ~]#blkid /dev/sdb1
/dev/sdb1: UUID="66D7C3B76DD0CF56" TYPE="ntfs" PTTYPE="dos"

linux默认不识别ntfs,你可以拿到windows中试试可否读写该u盘。



也可以安装工具,读写ntfs的u盘
[yuchao-linux-242 root ~]#yum install ntfs-3g -y

[yuchao-linux-242 root ~]#ntfs-3g /dev/sdb1 /my_usb/
[yuchao-linux-242 root ~]#
[yuchao-linux-242 root ~]#df -h |grep usb
/dev/sdb1                 30G   66M   30G   1% /my_usb
[yuchao-linux-242 root ~]#lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda
├─sda1          xfs               c07b71e0-a0a4-41e5-9c12-24646b84c73f   /boot
└─sda2          LVM2_member       S2y7zo-9SQ9-prrr-ZOtT-NdW8-vVLo-jFwngl
  ├─centos-root xfs               0a7fed5a-edce-4354-aa17-2aa6781e1b85   /
  └─centos-swap swap              706d68e5-0a75-46d2-ab62-cede96863212   [SWAP]
sdb
└─sdb1          ntfs              66D7C3B76DD0CF56                       /my_usb
sr0
[yuchao-linux-242 root ~]#

可以正确读写数据
[yuchao-linux-242 root ~]#ls /my_usb/
[yuchao-linux-242 root ~]#touch /my_usb/超哥带你学linux.txt
[yuchao-linux-242 root ~]#ls /my_usb/
超哥带你学linux.txt
[yuchao-linux-242 root ~]#ls /my_usb/ -l
total 0
-rwxrwxrwx 1 root root 0 Mar 31 20:10 超哥带你学linux.txt
[yuchao-linux-242 root ~]#


取消挂载
[yuchao-linux-242 root ~]#umount /my_usb/

经过尝试,windows貌似不识别上述操作,u盘的文件系统有待研究为其他格式。

作业

1.完成于超老师所教磁盘管理的原理+实践。

2.自己给虚拟机添加两块硬盘(20G),都进行分区、格式化、挂载且使用。

Copyright © www.yuchaoit.cn 2025 all right reserved,powered by Gitbook作者:于超 2025-01-11 17:03:40

results matching ""

    No results matching ""