Linux磁盘管理和文件系统

文章目录

1.前言

  磁盘和文件系统的管理是运维人员的重要工作内容之一,本文对磁盘和文件系统的一些概念做了详细解释,管理命令给出了常用示例,方便自己在工作时随时查阅,也欢迎各位一同学习。

2.磁盘结构

2.1设备文件

在linux系统中,一切皆文件,磁盘设备也是文件的一种。
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

设备号码:

  • 主设备号:major number, 标识设备类型
  • 次设备号:minor number, 标识同一类型下的不同设备

设备类型:

  • 块设备:block,存取单位“块”,磁盘
  • 字符设备:char,存取单位“字符”,键盘
  • 网络设备:主机与主机之间进行数据交换的设备

2.2设备的命名规则

(1)物理设备

  系统内核中的 udev 设备管理器会自动将硬件名称规范起来,让用户通过设备文件的名字即可猜出设备的大致属性及分区信息。另外,此设备管理器服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。 Linux系统中常见的硬件设备文件名如下表所示:

硬件设备文件名称
IDE设备/dev/hd[a-d]
SCSI / SATA / U盘/dev/sd[a-p]
软驱/dev/fd[0-1]
打印机/dev/1p[0-15]
光驱/dev/cdrom 或 /dev/sr0
鼠标/dev/mouse
磁带机/dev/st0 或 /dev/ht0

  现在IDE设备已经比较少,大部分硬盘设备都会以 /dev/sd 开头。一台主机上可以有多块硬盘,系统采用从a~p来代表16块不同的硬盘,默认从a开始分配。各个硬盘的分区编号也是有规范的,主分区或扩展分区编号范围为1-4,逻辑分区的编号从5开始。

这里有两点要注意:

  • /dev/sda设备之所以是a,是由内核的识别顺序决定的, 与主板上的插槽无关,很多主板上的插槽顺序与内核的识别顺序一致
  • /dev/sda4代表这是设备上编号为4的分区,并不表示此设备上有4个分区

为什么主分区编号最大为4呢?

  对于硬盘设备都是由大量的扇区组成的,每个扇区的容量为512字节,其中第一个扇区存储着主引导记录和分区列表信息,主引导记录占用446字节,分区表占用64字节,结束符占用2字节,而分区表中,每记录一个分区信息需要16字节,这样一来就只有4个分区信息可以记录在第一扇区了,这4个分区即是主分区。

扩展分区:它不是一个实际的分区,它仅是一个指向下一个分区的指针,其指针形成一个意向链表。

