Linux笔记 No.17---(磁盘分区fdisk,gdisk,parted、格式化mkfs,mke2fs、挂载mount、卸载umount、df、du、lsof命令)

一、磁盘

磁盘(disk)是指利用磁记录技术存储数据的存储器。

磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

在 Linux 系统中,文件系统是创建在硬盘上的。

磁盘是计算机的主要外部存储设备。计算机中的存储设备种类非常多,常见的主要有光盘、硬盘、U 盘等,甚至还有网络存储设备 SAN、NAS 等,使用最多的还是硬盘。

从存储数据的介质上来区分,硬盘可分为机械硬盘(Hard Disk Drive, HDD)和固态硬盘(Solid State Disk, SSD)

(一)机械硬盘(HDD)

1.基本组成

在这里插入图片描述
磁盘主要由盘体,控制电路和接口部件组成,盘体就是一个密封,封装了多个盘片的腔体;控制电路包含硬盘
BIOS,主控芯片和硬盘缓存等单元;接口部件包含电源、数据接口主从跳线等。

硬盘的盘片一般采用合金材料,多数为铝合金(IBM曾经开发过玻璃材质的盘片但不多见),盘面上涂着磁性材
料,厚度一般在0.5mm左右。有些硬盘只装一张盘片,有些则有多张。
硬盘盘片安装在主轴电机的转轴上,在主轴电机的带动下作高速旋转。每张盘片的容量称为单碟容量,而一块硬
盘的总容量就是所有盘片容量的总和。早期硬盘由于单碟容量低,所以盘片较多。现代的硬盘盘片一般只有少数几
片。
盘片上的记录密度很大,而且盘片工作时会高速旋转,为保证其工作的稳定,数据保存的长久,所以硬片都是密
封在硬盘内部。不可自行拆卸硬盘,在普通环境下空气中的灰尘、指纹、头发丝等细小杂质都会对硬盘造成永久损
害。

数据就存放在磁盘盘片中。类似于留声机吗。留声机上使用的唱片磁盘盘片非常相似,不过留声机只有一个磁头,而硬盘是上下双磁头,盘片在两个磁头中间高速旋转。

在这里插入图片描述
机械硬盘是上下盘面同时进数据读取的。而且机械硬盘的旋转速度要远高于唱片(目前机械硬盘的常见转速是 7200 r/min),所以机械硬盘在读取或写入数据时,非常害怕晃动和磕碰。另外,因为机械硬盘的超高转速,如果内部有灰尘,则会造成磁头或盘片的损坏,所以机械硬盘内部是封闭的,如果不是在无尘环境下,则禁止拆开机械硬盘。

2.逻辑结构

机械硬盘的逻辑结构主要分为盘面、磁道、扇区、拄面、簇、磁头
在这里插入图片描述
盘面 platter
硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第1个盘片的正面称为0面,反面称为1面;第2个盘片的正面称为2面,反面称为3面…依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。

磁头 read-writer head
一张单面的盘片需要一个磁头,双面的盘片则需要两个磁头。硬盘采用高精度、轻型磁头驱动和定位系统。这种系统能使磁头在盘面上快速移动,读写硬盘时,磁头依靠磁盘的高速旋转引起的空气动力效应悬浮在盘面上,与盘面的距离不到1微米(约为头发直径的百分之一),可以在极短的时间内精确定位到计算机指令指定的磁道上。

磁道 track
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区(Landing Zone),这个着陆区以前是位于离盘心最近的区域,不存放任何数据。

扇区 sector
把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,每个扇区一般为512B或4K。也就是说即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部512字节读入内存,再选择所需的那个字节。

为了对扇区进行查找和管理,需要对扇区进行编号,扇区的编号从0磁道开始,起始扇区为1扇区,其后为2扇区、3扇区……,0磁道的扇区编号结束后,1磁道的起始扇区累计编号,直到最后一个磁道的最后一个扇区(n扇区)

Tips:扇区是最小的物理存储单位,有512bytes和4K两种格式,最小分区单位通常为扇区

交叉因子:在硬盘磁道中,扇区号是按照某个间隔跳跃着编排。比如,2号扇区并不是1号扇区后的按顺序的第一个而是第八个,3号扇区又是2号扇区后的按顺序的第八个,依此类推,这个“八”称为交叉因子。
数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,(要知道物理相邻扇区位置距离是极小的),必须等待转完一圈,这极大浪费了时间。所以就用交叉来解决这个问题。

柱面Cylinder
如果硬盘是由多个盘片组成的,每个盘面都被划分为数目相等的磁道,那么所有盘片都会从外向内进行磁道编号,最外侧的就是 0 磁道(依此往里为1磁道,2磁道,3磁道…)。具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面
在这里插入图片描述

硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面(即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面


将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇。
如查看一个文件的大小,显示:大小:15 字节 (15 字节), 占用空间:4.00 KB (4,096 字节)。这里的占用空间就是机器分区的簇大小,因为再小的文件都会占用空间,逻辑基本单位是4K,所以都会占用4K。

硬盘的容量=柱面数(磁道数) * 磁头数 * 单磁道扇区数 * 单个容量扇区大小(一般初始为512字节)

硬盘的接口
机械硬盘通过接口与计算机主板进行连接。硬盘的读取和写入速度与接口有很大关系。如果接口的性能很差,则会影响机械硬盘的性能。

目前,常见的机械硬盘接口有以下几种:
IDE 硬盘接口(Integrated Drive Eectronics,并口,即电子集成驱动器)也称作 “ATA硬盘” 或 “PATA硬盘”,是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s(此速度为理论平均值)
在这里插入图片描述

SATA 接口(Serial ATA,串口),是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(理论平均值)
在这里插入图片描述

SCSI 接口(Small Computer System Interface,小型计算机系统接口),广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU 占用率低及热插拔等优点,理论传输速度达到 320MB/s
在这里插入图片描述
磁盘的分类:

  • IDE磁盘:特点价格低廉,兼容性强,性价比高,数据传输慢,不支持热插拔等等。
  • SCSI磁盘:传输速率高,读写性能好,运行稳定,可连接多个设备。可支持热插拔,占用CPU低,但是价格相对来说比较贵,一般用于工作站或服务器上。
  • SATA磁盘:结构简单、支持热插拔
  • USB
    其中IDE的磁盘的文件名为          /dev/hd[a-d]
    而SCSI、SATA、USB的磁盘文件名为    /dev/sd[a-p]

(二)固态硬盘(SSD)

固态硬盘和传统的机械硬盘最大的区别就是不再采用盘片进行数据存储,而采用存储芯片进行数据存储。固态硬盘的存储芯片主要分为两种:一种是采用闪存作为存储介质的;另一种是采用DRAM作为存储介质的。目前使用较多的主要是采用闪存作为存储介质的固态硬盘
在这里插入图片描述
固态硬盘和机械硬盘对比主要有以下一些特点

性能参数 固态硬盘 机械硬盘
容量 较小
读/写速度 极快 一般
写入次数 5000~100000次 没有限制
工作噪声 极低 较高
工作温度 极低 较高
防震 很好
重量
价格

固态硬盘因为丟弃了机械硬盘的物理结构,所以相比机械硬盘具有了低能耗、无噪声、抗震动、低散热、体积小和速度快的优势;不过价格相比机械硬盘更高,而且使用寿命有限。

二、硬盘分区

(一)基本概念

硬盘分区是指将硬盘的整体存储空间划分成多个独立的区域,分别用来安装操作系统、安装应用程序以及存储数据文件等

但在分区之前,应该做一些准备及计划工作,包括一块硬盘要划分为几个分区,每个分区应该有多大的容量,以及每个分区准备使用什么文件系统等。对于某些操作系统而言,硬盘必须分区后才能使用,否则不能被识别。

通常,从文件存放和管理的方便、容易、快捷性出发,建议将硬盘划分多个分区,用以存放不同类型的文件,如存放操作系统、应用程序、数据文件等

只有将磁盘进行分区格式化之后,才能成为操作系统能够利用的文件系统格式(filesystem)传统的磁盘与文件系统的应用中,一个分区可以格式化成为了一个文件系统。

所以我们可以说一个filesystem就是一个partition,随着技术的革新,有了LVM,RAID之后,打破了这个一一对应的关系,现在我们在格式化的时候已经不再针对一个parition,而是我们称为一个可被挂载的数据块为一个文件系统。

硬盘分区表可以说是支持硬盘正常工作的骨架。操作系统正是通过它把硬盘划分为若干个分区,然后再在每个分区里面创建文件系统,写入数据文件。

为什么要分区:
(1)易于管理和使用;(2)有利于数据的安全;(3)节约寻找文件的时间;

目前磁盘分区主要有MBR以及GPT两种格式

1. MBR(MS-DOS 主引导记录区)方案

MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。

不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。

Tips:零磁道一旦受损,将使硬盘的主引导程序和分区表信息将遭到严重破坏,从而导致硬盘无法引导

在这里插入图片描述
主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性地重建数据结构信息后,才可能重新访问原先的数据。

主引导扇区内的信息可以通过任何一种基于某种操作系统的分区软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统

分区表由4项组成,每项16个字节(Byte).共4×16 = 64字节(Byte)。每项描述一个分区的基本信息。
在这里插入图片描述

字节 内容及含义
第1字节 引导标志,若值为80H表示活动分区,若值为00H表示非活动分区。
第2-4字节 分区的起始磁头号、扇区号、柱面号:磁头号-第2字节,扇区号-第三字节的低6位,柱面号-第三字节的高2位+第四字节
第5字节 分区类型
第6-8字节 分区的结束磁头号,扇区号,柱面号:磁头号-第2字节,扇区号-第三字节的低6位,柱面号-第三字节的高2位+第四字节
第9-12字节 逻辑起始扇区号 ,本分区之前已用了的扇区数
第13-16字节 本分区的总扇区数

MBR分区表上有四项,每一项表示一个分区,所以一个分区表最多只能表示4个分区。分区表上的4项用来表示主分区和扩展分区的信息。因为扩展分区最多只能有一个,所以硬盘最多可以有四个主分区或者三个主分区,一个扩展分区。余下的分区表是表示逻辑分区的。

这里有必要阐述一点:逻辑区都是位于扩展分区里面的,并且逻辑分区的个数没有限制。

硬盘的分区由主分区、扩展分区和逻辑分区组成:主分区(注意扩展分区也是一个主分区)的最大个数是四个,其
个数是由硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(如GRUB)和分区表记录。

扩展分区下又可以包含多个逻辑分区 — 所以主分区范围是从1-4,逻辑分区是从5开始的

sector1的结构如下图:其中P1、P2、P3、P4代表硬盘最多可以有4个分区,4个分区中最多有一个扩展分区,扩展分区可以在逻辑上分出更多的分区。分区表项结构描述了硬盘分区表项如何描述分区
在这里插入图片描述
有了分区表,便可以看看MBR方案是如何进行硬盘分区。把硬盘按柱面顺序展开,得到如下示意图。
在这里插入图片描述
假设硬盘有701个柱面,分区表位于第一个柱面的开始处,即第一个逻辑扇区处。分区表将硬盘分为四个分区P1,P2,P3,P4,其中P4位扩展分区,分为L1,L2,L3,L4四个逻辑分区,逻辑分区中分区信息位于每个逻辑分区开始处。逻辑分区的具体数量与操作系统有关。

MBR只支持不超过2T的硬盘。

2.GPT(GUID Partition Table)方案

这是另外一种分区,针对MBR分区,它有很多优点:

(1)几乎突破了分区个数的限制。

在GPT分区表中最多可以支持128个主分区。

(2)单个分区容量几乎没有限制。

单个分区最大支持1EB容量。

因此GPT分区中,主分区和扩展分区,逻辑分区的概念已经很模糊了。甚至没必要这么叫。其实扩展分区之所以存在,意义就是为了解决MBR中分区个数的限制问题。既然在GPT中,分区个数几乎没有了限制,那么这些概念就会模糊起来。

(二)lsblk命令

观察硬盘分区状态,以树形结构列出系统上的所有磁盘列表

用法: lsblk [选项] [device]

选项:

  • -d:仅列出磁盘本身,并不会列出该磁盘的分区数据
  • -f:同时列出该磁盘内的文件系统名称
  • -i:使用ASCII的字符输出,不要使用复杂的编码
  • m:同时输出该设备在/dev下面的权限信息(rwx数据)
  • p:列出该设备的完整文件名,而不是仅列出最后的名字而已
  • t:列出该磁盘设备的详细数据,包括磁盘阵列机制,预读写的数据量大小

【例 1】

[root@admin ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  286M  0 part /boot
└─sda2            8:2    0 99.7G  0 part 
  ├─centos-root 253:0    0 86.7G  0 lvm  /
  ├─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
  └─centos-home 253:2    0  9.3G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sr0              11:0    1 1024M  0 rom  

可以看出:有一个sda、一个sdb和一个sr0设备,而sda设备下又有三个分区,其中sda2甚至还有因为LVM而产生的文件系统。

输出信息:

内容 含义
NAME 设备的文件名,会省略/dev等前导目录
MAJ:MIN 主要设备与次要设备代码(内核通过该代码进行识别)
RM 是否为可卸载设备
SIZE 容量
RO 是否为只读设备
TYPE 是磁盘(disk)、分区(partition)、还是只读存储器(rom)等输出
MOUNTPOINT 挂载点

【例 2】
仅列出/dev/sda设备内的所有数据的完整文件名

[root@admin ~]# lsblk -ip /dev/sda
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda                      8:0    0  100G  0 disk 
|-/dev/sda1                   8:1    0  286M  0 part /boot
`-/dev/sda2                   8:2    0 99.7G  0 part 
  |-/dev/mapper/centos-root 253:0    0 86.7G  0 lvm  /
  |-/dev/mapper/centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
  `-/dev/mapper/centos-home 253:2    0  9.3G  0 lvm  /home

同时列出该磁盘内的文件系统与UUID数据信息

[root@admin ~]# lsblk -f /dev/sda
NAME            FSTYPE     	 LABEL 	UUID                                   MOUNTPOINT
sda                                                                      
├─sda1          xfs               	4dd7e68d-866e-45c4-90fa-a874f9860a3a   /boot
└─sda2          LVM2_member       	0BZ0Fj-Chto-UjJM-1C8c-sllG-LZgX-RchmZs 
  ├─centos-root xfs               	065251f3-2332-48af-8d1e-bd8f0ecbd94f   /
  ├─centos-swap swap             	b41af099-35bc-4719-8a86-83b7476c3735   [SWAP]
  └─centos-home xfs               	6de0d75d-afaf-4550-940f-41ec9ce3302c   /home

UUID是全局唯一标识符,Linux会将系统内所有的设备都赋予一个独一无二的标识符,同时也可以使用blkid命令进行查看

[root@admin ~]# blkid
/dev/sda1: UUID="4dd7e68d-866e-45c4-90fa-a874f9860a3a" TYPE="xfs" 
/dev/sda2: UUID="0BZ0Fj-Chto-UjJM-1C8c-sllG-LZgX-RchmZs" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="065251f3-2332-48af-8d1e-bd8f0ecbd94f" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="b41af099-35bc-4719-8a86-83b7476c3735" TYPE="swap" 
/dev/mapper/centos-home: UUID="6de0d75d-afaf-4550-940f-41ec9ce3302c" TYPE="xfs" 

如上所示,每一行代表一个文件系统,主要列出设备名称,UUID名称以及文件系统的类型(TYPE),不过无法查看磁盘的分区类型,可以使用parted命令查看:

用法:parted device_name print
[root@admin ~]# parted /dev/vda print
Model: VMware, VMware Virtual S (scsi) #磁盘的模块名称(厂商)
Disk /dev/sda: 107GB				   #磁盘的总容量
Sector size (logical/physical): 512B/512B	#磁盘的每个逻辑/物理扇区容量
Partition Table: msdos			#分区表的格式
Disk Flags: 

Number  Start   End    Size   Type     File system  标志   #以下为分区数据
 1      1049kB  301MB  300MB  primary  xfs          启动
 2      301MB   107GB  107GB  primary               lvm

通过输出可以看到,该磁盘的分区格式是使用的是msdos分区格式

(三)磁盘分区:fdisk/gdisk

MBR分区表建议使用fdisk分区,GPT分区建议使用gdisk分区,否则会导致分区失败。

其实这两个工具的软件非常类似,执行了该软件,可以根据该软件内部的操作说明来操作,只需知道方法即可。

1.gdisk

对大于2TB硬盘进行分区

用法: gdisk device

先使用lsblk查看需要进行分区的设备名称

[root@admin ~]# lsblk -dp
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda   8:0    0  100G  0 disk 
/dev/sdb   8:16   0   20G  0 disk 
/dev/sdc   8:32   0    3T  0 disk 
/dev/sr0  11:0    1 1024M  0 rom 

这里我们选取/dev/sdc 进行分区

[root@admin ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10

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

Creating new GPT entries.

Command (? for help):     <====这里是输入命令操作,可以输入问号(?)来查看命令帮助
Command (? for help): ?
b	back up GPT data to a file
c	change a partition's name
d	delete a partition		<--------删除一个分区
i	show detailed information on a partition
l	list known partition types
n	add a new partition			<-----增加一个分区
o	create a new empty GUID partition table (GPT)
p	print the partition table     <--------打印出分区表
q	quit without saving changes		<------不保存分区就直接离开gdisk
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit	<------保存分区操作后离开gdisk
x	extra functionality (experts only)
?	print this menu

Command (? for help): 

例如:新增分区
(1)01024GB的xfs文件系统(Linux)
(2)1024GB的vfat文件系统(Windows)

Command (? for help): n		
Partition number (1-128, default 1): 	#选择默认,直接回车即可
First sector (34-6442450910, default = 2048) or {
    
    +-}size{
    
    KMGTP}:  #该分区的起始扇区号码,回车即可,默认为上一个分区结束号码加1
Last sector (2048-6442450910, default = 6442450910) or {
    
    +-}size{
    
    KMGTP}: +1024G  #终止的扇区号码,我们不需要自己去计算扇区号码,可以通过+容量的方式就可以帮你计算出终止的扇区号
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			#使用p进行查看
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0562C5C2-F0B5-401A-967C-B77B362F2E3F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 4294967229 sectors (2.0 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      2147485695   1024.0 GiB  8300  Linux filesystem

继续添加第二个分区:

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-6442450910, default = 2147485696) or {
    
    +-}size{
    
    KMGTP}: 
Last sector (2147485696-6442450910, default = 6442450910) or {
    
    +-}size{
    
    KMGTP}: +1024G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L		#输入L查看需要的文件系统类型
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE          
3000 ONIE boot             3001 ONIE config           4100 PowerPC PReP boot   
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS            
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved   
8200 Linux swap            8300 Linux filesystem      8301 Linux reserved      
8302 Linux /home           8400 Intel Rapid Start     8e00 Linux LVM           
a500 FreeBSD disklabel     a501 FreeBSD boot          a502 FreeBSD swap        
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD Vinum/RAID  
a580 Midnight BSD data     a581 Midnight BSD boot     a582 Midnight BSD swap   
a583 Midnight BSD UFS      a584 Midnight BSD ZFS      a585 Midnight BSD Vinum  
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS          
a903 NetBSD LFS            a904 NetBSD concatenated   a905 NetBSD encrypted    
a906 NetBSD RAID           ab00 Apple boot            af00 Apple HFS/HFS+      
af01 Apple RAID            af02 Apple RAID offline    af03 Apple label         
af04 AppleTV recovery      af05 Apple Core Storage    be00 Solaris boot        
bf00 Solaris root          bf01 Solaris /usr & Mac Z  bf02 Solaris swap        
bf03 Solaris backup        bf04 Solaris /var          bf05 Solaris /home       
bf06 Solaris alternate se  bf07 Solaris Reserved 1    bf08 Solaris Reserved 2  
bf09 Solaris Reserved 3    bf0a Solaris Reserved 4    bf0b Solaris Reserved 5  
c001 HP-UX data            c002 HP-UX service         ea00 Freedesktop $BOOT   
eb00 Haiku BFS             ed00 Sony system partitio  ed01 Lenovo system partit
Press the <Enter> key to see more codes: 0700
ef00 EFI System            ef01 MBR partition scheme  ef02 BIOS boot partition 
fb00 VMWare VMFS           fb01 VMWare reserved       fc00 VMWare kcore crash p
fd00 Linux RAID            
Hex code or GUID (L to show codes, Enter = 8300): 0700  #输入对应的文件系统类型号
Changed type of partition to 'Microsoft basic data'

Command (? for help): p			#查看
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0562C5C2-F0B5-401A-967C-B77B362F2E3F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 2147483581 sectors (1024.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      2147485695   1024.0 GiB  8300  Linux filesystem
   2      2147485696      4294969343   1024.0 GiB  0700  Microsoft basic data

Command (? for help): 

使用 p 可以列出这块磁盘的分区表信息,输出信息为:

  • 第一行:磁盘容量:3.0T,共有6442450944个扇区
  • 第二行:每个扇区的容量为512B(现在的分区主要是以扇区为最小单位)
  • Number:分区编号,对于当前设备来说,1号指的是/dev/sdc1,2号便指的是/dev/sdc2……
  • Start(sector):每一个分区的开始扇区号码位置
  • End (sector):每一个分区的结束扇区号码位置,通过与Start之间可以计算出分区的总容量
  • Size:分区的容量
  • Code:分区的文件类型
  • Name:文件系统的名称

可以看到:还可以继续进行分区,因为最大扇区为6442450944,目前只是用到4294969343;分区的设计中,新分区通常会选用上一个分区的结束扇区号码数加1作为起始扇区号码

注意:gdisk只有root才能执行;使用的设备文不能加上数字,因为磁盘分区是针对整个磁盘设备而不是某个分区

确认分区信息无误后输入 w 进行保存并退出:

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/sdc.

The operation has completed successfully.

#输入w 写入保存后,gdisk会先警告你可能出现的问题,我们确认信息无误后,便可以输入y

使用 lsblk查看分区后的情况

[root@admin ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  286M  0 part /boot
└─sda2            8:2    0 99.7G  0 part 
  ├─centos-root 253:0    0 86.7G  0 lvm  /
  ├─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
  └─centos-home 253:2    0  9.3G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sdc               8:32   0    3T  0 disk 
├─sdc1            8:33   0    1T  0 part 
└─sdc2            8:34   0    1T  0 part 
sr0              11:0    1 1024M  0 rom  

可以看到,sdc1和sdc2,说明添加分区成功

删除一个分区:

[root@admin ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10

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

Found valid GPT with protective MBR; using GPT.

Command (? for help): d
Partition number (1-2): 2		#删除刚才创建的第二个分区

Command (? for help): p			#查看是否删除成功
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0562C5C2-F0B5-401A-967C-B77B362F2E3F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 4294967229 sectors (2.0 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      2147485695   1024.0 GiB  8300  Linux filesystem
Command (? for help): w   #没问题就写入保存并退出

查看:

[root@admin ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  286M  0 part /boot
└─sda2            8:2    0 99.7G  0 part 
  ├─centos-root 253:0    0 86.7G  0 lvm  /
  ├─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
  └─centos-home 253:2    0  9.3G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sdc               8:32   0    3T  0 disk 
└─sdc1            8:33   0    1T  0 part 
sr0              11:0    1 1024M  0 rom  

可以看到sdc已经被删除

注意:不要去处理一个正在使用中的分区

2.fdisk

该命令主要针对MBR分区表。虽然MBR分区表在未来可能会被淘汰,因为现在得磁盘容量基本都是大于2TB,fdisk命令不支持大于 2TB 的分区,目前还无法完整支持GPT,不过还是有小磁盘存在的空间,这时处理MBR分区表就得使用fdisk

用法:
fdisk [选项] <磁盘> 更改分区表
fdisk [选项] -l <磁盘> 列出分区表
fdisk -s <分区> 给出分区大小(块数)

选项:

  • -b <大小> :扇区大小(512、1024、2048或4096)
  • -c[=<模式>] :兼容模式:“dos”或“nondos”(默认)
  • -u[=<单位>] :显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
  • -C <数字> :指定柱面数
  • -H <数字> :指定磁头数
  • -S <数字>:指定每个磁道的扇区数

【例 】

[root@admin ~]# fdisk -l

磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0002d275

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      587775      292864   83  Linux
/dev/sda2          587776   209715199   104563712   8e  Linux LVM

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdc:3298.5 GB, 3298534883328 字节,6442450944 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 0562C5C2-F0B5-401A-967C-B77B362F2E3F


#         Start          End    Size  Type            Name
 1         2048   2147485695      1T  Linux filesyste Linux filesystem

磁盘 /dev/mapper/centos-root:93.1 GB, 93063217152 字节,181764096 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:4001 MB, 4001366016 字节,7815168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-home:9999 MB, 9999220736 字节,19529728 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

使用fdisk进行分区:

因为fdisk和gdisk使用的方式几乎一样,只是一个使用问号(?)作为命令提示信息,一个使用字母m显示提示而已。此外,fdisk有时会使用柱面(cylinder)作为分区的最小单位,与gdisk默认使用扇区不太一样

在 fdisk 交互界面中输入 m 可以得到帮助,帮助里列出了 fdisk 可以识别的交互命令

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

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

Device does not contain a recognized partition table
使用磁盘标识符 0x19264bec 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m			<-------输入m后,就会输出命令帮助信息
命令操作
   a   toggle a bootable flag		<-----设置可引导标记
   b   edit bsd disklabel			<-----编辑 bsd 磁盘标签
   c   toggle the dos compatibility flag
   d   delete a partition		<------删除一个磁盘分区
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types	<-----显示已知的文件系统类型
   m   print this menu	<-----显示帮助菜单
   n   add a new partition		<------新增一个磁盘分区
   o   create a new empty DOS partition table
   p   print the partition table		<-------在屏幕上显示分区表
   q   quit without saving changes		<------不保存离开fdisk程序
   s   create a new empty Sun disklabel	<-----新建空白 SUN 磁盘标签
   t   change a partition's system id	<-----改变一个分区的系统 ID
   u   change display/entry units	<-----改变显示记录单位
   v   verify the partition table	<-----验证分区表
   w   write table to disk and exit		<-------将刚刚的操作写入分区表
   x   extra functionality (experts only)	<-----附加功能(仅专家)

命令(输入 m 获取帮助)

在/dev/sdc磁盘中新增一个2G且文件系统是Linux LVM的主分区

[root@admin ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  286M  0 part /boot
└─sda2            8:2    0 99.7G  0 part 
  ├─centos-root 253:0    0 86.7G  0 lvm  /
  ├─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
  └─centos-home 253:2    0  9.3G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sdc               8:32   0    3T  0 disk 
└─sdc1            8:33   0    1T  0 part 
sr0              11:0    1 1024M  0 rom  
#开始创建分区
[root@admin ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

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


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

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):L

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

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

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   8e  Linux LVM

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

Calling ioctl() to re-read partition table.
正在同步磁盘。
#查看是否成功
[root@admin ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  286M  0 part /boot
└─sda2            8:2    0 99.7G  0 part 
  ├─centos-root 253:0    0 86.7G  0 lvm  /
  ├─centos-swap 253:1    0  3.7G  0 lvm  [SWAP]
  └─centos-home 253:2    0  9.3G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0    2G  0 part 
sdc               8:32   0    3T  0 disk 
└─sdc1            8:33   0    1T  0 part 
sr0              11:0    1 1024M  0 rom 

删除分区为在 fdisk交互界面输入 d,进行删除和使用gdisk一样,这里不赘述

3.parted分区

”parted”,这个工具既可以做MBR分区,又可以做GPT分区,当然还是主要用它来做GPT分区

Parted是一个比fdisk更高级的工具,它支持多种分区表格式,包括MS-DOS和GPT。

它允许用户创建,删除,调整大小,缩小,移动和复制分区,重新组织磁盘使用,以及将数据复制到新硬盘,但在缩小分区时有风险,不建议。

它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。

parted的操作是即刻生效的,无需像fdisk和gdisk需要最后输入 w 保存使之生效

Parted 命令分为两种模式:命令行模式和交互模式

1、命令行模式:
用法: parted [option] device [command]

该模式可以直接在命令行下对磁盘进行分区操作,比较适合编程应用。

选项:

  • -h:显示此求助信息

  • -l:列出系统系统中所有的磁盘设备,和fdisk -l命令的作用差不多。

  • -m:进入交互模式,如果后面不加设备则对第一个磁盘进行操作

  • -s:脚本模式

  • -v:显示版本

    2、交互模式:parted [option] device 类似于使用 fdisk /dev/xxx

parted交互模式分区管理

与fdisk和gdisk类似,parted可以使用命令“parted 设备名”进入交互模式。进入交互模式后,可以通过parted的各种指令对磁盘分区进行管理。

[root@admin ~]# parted /dev/sdc                                                                  
(parted) help	 <--parted 的等待输入交互命令的位置,输入 help,可以看到在交互模式下支持的所有命令                 
  help [COMMAND]                       		#打印通用求助信息,或关于 COMMAND 的信息 
  mklabel,mktable LABEL-TYPE               #创建新的磁盘标签 (分区表
  mkpart PART-TYPE [FS-TYPE] START END     #创建一个带有文件系统的分区 
  name NUMBER NAME                         #将编号为 NUMBER 的分区命名为“名称” 
  print [devices|free|list,all|NUMBER]     #打印分区表,或者分区
  quit                                     #退出程序
  rescue START END                         #挽救临近“起始点”、“终止点”的遗失的分区 
  resizepart NUMBER END                    #改变位于编号为 MINOR 的分区中文件系统的大小
  rm NUMBER                                #删除编号为 NUMBER 的分区 
  select DEVICE                             #选择要编辑的设备 
  set NUMBER FLAG STATE                    #改变编号为 NUMBER 的分区的标志
  unit UNIT                             	 #设置单位
  version                                  #版本

【例 1】新建GPT分区

[root@admin ~]# parted /dev/sdc			#对磁盘/dev/sdc进行分区
GNU Parted 3.1		
使用 /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) 				  #如果忘记有哪些可用的命令,可以按两次Tab键可以显示所以可用的指令,也支持Tab命令补齐,和上下查找历史记
align-check  disk_toggle  mklabel      mktable      print        rescue       resizepart   select       toggle       version      
disk_set     help         mkpart       name         quit         resize       rm           set          unit         
(parted) help mklabel      #查看mklable命令的用法及支持的分区表
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
				#支持的分区类型
	“标签类型”是以下任意一项:aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop
(parted) mklabel gpt                 #创建gpt分区表,如果已存在分区表也可以通过这里命令更改                                      
警告: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?	# 警告用户磁盘上的数据将会被销毁,询问是否继续,我们这里是新的磁盘,输入yes后回车
是/Yes/否/No? yes 
(parted) p        #查看分区表的信息                                                        
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt	 #分区表以是gpt格式
Disk Flags: 

Number  Start  End  Size  File system  Name  标志

(parted) mkpart          #输入mkpart新建分区,如果输入mkpart指令不带任何参数,parted会一步步提示用户输入相关信息最终完成创建                                                 
分区名称?  []? p1           #分区的名字,这里可以直接回车不给分区命名,也可以输入用来标记的名字                                             
文件系统类型?  [ext2]?          #分区被格式化的文件系统,可以按两次Tab键查看支持的文件系统                                         
affs0            affs5            amufs1           apfs1            ext3             hfs+             linux-swap(new)  ntfs
affs1            affs6            amufs2           apfs2            ext4             hfsx             linux-swap(old)  reiserfs
affs2            affs7            amufs3           asfs             fat16            hp-ufs           linux-swap(v0)   sun-ufs
affs3            amufs            amufs4           btrfs            fat32            jfs              linux-swap(v1)   swsusp
affs4            amufs0           amufs5           ext2             hfs              linux-swap       nilfs2           xfs
文件系统类型?  [ext2]? xfs	 #输入被格式化的文件系统为xfs,这里必须要输入文件系统
起始点? 0%         #开始位置                                                      
结束点? 1024G               #结束位置,在数字后面加上单位                                             
(parted) mkpart p2 ext2 1024G 1524G		 #如果想一步就把分区创建好就可以这样,p2表示分区名,这样分区这里必须有,后面3项目分别是文件系统,开始位置,结束位置
(parted) mkpart p3 ext3 1524G 100%		 #如果不想创建文件系统这里可以不加这个选项,后面两项分别是开始位置,和结束位置,100%表示使用全部剩余空间
(parted) p        #输入p查看分区情况,也可以使用print。如果指令是唯一的直接输入指令的首字母也可以                                                        
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB		 #磁盘的总容量
Sector size (logical/physical): 512B/512B			#扇区的大小
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  标志
 1      1049kB  1024GB  1024GB  xfs          p1		#通过一步步创建的第一个分区
 2      1024GB  1524GB  500GB                p2		#通过一步就创建的分区
 3      1524GB  3299GB  1775GB               p3		#创建不带文件系统的分区

(parted)   

如果Start位置输入的不是0%或1M或0G的数值,分区结束会有这个的提示,Warning: The resulting partition is not properly aligned for best performance.Ignore/Cancel? (意思是说警告:生成的分区没有正确对齐以获得最佳性能。忽略/取消? 我们可以输入Ignore以忽略,但是不建议这样)
这是因为在512B扇区的磁盘驱动器上,Parted希望分区从2048的倍数(即1 MiB对齐)扇区开始。

#非交互式创建GPT分区表:
[root@admin ~]#parted /dev/sdc mklabel gpt

【例 2】设置默认的单位

(parted) unit		 #输入unit更改默认单位,如果不知道支持那些单位直接回车
Unit?  [compact]? 	 #按两次Tab键,列出支持的单位,在parted交互模式下不知道怎么输入就先按两次Tab键
%        chs      cyl      GiB      kiB      MiB      TB
B        compact  GB       kB       MB       s        TiB
Unit?  [compact]? GB		#输入更改后的默认单位
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
#默认单位均改为GB
Number  Start   End     Size    File system  Name  标志
 1      0.00GB  1024GB  1024GB  xfs          p1
 2      1024GB  1524GB  500GB                p2
 3      1524GB  3299GB  1775GB               p3

非交互式创建分区:

#非交互式创建5G容量的分区p1为分区名必须添加,这里不能直接添加文件系统类型,后面是起始和结束位置
[root@admin ~]#	parted /dev/sdc mkpart p1 0G 5G
 #通过命令直接查看分区信息,print改称p也可以
[root@admin ~]# parted /dev/sdc print  

【例 3】更改分区名

(parted) name		#输入name指令更改分区名,输入后回车
分区编号? 1			#输入要更改名的分区号
分区名称?  [p1]? part1		#输入新的名字
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   标志
 1      0.00GB  1024GB  1024GB  xfs          part1		#已更改
 2      1024GB  1524GB  500GB                p2
 3      1524GB  3299GB  1775GB               p3

非交互式更改分区名:

[root@admin ~]# parted /dev/sdc name 3 p3  #更改分区3的分区名为p3

【例 4】配置分区的标记
parted的分区标记相当于fdisk gdisk里面的分区类型

(parted) set		#输入set更改分区标记,输入后回车
分区编号? 3			#更改标记的分区
Flag to Invert? 	#输入更改标记的类型,按二次Tab键查看支持的类型
atvrecv      diag         legacy_boot  prep         隐藏分区
bios_grub    hidden       lvm          raid         
boot         hp-service   msftres      启动         
Flag to Invert? lvm		 #标记为lvm类型
新状态?  []/on/关/off? on		#输入on回车表示打开	
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   标志
 1      0.00GB  1024GB  1024GB  xfs          part1
 2      1024GB  1524GB  500GB                p2
 3      1524GB  3299GB  1775GB               p3     lvm		  #分区的标记已经生效


(parted) set		  #取消标记操作
分区编号? 3
Flag to Invert? lvm
新状态?  开/on/[]/off? off		#添加标记和取消标记的主要区别就在这里,这里要输入off来关闭标记
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   标志
 1      0.00GB  1024GB  1024GB  xfs          part1
 2      1024GB  1524GB  500GB                p2
 3      1524GB  3299GB  1775GB               p3		#分区的标记已经取消

非交互式配置分区标记:

[root@admin ~]# parted /dev/sdc set 3 lvm            #为分区3添加lvm标记
New state? [on]/off? on  
[root@admin ~]# parted /dev/sdc set 3 lvm            #取消分区3的lvm标记
New state? on/[off]? off                      #添加标记和取消标记的主要区别就在这里,这里要输入off来关闭标记

【例 5】删除分区

(parted) rm		 #输入删除指令rm直接回车,如果后面加上分区号在回车就可以直接删除分区
分区编号? 3		 #输入要删除的分区,这里操作一定要慎重,一旦回车便生效
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   标志
 1      0.00GB  1024GB  1024GB  xfs          part1
 2      1024GB  1524GB  500GB                p2
 #成功删除了分区3

非交互式删除分区:

[root@admin ~]# parted /dev/sdc rm 3            #删除分区3

也可以使用parted对MBR类型进行分区,大多数情况下对MBR的分区推荐用fdisk来进行操作

#更改分区表

(parted) mklabel msdos		#将现有的GPT分区更改成MBR分区,新磁盘也是通过这个指令来创建MBR分区
警告: The existing disk label on /dev/sdc 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/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End  Size  Type  File system  标志

#新建MBR分区

(parted) mkpart
分区类型?  primary/主分区/extended/扩展分区? p
文件系统类型?  [ext2]? 
起始点? 0%
结束点? 2G
(parted) mkpart primary 2G 1024G
(parted) mkpart primary 1024G 3096G                                                                                                                               (parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3299GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  标志
 1      0.00GB  2.00GB  2.00GB  primary  
 2      2.00GB  1024GB  1022GB  primary
 3      1024GB  3096GB  2072GB  primary

三、格式化

分区完成后,如果不格式化写入文件系统,则是不能正常使用的。这时就需要对硬盘分区进行格式化

(一)mkfs命令格式化

Linux下的文件类型有ext2、ext3、ext4、xfs等等,我们可以使用命令:mkfs.然后用连按两次TAB键来查看都有哪些文件类型。

[root@admin ~]# mkfs.
mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.xfs     
mkfs.cramfs  mkfs.ext3    mkfs.minix  

对于MBR分区而言:扩展分区不能格式化,主分区和逻辑分区可以格式化;对于GPT则不存在,因为没有扩展分区而言了

[root@admin ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     6293503     2097152   83  Linux
/dev/sdb3         6293504    14682111     4194304   83  Linux
/dev/sdb4        14682112    41943039    13630464    5  Extended
/dev/sdb5        14684160    23072767     4194304   83  Linux
/dev/sdb6        23074816    41943039     9434112   83  Linux

对/dev/sdb进行MBR分区后,共有6个分区。1,2,3为主分区,4为扩展分区,5,6为逻辑分区
【例 1】
将/dev/sdb1进行格式化, 文件类型为ext3

[root@admin ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
#查看是否格式化成功
[root@admin ~]# blkid /dev/sdb1
/dev/sdb1: UUID="8916afac-bf20-477f-b369-f51332856c28" SEC_TYPE="ext2" TYPE="ext3" 

当done(完成)出现后,意味着格式化已经进行完毕。

【例 2】
mkfs.ext4 /dev/sd1 等价于mkfs -t ext4 /dev/sd1

[root@admin ~]# mkfs -t ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1073741824
32 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

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

[root@admin ~]# blkid /dev/sdb5
/dev/sdb5: UUID="b49d1797-6114-4f5c-a888-f7ca7c6d5c5a" TYPE="ext4" 

【例 3】
如果将sdb1分区使用mkfs格式化为xfs类型,那么便不能再将sdb1格式化ext系列其它类型;但是,如果sdb1格式化ext系列类型时,可以二次将 sdb1格式化为xfs类型;ext系列之间可以互相格式化

[root@admin ~]# blkid /dev/sdb2
/dev/sdb2: UUID="43d1b6dd-b323-44e6-8d9d-8fcc01677212" TYPE="ext4" 
[root@admin ~]# mkfs.ext3 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
[root@admin ~]# mkfs.xfs -f /dev/sdb2
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@admin ~]# blkid /dev/sdb2
/dev/sdb2: UUID="083857e1-bc44-47c2-937e-0718a7955271" TYPE="xfs" 
[root@admin ~]# mkfs.ext4 -f /dev/sdb2   #当xfs转为其他ext系列就不行
mkfs.ext4:无效选项 -- f
Usage: mkfs.ext4 [-c|-l filename] [-b block-size] [-C cluster-size]
	[-i bytes-per-inode] [-I inode-size] [-J journal-options]
	[-G flex-group-size] [-N number-of-inodes]

虽然 mkfs 命令非常简单易用,但其不能调整分区的默认参数(比如块大小是 4096 Bytes),这些默认参数除非特殊清况,否则不需要调整。如果想要调整,就需要使用 mke2fs 命令重新格式化

(二)mke2fs命令格式化

用法: mke2fs [选项] 分区设备文件名
注意:此命令不适用于xfs文件类型

选项:

  • -t 文件系统:指定格式化成哪个文件系统, 如 ext2、ext3、ext4;
  • -b 字节:指定 block 的大小;
  • -i 字节:指定"字节 inode "的比例,也就是多少字节分配一个 inode
  • -j :建立带有 ext3 日志功能的文件系统
  • -L 卷标名:给文件系统设置卷标名,就不使用 e2label 命令设定了

【例 1】
将/dev/sdb2格式化为ext4文件类型,

[root@admin ~]# mke2fs -t ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

[root@admin ~]# blkid /dev/sdb2
/dev/sdb2: UUID="43d1b6dd-b323-44e6-8d9d-8fcc01677212" TYPE="ext4" 

【例 2】
将/dev/sdb2格式化为ext3类型,指定block大小为2048Bytes,设置卷标名为juanbiao,指定4096字节分配一个inode

[root@admin ~]# mke2fs -t ext3 -b 2048 -L juanbiao -i 4096 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=juanbiao
OS type: Linux
块大小=2048 (log=1)
分块大小=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=537919488
64 block groups
16384 blocks per group, 16384 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

[root@admin ~]# blkid -ip /dev/sdb2
DEVNAME=/dev/sdb2
LABEL=juanbiao
UUID=9ad7d089-347b-409b-8972-79a427a00b88
SEC_TYPE=ext2
VERSION=1.0
TYPE=ext3
USAGE=filesystem
MINIMUM_IO_SIZE=512
PHYSICAL_SECTOR_SIZE=512
LOGICAL_SECTOR_SIZE=512
PART_ENTRY_SCHEME=dos
PART_ENTRY_TYPE=0x83
PART_ENTRY_NUMBER=2
PART_ENTRY_OFFSET=2099200
PART_ENTRY_SIZE=4194304
PART_ENTRY_DISK=8:16

(三)文件系统的管理工具

ext系列

  • e2label命令:卷标的查看与设定
    查看:e2label device
    设定:e2label device LABEL

  • tune2fs命令:查看或修改ext系列文件系统的某些属性
    tune2fs [OPTIONS] device
    -l:查看超级块的内容
    -j:ext2 --> ext3;
    -L LABEL:修改卷标;
    -m #:调整预留空间百分比;

  • dumpe2fs命令:显示ext系列文件系统的属性信息
    dumpe2fs [-h] device

  • resize2fs [选项] device [size]
    调整ext2\ext3\ext4文件系统的大小
    选项:
    -d debug-flags: 打开resize2fs调试特性
    -f:强制执行
    -F:执行之前刷新文件系统缓冲区
    -M:将文件系统缩小到最小值
    -p:显示已完成任务的百分比
    -P:显示文件系统的最小值

  • e2fsck:磁盘修复 检查时先卸载
    选项:
    -a: 检查 partition,如发现问题会自动修复。
    -b: 设定 superblock 位置。 www.2cto.com
    -B size: 指定 size 作为区块大小。
    -c: 检查 partition 是否有坏轨。
    -C file: 将检查结果储存到 file。
    -d: 输出 e2fsck debug 结果。
    -f: e2fsck 预设只会对错误的文件系统检查,加上 -f 是强制检查。
    -F: 在检查前将硬盘的 buffer cache 清空,避免发生错误。
    -l list: 记录了坏轨区块加入 list 中。
    -d : 打印 e2fsck 的 debug 结果。
    -f : 强制检查。
    -n: 以 (read-only) 开启档案系统
    -p: 关闭互动模式,如有问题自动修复,等同 -a。
    -v: 显示详细报告。
    -y: 启用使用者互动模式。

  • fsck:检查与修复文件系统,可以同时检查一个或者多个
    fsck [-sACVRP] [-t fstype] [–] [fsck-options] filesys […]
    选项:
    filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
    -t : 给定文件系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
    -s : 依序一个一个地执行 fsck 的指令来检查
    -A : 对/etc/fstab 中所有列出来的 partition 做检查
    -C : 显示完整的检查进度
    -d : 列印 e2fsck 的 debug 结果
    -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
    -R : 同时有 -A 条件时,省略 / 不检查
    -V : 详细显示模式
    -a : 如果检查有错则自动修复
    -r : 如果检查有错则由使用者回答是否修复

xfs系列

xfs_repair处理XFS文件系统,当有xfs文件系统错乱才需要使用这个命令

[root@admin ~]# xfs_repair [-fnd] 设备名称
选项与参数:
-f:后面的设备其实是个文件而不是实体设备
-n:单纯检查并不修改文件系统的任何数据
-d:通常用在单人维护模式下面,针对目录(/)进行检查与修复的操作,很危险,不能随便使用

例如:检查/dev/sdb1文件系统
[root@admin ~]# blkid /dev/sdb1
/dev/sdb1: UUID="f7882b80-e080-4500-949d-fe7fad9f3166" TYPE="xfs" 
[root@admin ~]# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

提示:由于xfs_repair与fsck.ext4 在扫描磁盘的时候,可能会造成部分文件系统的改变,所以执行xfs_repair与fsck.ext4 时,被检查的硬盘分区务必不可挂载到系统上,亦即是需要在卸载状态

四、文件系统的挂载与卸载

磁盘分区和格式化完成后,磁盘分区要想能够使用,就需要挂载,在挂载某个分区前需要先建立一个挂载点

挂载: 将新的文件系统关联至当前文件系统

卸载: 将某文件系统与当前文件系统的关联关系移除;卸载时设备没有进程在使用

挂载点: 作为要挂载文件系统的访问入口;挂载点事先必须存在;不会被进程使用到的目录;挂载点下原有文件 将会被临时隐藏

tips:我们可以对挂载的含义进行引申,挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。文件系统要想能够被访问,都必须通过“关联”至文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”

(一)各硬件设备在Linux中的文件名

设备 在Linux中的文件名
SCSI、SATA、USB磁盘驱动器 /dev/sd/[a-p]
U盘 /dev/sd[a-p] (与SATA相同)
CD-ROM、DVD-ROM /dev/scd[0-1]、/dev/sr[0-1]、/dev/cdroom(当前CD-ROM)
Virto接口 /dev/vd[a-p](用于虚拟机内)
软盘驱动器 /dev/fd[0-7]
IDE磁盘驱动器 /dev/hd[a-d](旧式系统)
磁带机 /dev/ht0(IDE接口)、/dev/st0(SATA/SCSI接口)、/dev/tape(当前磁带)
打印机 /dev/lp[0-2](25针打印机)、/dev/usb/lp[0-15](USB接口)
鼠标 /dev/input/mouse[0-15]、/dev/psaux(PS/2接口)、/dev/mouse(当前鼠标)

(二)挂载mount

挂载之前,要清楚:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上都应该是空目录才行

要将文件系统挂载到Linux系统上,就要使用mount命令

用法:
mount [-lhV]
mount -a [选项]
mount [选项] [–source] <源> | [–target] <目录>
mount [选项] <源> <目录>
mount <操作> <挂载点> [<目标>]

选项:

  • -a:自动检查 /etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。
    /etc/fstab 文件,此文件是自动挂载文件,系统开机时会主动读取 /etc/fstab 这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。
  • -l:单纯的输入mount命令会显示目前挂载的信息,加上-l可增列Label名称
  • -t:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;常见的Linux支持类型有:xfs、ext3、ext4、vfat、iso9660(光盘格式)、nfs、cifs、smbfs
  • -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性
  • -o:后面可以接一些挂载时额外加上的参数。比如:权限,密码等
    sync/async:同步/异步操作;默认为async
    atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
    diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
    remount:重新挂载;
    facl:支持使用facl功能;
    ro:只读
    rw:读写
    dev/nodev:此设备上是否允许创建设备文件;
    exec/noexec:是否允许运行此设备上的程序文件;
    auto/noauto:是否允许此文件系统被以mount -a 自动挂载
    user/nouser:是否允许普通用户挂载此文件系统,一般情况下,mount仅有root可以使用
    suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
    defaults:默认值为:rw、suid、dev、exec、auto、nouser、async 、and relatime
  • -r:readonly,只读挂载;
  • -w:read and write, 读写挂载;
  • -L LABEL:挂载时以卷标的方式指明设备;
  • -U UUID:挂载时以UUID的方式指明设备;
  • –bind 源目录 目标目录:可以实现将目录绑定至另一个目录上,作为其临时访问入口;

【例 1】
查看当前系统所有已挂载的设备:

[root@admin ~]# mount
[root@admin ~]# cat /etc/mtab
[root@admin ~]# cat /proc/mounts

【例 2】
进行挂载

首先通过lsblk命令查看哪些文件系统未被挂载

[root@admin ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  20G  0 disk 
├─sdb1   8:17   0   1G  0 part 
├─sdb2   8:18   0   2G  0 part 
├─sdb3   8:19   0   4G  0 part 
├─sdb4   8:20   0   1K  0 part 
├─sdb5   8:21   0   4G  0 part 
└─sdb6   8:22   0   9G  0 part

可以看到/dev/sdb下的所有分区都没有被挂载

通过设备名进行挂载:将/dev/sdb1挂载到/data目录下

[root@admin ~]# mount /dev/sdb1 /data
[root@admin ~]# lsblk /dev/sdb1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb1   8:17   0   1G  0 part /data
[root@admin ~]# blkid  /dev/sdb1
/dev/sdb1: UUID="f7882b80-e080-4500-949d-fe7fad9f3166" TYPE="xfs"
[root@admin ~]# df /data
文件系统         1K-块  已用    可用 已用% 挂载点
/dev/sdb1      1038336 32992 1005344    4% /data

可以看到,我们甚至不需要使用 -t xfs 命令指定文件系统,因为系统可以自动检测(下同)

通过UUID方式挂载

[root@admin ~]# blkid /dev/sdb2
/dev/sdb2: LABEL="juanbiao" UUID="9ad7d089-347b-409b-8972-79a427a00b88" SEC_TYPE="ext2" TYPE="ext3" 
[root@admin ~]# mount -U 9ad7d089-347b-409b-8972-79a427a00b88 /data1
[root@admin ~]# lsblk /dev/sdb2
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb2   8:18   0   2G  0 part /data1

通过卷标名进行挂载

#修改设备/dev/sdb3的卷标名为juan3
[root@admin ~]# blkid /dev/sdb3
/dev/sdb3: UUID="77c770b2-e166-41cd-aa5f-8eb4481d84af" TYPE="ext4" 
[root@admin ~]# e2label /dev/sdb3 juan3  #e2label命令只能对ext系列文件系统使用
[root@admin ~]# blkid /dev/sdb3
/dev/sdb3: LABEL="juan3" UUID="77c770b2-e166-41cd-aa5f-8eb4481d84af" TYPE="ext4"
[root@admin ~]# mount -L juan3 /data2
[root@admin ~]# lsblk /dev/sdb3
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb3   8:19   0   4G  0 part /data2

【例 2】

将/dev/sdb5以只读方式挂载、指明系统类型且支持使用facl功能

[root@admin ~]# mount -r -t ext4 -o acl /dev/sdb5 /data3 
[root@admin ~]# lsblk /dev/sdb5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb5   8:21   0   4G  0 part /data3

以上挂载方式属于手动临时挂载

当退出当前shell,那么就得重新进行手动挂载。如果需要永久挂载(即启动挂载)则需要将挂载命令写入挂载配置文件/etc/fstab文件中

(1)/etc/fstab文件
磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。

系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。

(2)挂载限制

  • 根目录是必须挂载的,而且一定要先于其他mount point被挂载。因为mount是所有目录的跟目录,其他木有都是由根目录 /衍生出来的。
  • 挂载点必须是已经存在的目录。
  • 挂载点的指定可以任意,但必须遵守必要的系统目录架构原则
  • 所有挂载点在同一时间只能被挂载一次
  • 所有分区在同一时间只能挂在一次
  • 若进行卸载,必须将工作目录退出挂载点(及其子目录)之外

(3)fstab文件中的参数

[root@admin ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Mon Jun 29 16:36:21 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4dd7e68d-866e-45c4-90fa-a874f9860a3a /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

可以看到文件中一共有六列

  • 第一列Divice 磁盘设备文件或者设备的Lable页或UUID

    ①使用设备名和label及uuid作为标识的不同
    使用设备名称(/dev/sda)来挂载分区时是被固定死的,一旦磁盘的插槽顺序发生了变化,就会出现名称不对应的问题。因为这个名称是会改变的。不过使用label挂载就不用担心插槽顺序方面的问题。不过要随时注意你的Label name。至于UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号。使用uuid挂载的话就不用担心会发生错乱的问题了

    ②可以通过两个命令查看UUID和Lable

[root@admin ~]# dumpe2fs -h /dev/sda1  #该命令只适用于ext系列文件系统
[root@admin ~]# blkid /dev/sda1
  • 第二列Mount point 设备的挂载点,就是你要挂载到哪个目录下
  • 第三列filesystem 磁盘文件系统的格式,包括ext2、ext3、xfs、reiserfs、nfs、vfat等
  • 第四列parameters 文件系统的参数,即mount命令中-o选项后的参数(如果是defaults则包括rw、suid、dev、exec、auto、nouser、async 、and relatime)
  • 第五列能否被dump备份命令作用 dump是一个用来作为备份的命令。通常这个参数的值为0或者1(0 代表不要做dump备份;1 代表要每天进行dump的操作;2 代表不定日期的进行dump操作)
  • 第六列是否检验扇区 开机的过程中,系统默认会以fsck检验我们系统是否为完整(0代表不要检验;1代表最早检验(一般根目录会选择使用2);2代表1级别检验完成之后进行检验)

【例 3】设置启动挂载
将/dev/sdb5以读写、异步、不允许普通用户挂载且支持acl、suid、nouser功能的方式挂载到/data4目录下,不需要dump备份,不检查文件系统

[root@admin ~]# blkid /dev/sdb5     #查看/dev/sdb5的文件系统类型
/dev/sdb5: UUID="b49d1797-6114-4f5c-a888-f7ca7c6d5c5a" TYPE="ext4
[root@admin ~]# lsblk /dev/sdb5   #未挂载
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb5   8:21   0   4G  0 part 
[root@admin ~]# echo "/dev/sdb5 /data4 ext4 rw,async,auto,nouser,async,suid,acl 0 0" >> /etc/fstab			#根据要求和规则将配置语句写入/etc/fstab文件中
[root@admin ~]# mount -a		#测试语法有没有错误,并且使该语句生效,如果没有报错则说明语法没有错误,并且进行执行挂载
[root@admin ~]# lsblk /dev/sdb5   	#查看挂载情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb5   8:21   0   4G  0 part /data4
[root@admin ~]# cat /etc/fstab    
#
# /etc/fstab
# Created by anaconda on Mon Jun 29 16:36:21 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4dd7e68d-866e-45c4-90fa-a874f9860a3a /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb5 /data4 ext4 rw,async,auto,nouser,async,suid,acl 0 0

同时也可以使用UUID或者卷标名进行启动挂载

[root@admin bin]# lsblk -f /dev/sdb5
NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sdb5 ext4   jbm   b49d1797-6114-4f5c-a888-f7ca7c6d5c5a 
[root@admin ~]# echo "UUID=b49d1797-6114-4f5c-a888-f7ca7c6d5c5a /data4 ext4 rw,async,auto,nouser,async,suid,acl 0 0" >> /etc/fstab
#或者
[root@admin ~]# echo "LABEL="jbm" /data4 ext4 rw,async,auto,nouser,async,suid,acl 0 0" >> /etc/fstab
#均可以实现挂载
[root@admin ~]# df  /dev/sdb5
文件系统         1K-块  已用    可用 已用% 挂载点
/dev/sdb5      3997376 16376 3754904    1% /data4
	

另外,我们也可以利用mount来将某个目录挂载到另一个目录。这并不是挂载文件系统,而是额外挂载某个目录的方法。虽然也可以使用软连接来做链接,不过在某些不支持软连接的程序运行中还是要通过这样的方法才行

[root@admin ~]# mkdir /data/var
[root@admin var]# mount --bind /var /data/var
[root@admin var]# ls -lid /var /data/var
69 drwxr-xr-x. 20 root root 278 8月   6 11:06 /data/var
69 drwxr-xr-x. 20 root root 278 8月   6 11:06 /var
#内容完全一摸一样,因为挂载目录的缘故

看起来,其实两者链接到同一个inode,通过mount --bind的功能,可以将目录挂载到其他目录,而并不是整个文件系统,那么进入 /data/var 就是从进入 /var

(二)将设备文件卸载

[root@admin var]# umount [-fn] 设备文件名或挂载点
选项与参数:
-f:强制卸载,可用在类似网络文件系统(NFS)无法读取到的情况下
-l:立即卸载文件系统,比-f还强
-n:不更新/etc/mtab情况下卸载

就是直接将已挂载的文件系统卸载,卸载之后,可以使用 df 设备名/挂载点lsblk 设备名mount -l 设备名/挂载点 查看是否还存在于目录树中。卸载的方式,可以是设备文件名或挂载点,

【例】
通过设备文件名卸载

[root@admin var]# lsblk /dev/sdb2
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb2   8:18   0   2G  0 part /data1
[root@admin var]# umount /dev/sdb2
[root@admin var]# lsblk /dev/sdb2
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb2   8:18   0   2G  0 part 

通过挂载点进行卸载

[root@admin var]# lsblk /dev/sdb5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb5   8:21   0   4G  0 part /data4
[root@admin var]# umount /data4
[root@admin var]# lsblk /dev/sdb5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb5   8:21   0   4G  0 part 

注意:正在被进程访问到的挂载点无法被卸载

  • 查看被哪个或哪些进程所占用:
    #lsof MOUNT_POINT
    #fuser -v MOUNT_POINT
  • 终止所有正在访问某挂载点的进程:
    #fuser -km MOUNT_POINT
[root@admin var]# lsblk /dev/sdb3
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb3   8:19   0   4G  0 part /data2
[root@admin var]# umount /data2
umount: /data2:目标忙。
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)
[root@admin var]# fuser -v /data2  #查看被哪些进程所占用
                     用户     进程号 权限   命令
/data2:              root     kernel mount /data2
                     dxk        2084 ..c.. bash
[root@admin var]# lsof /data2 #查看被哪些进程所占用
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    2084  dxk  cwd    DIR   8,19     4096    2 /data2
[root@admin var]# fuser -km /data2	#终止所有正在访问该挂载点的进程
/data2:               2084c
[root@admin var]# umount /data2	#这时便可以卸载
[root@admin var]# lsblk /dev/sdb3
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb3   8:19   0   4G  0 part 

如果是设置的启动挂载(即将挂载写入fstab文件中的),那么使用umount卸载的话,也只是临时卸载,当重新登入bash后,将会继续自动挂载,所以要完全卸载是需要将fstab文件中的挂载语句删除

五、df命令

用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等同时也可以查看挂载信息

与整个文件系统有关的数据,都保存在 Super block(超级块)中,而 df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。

用法: df [选项] [目录或文件名]

选项:

  • -a:显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统
  • -m:以 MB 为单位显示容量
  • -k:以 KB 为单位显示容量,默认以 KB 为单位
  • -h:使用人们习惯的 KB、MB 或 GB 等单位自行显示容量
  • -H:以M=1000K替换M=1024K的进位方式计算
  • -T:连同该硬盘分区的文件系统名称(例如xfs)也列出
  • -i:不用硬盘容量显示,而是以含有 inode 的数量来显示

【例 1】
将系统内所有的文件系统全列出来

[root@admin ~]# df
Filesystem                1K-blocks   Used Available 	Use% 	Mounted on
devtmpfs                  485840       0   485840    	0% 		/dev
tmpfs                     497840       0   497840    	0% 		/dev/shm
tmpfs                     497840    7764   490076    	2% 		/run
tmpfs                     497840       0   497840    	0% 		/sys/fs/cgroup
/dev/mapper/centos-root 90837672 3100756 87736916    	4% 		/
/dev/mapper/centos-home  9754624   33012  9721612    	1% 		/home
/dev/sda1                 289444  135252   154192   	47% 	/boot
tmpfs                      99572       0    99572   	0% 		/run/user/0

输出结果信息:

  • Filesystem:代表该文件系统是在哪个硬盘分区,所以列出设备名称
  • 1k-blocks:说明下面的数字单位是1KB,可利用-h或-m来改变显示单位
  • Used:表示用掉的硬盘空间大小
  • Available:表示剩余的硬盘空间大小
  • Use%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行(例如最容易被占满的/var/spool.mail这个保存邮件的目录)
  • Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置。

【例 2】
将容量结果以易读的格式显示出来

[root@admin ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.6M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root   87G  3.0G   84G    4% /
/dev/mapper/centos-home  9.4G   33M  9.3G    1% /home
/dev/sda1                283M  133M  151M   47% /boot
tmpfs                     98M     0   98M    0% /run/user/0

【例 3】
将系统内的所有特殊格式文件以及名称都列出来

[root@admin ~]# df -aT
文件系统                类型          1K-块    已用     可用 已用% 挂载点
sysfs                   sysfs             0       0        0     - /sys
proc                    proc              0       0        0     - /proc
devtmpfs                devtmpfs     485840       0   485840    0% /dev
securityfs              securityfs        0       0        0     - /sys/kernel/security
tmpfs                   tmpfs        497840       0   497840    0% /dev/shm
devpts                  devpts            0       0        0     - /dev/pts
tmpfs                   tmpfs        497840    7764   490076    2% /run
……省略……
hugetlbfs               hugetlbfs         0       0        0     - /dev/hugepages
/dev/mapper/centos-home xfs         9754624   33012  9721612    1% /home
/dev/sda1               xfs          289444  135252   154192   47% /boot
tmpfs                   tmpfs         99572       0    99572    0% /run/user/0
/dev/mapper/centos-root xfs        90837672 3100756 87736916    4% /data/var

【例 4】
将/etc下面的可用的磁盘容量以易读的容量格式显示出来

[root@admin ~]# df -h /etc
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   87G  3.0G   84G    4% /

df会自动分析该目录或文件所在的硬盘分区,并将该硬盘分区的容量显示出来,同时也可以使用df 设备名/挂载点来查看挂载信息

【例 5】
将各个硬盘分区可用的inode数量列出

[root@admin ~]# df -ih
文件系统                Inode 已用(I) 可用(I) 已用(I)% 	挂载点
devtmpfs                 119K     	412     119K       1% /dev
tmpfs                    122K       1    	122K       1% /dev/shm
tmpfs                    122K     	786     121K       1% /run
tmpfs                    122K      	16    	122K       1% /sys/fs/cgroup
/dev/mapper/centos-root   44M     	37K     44M       1% /
/dev/mapper/centos-home  4.7M       9    	4.7M       1% /home
/dev/sda1                143K     	327     143K       1% /boot
tmpfs                    122K       1    	122K       1% /run/user/0

由于df主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在超级区块内的信息,所以这个命令显示的结果速度非常快

六、du命令

统计目录或文件所占磁盘空间大小

使用"ls -r"命令是可以看到文件的大小的。但是大家会发现,在使用"ls -r"命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小

我们在统计目录时,不是想看父目录下的子目录名和子文件名到底占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小。

用法:du [选项] [目录或文件名]

选项:

  • -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
  • -h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;
  • -s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量
  • -S:不包括子目录下的总计,与-s有差别
  • -m:以 MB 为单位显示容量
  • -k:以 KB 为单位显示容量

【例 1 】
列出当前目录下的所有文件容量

[root@admin ~]# du
18848	./bin
1448	./tar
20344	.

【例 2】
将文件的容量也列出来

[root@admin ~]# du -a
4	./.bash_logout
4	./.bash_profile
4	./.bashrc
4	./.cshrc
4	./.tcshrc
4	./anaconda-ks.cfg
8	./.bash_history
9132	./bin/httpd-2.4.43.tar.gz
8956	./bin/mariadb-5.5.65-1.el7.x86_64.rpm
760	./bin/mariadb-libs-5.5.65-1.el7.x86_64.rpm
18848	./bin
4	./HelloWorld.java
4	./HelloWorld.class
8	./.viminfo
1004	./tar/libevent-2.1.8-stable.tar.gz
444	./tar/memcached-1.5.6.tar.gz
1448	./tar
20344	.

【例 3】
检查根目录下面每个目录所占用的容量

[root@admin ~]# du -sm /*

【例 4】
只统计磁盘占用量总的大小

[root@admin ~]# du -sh
20M	.

du命令和df命令的区别
有时我们会发现,使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。那是因为df命令是从文件系统的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)

七、lsof命令

lsof(list open files)是一个列出当前系统打开文件的工具

在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议(TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的

用法: lsof [选项] [文件]

选项:

  • [-a] 文件名:列出打开文件存在的进程
  • -c<进程名> :列出指定进程所打开的文件
  • -g [PGID] :列出GID号进程详情
  • -d<文件号> :列出占用该文件号的进程
  • +d<目录> :列出目录下被打开的文件
  • +D<目录> :递归列出目录下被打开的文件
  • -n<目录> :列出使用NFS的文件;
  • -i<条件> :列出符合条件的进程(4、6、协议、:端口、 @ip )
  • -p<进程号> :列出指定进程号所打开的文件;
  • -u :列出UID号进程详情;
  • -s <套接字>:列出指定套接字所打开的文件信息

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
【例 1】
列出所有打开的文件

[root@admin ~]# lsof
COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1         root  cwd       DIR              253,0      4096         64 /
systemd      1         root  rtd       DIR              253,0      4096         64 /
systemd      1         root  txt       REG              253,0   1628608   67575503 /usr/lib/systemd/systemd
systemd      1         root  mem       REG              253,0     20064   67195641 /usr/lib64/libuuid.so.1.3.0
……省略……
#每一行显示一个打开的文件,不指定条件下默认显示出所有进程打开的文件。

lsof输出各列信息的意义如下:

1. 名称

  • COMMAND:进程名称
  • PID:进程标识符
  • TID:线程ID
  • USER:所有者
  • FD:文件描述符
  • TYPE:文件类型
  • DEVICE:磁盘名称
  • SIZE/OFF:文件大小
  • NODE:索引节点
  • NAME:文件名称

2. FD(文件描述符)

  • cwd:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行修改
  • txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库
  • rtd:根目录
  • 0:表示标准输出
  • 1:表示标准输入
  • 2:表示标准错误

3.文件类型

  • DIR:目录
  • CHR:字符类型
  • BLK:块设备类型
  • UNIX:UNIX域套接字
  • FIFO:先进先出(FIFO)队列
  • IPv4:国际协议(IP)套接字

【例 2】

列出所有打开的文件:

[root@admin ~]# lsof 

备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
【例 3】
查看谁正在使用某个文件
#lsof /filepath/file

#查看哪个进程在使用文件/usr/lib/systemd/systemd
[root@admin ~]# lsof /usr/lib/systemd/systemd
COMMAND PID USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
systemd   1 root txt    REG  253,0  1628608 67575503 /usr/lib/systemd/systemd

【例 4】
递归查看某个目录的文件被使用信息
#lsof +D /filepath/filepath2/

#递归查看目录/usr/lib/systemd/下文件被使用信息
[root@admin ~]# lsof +D /usr/lib/systemd/
COMMAND   PID USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
systemd     1 root txt    REG  253,0  1628608 67575503 /usr/lib/systemd/systemd
systemd-j 493 root txt    REG  253,0   346160 67575517 /usr/lib/systemd/systemd-journald
systemd-u 530 root txt    REG  253,0   416192 67575536 /usr/lib/systemd/systemd-udevd
systemd-l 700 root txt    REG  253,0   635760 67575519 /usr/lib/systemd/systemd-logind

备注: 使用了+D,对应目录下的所有子目录和文件都会被列出

【例 5】
比使用+D选项,遍历查看某个目录的所有文件信息 的方法
#lsof | grep ‘/filepath/filepath2/’

[root@admin ~]# lsof | grep /usr/lib/systemd/
systemd      1         root  txt       REG              253,0   1628608   67575503 /usr/lib/systemd/systemd
systemd-j  493         root  txt       REG              253,0    346160   67575517 /usr/lib/systemd/systemd-journald
systemd-u  530         root  txt       REG              253,0    416192   67575536 /usr/lib/systemd/systemd-udevd
systemd-l  700         root  txt       REG              253,0    635760   67575519 /usr/lib/systemd/systemd-logind

【例 6】
列出某个用户打开的文件信息
#lsof -u username

#查看dxk用户打开了哪些文件
[root@admin ~]# lsof -u dxk
COMMAND  PID USER   FD   TYPE             DEVICE  SIZE/OFF      NODE NAME
sshd    1300  dxk  cwd    DIR              253,0      4096        64 /
sshd    1300  dxk  rtd    DIR              253,0      4096        64 /
sshd    1300  dxk  txt    REG              253,0    852856  67601578 /usr/sbin/sshd
sshd    1300  dxk  mem    REG              253,0     15488 201653978 /usr/lib64/security/pam_lastlog.so
sshd    1300  dxk  mem    REG              253,0     15648  67443744 /usr/lib64/libpam_misc.so.0.82.0
……省略……

备注: -u 选项,u其实是user的缩写

【例 7】
列出某个程序所打开的文件信息
#lsof -c 程序名

[root@admin ~]# lsof -c java
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF      NODE NAME
java    1413 root  cwd    DIR  253,0       220 201326657 /root
java    1413 root  rtd    DIR  253,0      4096        64 /
java    1413 root  txt    REG  253,0      7718   1081481 /usr/local/src/jdk1.7.0_79/bin/java
java    1413 root  mem    REG  253,0 106172832 201648650 /usr/lib/locale/locale-archive
java    1413 root  mem    REG  253,0  62611620  67883252 /usr/local/src/jdk1.7.0_79/jre/lib/rt.jar
java    1413 root  mem    REG  253,0    123434    470154 /usr/local/src/jdk1.7.0_79/jre/lib/amd64/libzip.so
java    1413 root  mem    REG  253,0     61560  67149933 /usr/lib64/libnss_files-2.17.so
java    1413 root  mem    REG  253,0    220132    470122 /usr/local/src/jdk1.7.0_79/jre/lib/amd64/libjava.so
java    1413 root  mem    REG  253,0     65437    470147 /usr/local/src/jdk1.7.0_79/jre/lib/amd64/libverify.so
……省略……

备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比
第二种方法要少打几个字符了

【例 8】
列出多个程序所打开的文件信息
#lsof -c mysql -c apache

#列出java和httpd程序所打开的文件信息
[root@admin ~]# lsof -c java -c httpd
COMMAND  PID   USER   FD      TYPE             DEVICE  SIZE/OFF      NODE NAME
httpd   1485   root  cwd       DIR              253,0      4096        64 /
httpd   1485   root  rtd       DIR              253,0      4096        64 /
httpd   1485   root  txt       REG              253,0    523608  67130847 /usr/sbin/httpd
httpd   1485   root  mem       REG              253,0     86464  67575462 /usr/lib64/libnss_myhostname.so.2
httpd   1485   root  mem       REG              253,0    109976  67149943 /usr/lib64/libresolv-2.17.so
……省略……
java    1493   root  mem       REG              253,0     32768 201726495 /tmp/hsperfdata_root/1493
java    1493   root    0u      CHR              136,1       0t0         4 /dev/pts/1
java    1493   root    1u      CHR              136,1       0t0         4 /dev/pts/1
java    1493   root    2u      CHR              136,1       0t0         4 /dev/pts/1
java    1493   root    3r      REG              253,0  62611620  67883252 /usr/local/src/jdk1.7.0_79/jre/lib/rt.jar

【例 9】
列出某个用户以及某个程序所打开的文件信息
#lsof -u test -c mysql

#列出dxk用户和java程序所打开的文件信息
sshd    1300  dxk    9u   CHR                5,2       0t0      8519 /dev/ptmx
sshd    1300  dxk   13u   CHR                5,2       0t0      8519 /dev/ptmx
sshd    1300  dxk   14u   CHR                5,2       0t0      8519 /dev/ptmx
bash    1301  dxk  cwd    DIR              253,2        99        67 /home/dxk
bash    1301  dxk  rtd    DIR              253,0      4096        64 /
bash    1301  dxk  txt    REG              253,0    964536     11524 /usr/bin/bash
……省略……
java    1493 root    0u   CHR              136,1       0t0         4 /dev/pts/1
java    1493 root    1u   CHR              136,1       0t0         4 /dev/pts/1
java    1493 root    2u   CHR              136,1       0t0         4 /dev/pts/1
java    1493 root    3r   REG              253,0  62611620  67883252 /usr/local/src/jdk1.7.0_79/jre/lib/rt.jar

【例 10】
列出除了某个用户外的被打开的文件信息
#lsof -u ^root

#列出除了root用户外的被打开的文件信息
[root@admin ~]# lsof -u ^root 
COMMAND    PID TID    USER   FD      TYPE             DEVICE  SIZE/OFF      NODE NAME
dbus-daem  697        dbus  cwd       DIR              253,0      4096        64 /
polkitd    699     polkitd  cwd       DIR              253,0      4096        64 /
httpd     1490      apache    8u  a_inode               0,10         0      6509 [eventpoll]

备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
【例 11】
通过某个进程号显示该进行打开的文件
#lsof -p 进程号

#查看进程号为1300的进程所打开的文件信息
[root@admin ~]# lsof -p 1300 
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
sshd    1300  dxk  cwd    DIR              253,0     4096        64 /
sshd    1300  dxk  rtd    DIR              253,0     4096        64 /
sshd    1300  dxk  txt    REG              253,0   852856  67601578 /usr/sbin/sshd

【例 12】
列出多个进程号对应的文件信息
#lsof -p 进程号,进程号,进程号

#查看进程号为1,2,4的进程所打开的文件信息
[root@admin ~]# lsof -p 1,2,4
systemd     1 root   70u     unix 0xffff8aa3f84a1980      0t0      14854 /run/systemd/journal/stdout
systemd     1 root   71u     unix 0xffff8aa3f84a2a80      0t0      14666 /run/systemd/journal/stdout
kthreadd    2 root  cwd       DIR              253,0     4096         64 /
kthreadd    2 root  rtd       DIR              253,0     4096         64 /
kthreadd    2 root  txt   unknown                                        /proc/2/exe
kworker/0   4 root  cwd       DIR              253,0     4096         64 /
kworker/0   4 root  rtd       DIR              253,0     4096         64 /

【例 13】
列出除了某个进程号,其他进程号所打开的文件信息
#lsof -p ^进程号

#列出除了1和2进程其他进程所打开的文件信息
[root@admin ~]# lsof -p ^1,^2

【例 14】
列出所有的网络连接
#lsof -i

[root@admin ~]# lsof -i
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1028   root    3u  IPv4  21206      0t0  TCP *:ssh (LISTEN)
sshd    1028   root    4u  IPv6  21215      0t0  TCP *:ssh (LISTEN)
sshd    1205   root    3u  IPv4  21547      0t0  TCP admin:ssh->192.168.126.1:26728 (ESTABLISHED)
sshd    1296   root    3u  IPv4  25732      0t0  TCP admin:ssh->192.168.126.1:26927 (ESTABLISHED)

【例 15】
列出所有tcp 网络连接信息
#lsof -i tcp

[root@admin ~]# lsof -i tcp
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1028   root    3u  IPv4  21206      0t0  TCP *:ssh (LISTEN)
sshd    1028   root    4u  IPv6  21215      0t0  TCP *:ssh (LISTEN)
sshd    1205   root    3u  IPv4  21547      0t0  TCP admin:ssh->192.168.126.1:26728 (ESTABLISHED)
httpd   1487 apache    4u  IPv6  27258      0t0  TCP *:http (LISTEN)
httpd   1488 apache    4u  IPv6  27258      0t0  TCP *:http (LISTEN)

【例 16】
列出所有udp网络连接信息
#lsof -i udp

[root@admin ~]# lsof -i udp

【例 17】
列出谁在使用某个端口
#lsof -i :端口号

[root@admin ~]# netstat -aptn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1028/sshd           
tcp        0    844 192.168.126.8:22        192.168.126.1:26927     ESTABLISHED 1296/sshd: dxk [pri 
tcp        0      0 192.168.126.8:22        192.168.126.1:26728     ESTABLISHED 1205/sshd: root@pts 
[root@admin ~]# lsof -i :26927
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1296 root    3u  IPv4  25732      0t0  TCP admin:ssh->192.168.126.1:26927 (ESTABLISHED)
sshd    1300  dxk    3u  IPv4  25732      0t0  TCP admin:ssh->192.168.126.1:26927 (ESTABLISHED)

【例 18】
列出谁在使用某个特定的udp端口
#lsof -i udp:端口号

[root@admin ~]#  lsof -i tcp:26728

特定的tcp端口
#lsof -i tcp:端口号

【例 19】
列出某个用户的所有活跃的网络端口
#lsof -a -u 用户名 -i

[root@admin ~]# lsof -a -u dxk -i
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1300  dxk    3u  IPv4  25732      0t0  TCP admin:ssh->192.168.126.1:26927 (ESTABLISHED)

【例 20】
列出所有网络文件系统
#lsof -N

【例 21】
域名socket文件
#lsof -s socket

【例 22】
某个用户组所打开的文件信息
#lsof -g 组id

[root@admin ~]# lsof -g 1

【例 23】
根据文件描述列出对应的文件信息
#lsof -d 文件号

[root@admin ~]# lsof -d 2

【例 24】
根据文件描述范围列出文件信息
#lsof -d 文件号范围

[root@admin ~]# lsof -d 2-3

猜你喜欢

转载自blog.csdn.net/weixin_45880055/article/details/108944857