[root@c7-4 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        900M     0  900M    0% /dev
tmpfs           910M     0  910M    0% /dev/shm
tmpfs           910M  9.6M  901M    2% /run
tmpfs           910M     0  910M    0% /sys/fs/cgroup
/dev/sda2        50G  1.2G   49G    3% /
/dev/sda5        40G   33M   40G    1% /data
/dev/sda1       2.0G  141M  1.9G    7% /boot
tmpfs           182M     0  182M    0% /run/user/0

[root@c7-4 ~]# fdisk -l
磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8c67

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352   109053951    52428800   83  Linux
/dev/sda3       109053952   117442559     4194304   82  Linux swap / Solaris
/dev/sda4       117442560   209715199    46136320    5  Extended
/dev/sda5       117444608   201330687    41943040   83  Linux

[root@c7-4 ~]# cat /proc/partitions 
major minor  #blocks name

   8        0  104857600 sda		#第一块硬盘总大小
   8        1    2097152 sda1		#boot分区
   8        2   52428800 sda2		#根分区
   8        3    4194304 sda3		#swap分区
   8        4          1 sda4		#扩展分区
   8        5   41943040 sda5		#逻辑分区,自己分的 /data 分区
  11        0    1048575 sr0		#光盘镜像
#sda表示第一块硬盘,sda1表示第一块硬盘的第一个分区,sda1-4为主分区或者扩展分区
#从sda5开始为逻辑分区

(2)虚拟磁盘设备

虚拟磁盘常用的设备文件名为:

/dev/vd 
/dev/xvd

(3)创建设备文件

[root@c7-2 ~]#df /boot
Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/sda1        1038336 182952    855384  18% /boot
[root@c7-2 ~]#ls /boot
config-3.10.0-1062.el7.x86_64  initramfs-0-rescue-aaee489cf65d45c498afb87639413169.img  System.map-3.10.0-1062.el7.x86_64
efi                            initramfs-3.10.0-1062.el7.x86_64.img                     vmlinuz-0-rescue-aaee489cf65d45c498afb87639413169
grub                           initramfs-3.10.0-1062.el7.x86_64kdump.img                vmlinuz-3.10.0-1062.el7.x86_64
grub2                          symvers-3.10.0-1062.el7.x86_64.gz
[root@c7-2 ~]#mkdir /data
[root@c7-2 ~]#mknod /data/partition-sda1 b 8 1
[root@c7-2 ~]#ll /data/partition-sda1
brw-r--r-- 1 root root 8, 1 Aug  8 16:08 /data/partition-sda1
[root@c7-2 ~]#mount /data/partition-sda1 /mnt/
[root@c7-2 ~]#ls /mnt
config-3.10.0-1062.el7.x86_64  initramfs-0-rescue-aaee489cf65d45c498afb87639413169.img  System.map-3.10.0-1062.el7.x86_64
efi                            initramfs-3.10.0-1062.el7.x86_64.img                     vmlinuz-0-rescue-aaee489cf65d45c498afb87639413169
grub                           initramfs-3.10.0-1062.el7.x86_64kdump.img                vmlinuz-3.10.0-1062.el7.x86_64
grub2                          symvers-3.10.0-1062.el7.x86_64.gz

[root@c7-2 ~]#ll /dev/zero
crw-rw-rw- 1 root root 1, 5 Aug  6 23:21 /dev/zero
[root@c7-2 ~]#mknod /data/zero c 1 5
[root@c7-2 ~]#ll /data/zero
crw-r--r-- 1 root root 1, 5 Aug  8 16:09 /data/zero

2.3硬盘类型

(1)硬盘接口类型

  • IDE:133MB/s,并行接口,早期家用电脑
  • SCSI:640MB/s,并行接口,早期服务器
  • SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
  • SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而
    SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入 SAS主板上,反之不成
  • USB:480MB/s
  • M.2:

注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的

(2)服务器硬盘大小

  • LFF:3.5寸,一般见到的台式机硬盘的大小
  • SFF:2.5寸,不同于2.5寸的笔记本硬盘
    L、S分别是大、小的意思,服务器或者盘柜采用 SFF 规格的硬盘主要是考虑增大单位密度内的磁盘容量、增强散热、减小功耗。

(3)机械硬盘和固态硬盘

机械硬盘:

机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由盘片,磁头,盘片转轴及控制电
机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴
上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直
径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径
方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操
作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精
密设备,进入硬盘的空气必须过滤。

固态硬盘:

固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储
单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的
完全相同,在产品外形和尺寸上也与普通硬盘一致。

  SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,HDD在价格、容量占有绝对优势,但是硬盘有价,数据无价,目前SSD不能完全取代HHD。

3.磁盘存储管理

3.1磁盘分区方式

(1)MBR分区

磁盘的第一个扇区即 0 磁道 0 扇区共有 512 bytes,分别为:

  • 446 bytes: boot loader
  • 64 bytes:分区表,其中每16 bytes 标识一个分区
  • 2 bytes: 55AA,主引导记录有效标志

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主分区和扩展分区对应的1-4,逻辑分区从5开始(/dev/sda5)
《Linux磁盘管理和文件系统》
示例:备份MBR的分区表,并破坏后恢复

#备份MBR分区表
[root@centos8 ~]#dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
[root@centos8 ~]#scp /data/dpt.img 10.0.0.102:
#破坏MBR分区表
[root@centos8 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
#无法启动
[root@centos8 ~]#reboot
#用光盘启动,进入rescue mode,选第3项skip to shell
#配置网络
#ifconfig ens160 10.0.0.8/24
#ip a a 10.0.0.8/24 dev/ens160
#scp 10.0.0.102:/root/dpt.img .
#恢复MBR分区表
#dd if=dpt.img of=/dev/sda bs=1 seek=446
#exit

(2)GPT分区

  GPT,全局唯一标识分区表(GUID Partition Table),它使用128位GUID来唯一标识每个磁盘和分区。与MBR存在单一故障点不同,GPT提供分区表信息的冗余,一个在磁盘头部,一个在磁盘尾部;它通过CRC校验来检测GPT头和分区表中错误与损坏。默认一个硬盘支持128个分区(可以更多)。
GPT最大支持18EB(1EB=1024PB,1PB=1024TB),MBR最大支持2TB

GPT分区结构分为4个区域:

  • GPT头
  • 分区表
  • GPT分区
  • 备份区域
    《Linux磁盘管理和文件系统》

3.2磁盘管理命令

(1)fdisk–管理MBR分区

fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表、BSD 或者 SUN 类型的磁盘列表
格式:

fdisk [参数] [分区]
参数含义
-l查看硬盘的整体情况和分区情况,后面跟分区可以查看指定分区情况
-u与 -l 搭配使用,显示分区数目
-s <分区编号>以分区块为单位,显示指定分区的大小
-b <大小>指定扇区大小,(512,1024,2048或4096B)
-C <编号>指定柱面编号
-H <编号>指定磁头编号
-S <编号>指定磁道扇区编号

fdisk 交互模式常用指令:

  m     #显示帮助菜单
  a     #设置可引导标记
  b     #修改bsd的磁盘标签
  c     #设置DOS操作系统兼容标记
  d     #删除一个分区
  l     #显示已知的分区类型,其中82为Linux swap分区,83为Linux分区
  n     #增加一个新的分区
  o     #创建一个新的空白的DOS分区表
  p     #显示磁盘当前的分区表
  q     #退出fdisk程序,不保存任何修改
  s     #创建一个新的空白的Sun磁盘标签
  t     #改变一个分区的系统号码
  u     #改变显示记录单位
  v     #对磁盘分区表进行验证
  w     #保存修改结果并退出fdisk程序
  x     #特殊功能,不建议初学者使用

示例:

[root@c7-3~]#fdisk -l

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    10487807     4194304   82  Linux swap / Solaris
/dev/sda3        10487808   209715199    99613696   83  Linux

#非交互式创建分区,分区号默认,起始扇区默认,终止扇区+20G,其中\n表示换行
echo -e 'n\np\n\n\n+20G\nw\n' | fdisk /dev/sdc
#这种分区方式表示不太友好,也可以用下面这种,空的两行表示两个默认操作
echo "n p +20G w" |fdisk /dev/sdc

(2)gdisk–管理GPT分区

  gdisk 又叫 GPT fdisk,是fdisk的延伸,主要使用的是 GPT 分区类型,用来划分容量大于 2T 的硬盘,最小化安装的系统可能没有 gdisk,执行 yum -y install gdisk 安装 。
格式:

gdisk [参数] [分区]

fdisk 交互模式常用指令:

b 将GPT数据备份到一个文件 
c 更改分区名称 
d 删除一个分区 
i 显示分区详细信息 
l 列出已知分区类型。此处8200是Linux swap,8300是Linux filesystem(对应fdisk的82和83)。还有一个8e00是Linux LVM 
n 增加一个新的分区 
o 创建一个新的空白的GPT分区表 
p 显示当前磁盘的分区表 
q 退出gdisk程序,不保存任何修改 
r 恢复和转换选项(仅限专家) 
s 排序分区 
t 改变分区的类型 
v 验证磁盘分区表 
w 将分区表写入裁判并退出(保存并退出) 
x 额外功能(仅限专家) 
? 显示帮助信息 

示例:

[root@xuexi ~]# 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): p  //显示当前磁盘的分区表 Disk /dev/sdb: 4194304 sectors, 2.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 4E50861F-8360-4B97-986E-51F4080BF678 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 4194270 Partitions will be aligned on 2048-sector boundaries Total free space is 2097085 sectors (1024.0 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem Command (? for help): d  //删除一个分区 Using 1 Command (? for help): n  //新建一个分区 Partition number (1-128, default 1): First sector (34-4194270, default = 2048) or {+-}size{KMGTP}:    //开始扇区 Last sector (2048-4194270, default = 4194270) or {+-}size{KMGTP}: +1G  //终止扇区 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): 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. 
Warning: The kernel is still using the old partition table. 
The new table will be used at the next reboot.  //提示在下次重启后生效 
The operation has completed successfully. 

(3)parted–高级分区操作

规划大小超过2T的分区,也可用于小分区的规划
格式:

parted [选项]... [设备 [命令 [参数]...]...]
参数含义
-h显示帮助信息
-l列出所有设备的分区信息
-i在必要时,提示用户
-s从不提示用户
-v显示版本

交互式操作命令:

cp [FROM-DEVICE] FROM-MINOR TO-MINOR          #将文件系统复制到另一个分区 
help [COMMAND]                                #打印通用求助信息,或关于 COMMAND 的信息 
mklabel 标签类型                               #改变磁盘的文件类型 ;
mkfs MINOR 文件系统类型                         #在 MINOR 创建类型为“文件系统类型”的文件系统 
mkpart 分区类型 [文件系统类型] 起始点 终止点      #创建一个分区 
mkpartfs 分区类型 文件系统类型 起始点 终止点      #创建一个带有文件系统的分区 
move MINOR 起始点 终止点                        #移动编号为 MINOR 的分区 
name MINOR 名称                                #将编号为 MINOR 的分区命名为“名称” 
print/p [MINOR]                               #打印分区表,或者分区 
quit/q                                        #保存退出程序 
rescue 起始点 终止点                            #挽救临近“起始点”、“终止点”的遗失的分区 
resize MINOR 起始点 终止点                      #改变位于编号为 MINOR 的分区中文件系统的大小 
rm MINOR                                      #删除编号为 MINOR 的分区 
select 设备                                    #选择要编辑的设备 
set MINOR 标志 状态                            #改变编号为 MINOR 的分区的标志

示例:

[root@www ~]# parted /dev/sdj
GNU Parted 2.1
使用 /dev/sdj
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help    #交互式获得帮助
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted) mklabel gpt  #先将磁盘结构改为gpt
警告: The existing disk label on /dev/sdj will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? yes
(parted) mkpart    #分区第一种方式
分区名称?  []? primary
文件系统类型?  [ext2]? ext4
起始点? 1
结束点? 10
(parted) mkpart primary 11 20    #分区第2中方式
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? ignore
(parted) p        #打印分区列表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdj: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     标志
 1      1049kB  10.5MB  9437kB               primary
 2      11.0MB  20.0MB  9000kB               primary

(parted) q
信息: You may need to update /etc/fstab.

非交互式创建示例:

#创建
parted /dev/sdb mklabel gpt yes
parted /dev/sdb mklabel primary ext4 0 100 ignore
parted /dev/sdb mklabel logic ext4 0 100 ignore

#将修改后的内容告诉内核,否则需要重启
partprobe /dev/sdb

#查看
ll /dev/sd*	或 fdisk -l

(4)lsblk–列出块设备

列出所有磁盘和磁盘内分区情况
格式:

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

lsblk 默认标题栏含义:

NAME:    #设备名字,会省略/dev等前导目录。-p会取消这一限制
MAJ:MIN   #Kernel识别设备用到的代码,分别是主要、次要设备代码
RM        #是否为可卸载设备,如光盘、USB磁盘等,1说明是可移动设备
SIZE      #容量
RO        #是否为只读设备,0表明不是只读设备
TYPE      #是磁盘(disk)、分区(partition)还是只读存储器(rom)等输出
MOUTPOINT #挂载点

示例:

[root@c7-4 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk 
├─sda1   8:1    0    2G  0 part /boot
├─sda2   8:2    0   50G  0 part /
├─sda3   8:3    0    4G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   40G  0 part /data
sdb      8:16   0   80G  0 disk 
└─sdb1   8:17   0   20G  0 part /home
sr0     11:0    1  4.4G  0 rom  

(5)partx–同步磁盘分区信息

  /proc/partitions 记录了系统中所有硬盘及其上面的分区信息,包括已挂载和未挂载的,之后的格式化或挂载都是基于这个文件中的记录进行的。在 /proc/partitions 中,对有些硬盘没有记录分区信息,可能是没有分区,或者有分区但未进行记录。partx直接从硬盘上读取分区信息,并可以对系统关于硬盘分区信息的记录(/proc/partitions)进行更新。
格式:

partx [-a|-d|-s|-u] [--nr <n:m> | <分区>] <磁盘>

选项:

 -a, --add            向内核中添加某磁盘上分区的情况(只是同步信息,不是真的添加)
 -d, --delete         删除内核中关于某磁盘上的分区的记录(不是卸载)
 -s, --show           列出分区
 -u, --update         更新指定的分区或所有分区
 -b, --bytes          以字节为单位而非易读的格式来打印 SIZE
 -g, --noheadings     --show 时不打印标题
 -n, --nr <n:m>       指定分区范围(例如:--nr 2:4)
 -o, --output <type>  定义使用哪个输出列
 -P, --pairs          使用 key=“value” 输出格式
 -r, --raw            使用原生输出格式
 -t, --type <类型>    指定分区类型(dos、bsd、solaris 等)
 -v, --verbose        详尽模式
 -h, --help     	  显示此帮助并退出
 -V, --version  	  输出版本信息并退出

示例:

#同步磁盘 /dev/sda 分区信息
partx -a /dev/sda 或 kpartx -af /dev/sda

#删除 /dev/sda 磁盘上 6-8 分区的信息
partx -d --nr 6-8 /dev/sda

(6)partprobe–重载分区表

partprobe:将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表
格式:

参数含义
-d不更新内核
-s显示磁盘分区汇总信息
-h显示帮助信息
-v显示版本信息

示例:

#虚拟机新增了一块硬盘并执行了分区操作,这时候需要执行以下命令将分区信息告诉内核
partprobe /dev/sdx	

(7)blkid–查看块设备信息

  blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。
格式:

blkid -L <label> | -U <uuid>
blkid [-c <file>] [-ghlLv] [-o <format>] [-s <tag>] 
      [-t <token>] [<dev> ...]
blkid -p [-s <tag>] [-O <offset>] [-S <size>] 
         [-o <format>] <dev> ...
blkid -i [-s <tag>] [-o <format>] <dev> ...
参数含义
-L通过卷标查找对应的分区
-U通过UUID查找对应的分区
-s UUID显示指定设备的UUID(默认显示所有设备)
-s LABEL显示指定设备的LABEL(默认显示所有设备)
-s TYPE显示指定设备的文件系统(默认显示所有设备)
-o device显示所有设备名称
-o list以列表形式查看详细信息(默认显示所有设备)

示例:

[root@c7-4 ~]# blkid -o list
device                                    fs_type        label           mount point                                   UUID
------------------------------------------------------------------------------------------------------------------------------------------------------------
/dev/sda2                                 xfs                            /                                             4cb85cf7-a546-4eca-af58-af1d14ee3dd8
/dev/sdb1                                 xfs                            /data/data1                                   711b4652-0809-40db-b010-156362f9b328
/dev/sdb2                                 swap                           <swap>                                        b184a2a2-90ee-4d5b-922f-f144490f1420
/dev/sdb5                                 xfs                            /data/data2                                   6ea1a44f-735a-48b7-b942-cc6f40223abf
/dev/sda1                                 xfs                            /boot                                         61a1daaf-fd0d-4cca-9eca-06ffff1977fa
/dev/sda3                                 swap                           <swap>                                        d0141d64-c02c-4a80-b81e-c10bec2092ee
/dev/sda5                                 xfs                            /data                                         e2f9854d-a1a9-47df-b89a-5c580a2bf750
/dev/sr0                                  iso9660        CentOS 7 x86_64 (not mounted)                                 2019-09-11-18-50-31-00

4.文件系统

4.1文件系统概念

  文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

#查看系统支持的文件系统
ll /lib/modules/`uname -r`/kernel/fs

#查看帮助
man 5 fs

4.2文件系统类型

(1)Linux常用文件系统类型

ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件
(16TB)、最大1EB的文件系统,以及速度的提升
xfs:SGI,支持最大8EB的文件系统
swap
iso9660 光盘
btrfs(Oracle)
reiserfs

(2)Windows常用文件系统类型

FAT32
NTFS
exFAT

(3)Unix常用文件系统类型

FFS(fast)
UFS(unix)
JFS2

(4)常用的文件系统特性

FAT32

最多只能支持16TB的文件系统和4GB的文件

NTFS

最多只能支持16EB的文件系统和16EB的文件

EXT3

最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
Ext3目前只支持32000个子目录
Ext3文件系统使用32位空间记录块数量和 inode数量
当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块

EXT4

EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
理论上支持无限数量的子目录
Ext4文件系统使用64位空间记录块数量和 inode数量
Ext4的多块分配器支持一次调用分配多个数据块
修复速度更快

XFS

根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
用优化算法,日志记录对整体文件操作影响非常小
是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
能以接近裸设备I/O的性能存储数据

(5)文件系统的组成

用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统:VFS
内核中的模块:ext4, xfs, vfat
《Linux磁盘管理和文件系统》

(6)查看支持的文件系统

[root@c7-3~]#cat /proc/filesystems
nodev	sysfs
nodev	rootfs
nodev	ramfs
nodev	bdev
nodev	proc
......

4.3文件系统命令管理

(1)mkfs–格式化分区

mkfs 命令用于在特定的分区上建立 linux 文件系统
格式:

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
参数含义
-t {ext2,ext3,ext4,xfs}指定文件系统类型
-b {1024,2048,4096}指定块 block 大小
-L ‘LABEL’设置卷标
-c在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file将有坏轨的block资料加到 bad_blocks_file 里面

示例:

#将 /dev/sdb1 格式化为 xfs 格式
mkfs -t xfs /dev/sdb1 或 mkfs.xfs /dev/sdb1

#在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来
mkfs -V -t msdos -c /dev/hda5

(2)mount–挂载分区

mount 可以将分区挂接到 Linux 的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。

挂载的概念:

将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

挂载规则:

一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录

格式:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
参数含义
-t指定要挂载的设备上的文件系统类型
-rreadonly,只读挂载
-wread and write, 读写挂载
-n不更新/etc/mtab,mount不可见
-a将 /etc/fstab 中定义的所有设备自动挂载
-L ‘LABEL’以卷标指定挂载设备
-U ‘UUID’以UUID指定要挂载的设备
-B绑定目录到另一个目录上
# -o选项太多,不写在表格里
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
 async   异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
 sync    同步模式,内存更改时,同时写磁盘,安全,但效率低下
 atime/noatime 		 包含目录和文件
 diratime/nodiratime 目录的访问时间戳
 auto/noauto 		 是否支持开机自动挂载,是否支持-a选项
 exec/noexec 		 是否支持将文件系统上运行应用程序
 dev/nodev 		是否支持在此文件系统上使用设备文件
 suid/nosuid 	是否支持suid和sgid权限
 remount 		重新挂载
 ro/rw 			只读、读写   
 user/nouser 	是否允许普通用户挂载此设备,/etc/fstab使用
 acl/noacl 		启用此文件系统上的acl功能
 loop 			使用loop设备
 _netdev   		当网络可用时才对网络资源进行挂载,如:NFS文件系统
 defaults 		相当于rw, suid, dev, exec, auto, nouser, async

示例:

#将 /dev/hda1 挂在 /mnt 之下
mount /dev/hda1 /mnt

#将 /dev/hda1 用只读模式挂在 /mnt 之下
mount -o ro /dev/hda1 /mnt

#将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容
mount -o loop /tmp/image.iso /mnt/cdrom

#通过查看/etc/mtab文件显示当前已挂载的所有设备
mount

#查看内核追踪到的已挂载的所有设备
cat /proc/mounts

#永久挂载
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
[root@c7-4 ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Mon Aug 9 10:07:45 2021
#
# 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
#
UUID=4cb85cf7-a546-4eca-af58-af1d14ee3dd8 /                       xfs     defaults        0 0
UUID=61a1daaf-fd0d-4cca-9eca-06ffff1977fa /boot                   xfs     defaults        0 0
UUID=e2f9854d-a1a9-47df-b89a-5c580a2bf750 /data                   xfs     defaults        0 0
UUID=d0141d64-c02c-4a80-b81e-c10bec2092ee swap                    swap    defaults        0 0
/dev/sdb1                                 /home                   xfs     defaults        0 0

(3)umount–卸载分区

卸载文件系统,卸载时可使用设备,也可以使用挂载点
格式:

umount 设备名|挂载点
参数含义
-a卸载所有文件系统(记录在 /etc/mtab 中)
-n卸载时不将信息写入 /etc/mtab 文件中
-r若卸载失败,尝试以只读方式重新挂臷
-l立即断开文件系统,所有清理以后执行
-f强制卸载(遇到不响应的 NFS 系统时)
-i不调用 umount.<类型> 辅助程序
-R递归卸载目录及其子对象
-t <列表>限制文件系统集合
-O <列表>限制文件系统集合(和 -a 选项一起使用)
-d若挂臷了回环设备,也释放该回环设备
-A卸载当前名字空间内指定设备对应的所有挂臷点

示例:

#通过设备名卸载 
umount -v /dev/sda1

#通过挂载点卸载 
umount -v /mnt/mymount/

#强制卸载
umount -lf /home

(4)mkswap–设置交换分区

mkswap 可将磁盘分区或文件设为Linux的交换区
格式:

mkswap [选项] 设备 [大小]

用法:

 -c, --check               创建交换区前检查坏块
 -f, --force               允许交换区大于设备大小
 -p, --pagesize SIZE       指定页大小为 SIZE 字节
 -L, --label LABEL         指定标签为 LABEL
 -v, --swapversion NUM     指定交换空间版本号为 NUM
 -U, --uuid UUID           指定要使用的 UUID
 -V, --version             输出版本信息并退出
 -h, --help                显示此帮助并退出

示例:

[15:39:11 root@c7-1 ~]#fdisk -l #查看磁盘情况,现在只有一块 sda 磁盘,添加一块磁盘 sdb
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 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: 0x000f2378

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    10487807     4194304   82  Linux swap / Solaris
/dev/sda3        10487808   209715199    99613696   83  Linux

#如果想在不关机的情况下让系统识别新加的磁盘需要执行下列命令,不然需要重启
#该命令会重新扫描scsi主机并更新信息
[15:39:13 root@c7-1 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan

[15:39:22 root@c7-1 ~]#fdisk -l #此时 sdb 已经显示
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 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: 0x000f2378

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    10487807     4194304   82  Linux swap / Solaris
/dev/sda3        10487808   209715199    99613696   83  Linux

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

[15:39:24 root@c7-1 ~]#fdisk /dev/sdb #分 10G 作为 SWAP分区
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 0x27cb3073.

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): +10G
Partition 1 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: 0x27cb3073

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'

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: 0x27cb3073

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   82  Linux swap / Solaris

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

Calling ioctl() to re-read partition table.
Syncing disks.

[15:53:29 root@c7-1 ~]#mkswap /dev/sdb1 #将 sdb1 设置为 swap
Setting up swapspace version 1, size = 10485756 KiB
no label, UUID=88fd4b7f-0783-4df0-87b1-1815d4446b2c
[15:54:54 root@c7-1 ~]#swapon /dev/sdb1 #开启 sdb1 交换功能
[15:55:15 root@c7-1 ~]#free #此时 swap 共有 14G 
              total        used        free      shared  buff/cache   available
Mem:        1863104      779176      127240       21664      956688      897120
Swap:      14680056        3584    14676472
[15:55:17 root@c7-1 ~]#swapoff /dev/sdb1 #关闭交换功能
[15:55:26 root@c7-1 ~]#free #关闭 sdb1 后 swap 还原为 4G
              total        used        free      shared  buff/cache   available
Mem:        1863104      770988      135416       21664      956700      905312
Swap:       4194300        2468     4191832

[16:08:35 root@c7-1 ~]#vim /etc/fstab #写进配置文件里
#
# /etc/fstab
# Created by anaconda on Fri Jul 23 15:33:12 2021
#
# 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
#
UUID=adf79f65-0a7d-4159-adde-099e05b62786 /                       xfs     defaults        0 0
UUID=e269bb76-c9d1-499b-a0d3-9bb86dbbb72d /boot                   xfs     defaults        0 0
UUID=61978a53-09e9-4404-96d1-7b3e2bfe7bba swap                    swap    defaults        0 0
/dev/sdb1                                 swap                    swap    defaults        0 0

[16:10:49 root@c7-1 ~]#mount -a #重新加载 /etc/fstab 内容,无需重启虚拟机

(5)swapon/swapoff–开启/关闭交换空间

swapon 命令用于激活 Linux 系统中交换空间
swapoff 命令用于关闭 Linux 系统中交换空间

#将 /etc/fstab 文件中所有设置为 swap 的设备开启
swapon -a
#将 /etc/fstab 文件中所有设置为 swap 的设备关闭
swapoff -a 

—————————————————————————————————

本文告一段落,如有错误,欢迎各位同僚指正,本人不胜感激!

    原文作者:公博义
    原文地址: https://blog.csdn.net/shenyuanhaojie/article/details/119515309
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