Linux文件系统和磁盘管理
磁盘存储和文件系统
内容概述
- 磁盘结构
- 分区类型
- 管理分区
- 管理文件系统
- 挂载设备
- 管理
- swap空间
- RAID管理
- LVM
- 管理
- LVM
- 快照
1 磁盘结构
1.1 设备文件
一切皆文件:open(), read(), write(), close()
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:
- 主设备号:major number, 标识设备类型
- 次设备号:minor number, 标识同一类型下的不同设备
设备类型:
- 块设备:block,存取单位“块”,磁盘
- 字符设备:char,存取单位“字符”,键盘
磁盘设备的设备文件命名:
/dev/DEV_FILE
/dev/sdX # SAS,SATA,SCSI,IDE,USB
/dev/nvme0n# #nvme协议硬盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2
虚拟磁盘:
/dev/vd
/dev/xvd
不同磁盘标识:a-z,aa,ab…
示例:
/dev/sda,/dev/sdb, ...
同一设备上的不同分区:1,2, ...
/dev/sda1
/dev/sda5
加载硬盘范例
15:09:58 root@CentOS8 ~]#echo '- - -' > /sys/class/scsi_host/host1/scan
[15:10:28 root@CentOS8 ~]#echo '- - -' > /sys/class/scsi_host/host2/scan
[15:10:32 root@CentOS8 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 126.9G 0 lvm /
├─cl-swap 253:1 0 2.1G 0 lvm [SWAP]
├─cl-home 253:2 0 20G 0 lvm /home
└─cl-data 253:3 0 50G 0 lvm /data
sdb 8:16 0 50G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 10.1G 0 rom
范例:创建设备文件
[root@centos8 ~]#df /boot
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 999320 130848 799660 15% /boot
[root@centos8 ~]#ls /boot
config-4.18.0-147.el8.x86_64 loader
efi lost+found
grub2 System.map-4.18.0-
147.el8.x86_64
initramfs-0-rescue-5b85fc7444b240a992c42ce2a9f65db5.img vmlinuz-0-rescue-
5b85fc7444b240a992c42ce2a9f65db5
initramfs-4.18.0-147.el8.x86_64.img vmlinuz-4.18.0-
147.el8.x86_64
initramfs-4.18.0-147.el8.x86_64kdump.img
[root@centos8 ~]#mknod /data/partition-sda1 b 8 1
[root@centos8 ~]#ll /data/partition-sda1
brw-r--r-- 1 root root 8, 1 Apr 13 09:15 /data/partition-sda1
[root@centos8 ~]#mount /data/partition-sda1 /mnt/
[root@centos8 ~]#ls /mnt
config-4.18.0-147.el8.x86_64 loader
efi lost+found
grub2 System.map-4.18.0-
147.el8.x86_64
initramfs-0-rescue-5b85fc7444b240a992c42ce2a9f65db5.img vmlinuz-0-rescue-
5b85fc7444b240a992c42ce2a9f65db5
initramfs-4.18.0-147.el8.x86_64.img vmlinuz-4.18.0-
147.el8.x86_64
initramfs-4.18.0-147.el8.x86_64kdump.img
[root@centos8 ~]#ll /dev/zero
crw-rw-rw- 1 root root 1, 5 Apr 13 08:03 /dev/zero
[root@centos8 ~]#mknod /data/zero c 1 5
[root@centos8 ~]#ll /data/zero
crw-r--r-- 1 root root 1, 5 Apr 13 09:17 /data/zero
范例: 操纵设备文件
[root@centos8 ~]#ll /dev/null /dev/zero
crw-rw-rw- 1 root root 1, 3 Aug 14 2020 /dev/null
crw-rw-rw- 1 root root 1, 5 Aug 14 2020 /dev/zero
[root@centos8 ~]#mknod /data/testdev c 1 5
[root@centos8 ~]#ll /data/testdev
crw-r--r-- 1 root root 1, 5 Aug 14 09:26 /data/testdev
[root@centos8 ~]#dd if=/data/testdev of=/data/test1.img bs=1 count=10
10+0 records in
10+0 records out
10 bytes copied, 9.0379e-05 s, 111 kB/s
[root@centos8 ~]#ll /data/test1.img
-rw-r--r-- 1 root root 10 Aug 14 09:27 /data/test1.img
[root@centos8 ~]#hexdump -C /data/test1.img
00000000 00 00 00 00 00 00 00 00 00 00 |..........|
0000000a
[root@centos8 ~]#rm -f /data/testdev
[root@centos8 ~]#ll /data
total 4
-rw-r--r-- 1 root root 10 Aug 14 09:27 test1.img
[root@centos8 ~]#cp /dev/zero /data/zero
^C
[root@centos8 ~]#ll -h /data/zero
-rw-r--r-- 1 root root 155M Aug 14 09:29 /data/zero
[root@centos8 ~]#ll -h /data/zero /dev/zero
-rw-r--r-- 1 root root 155M Aug 14 09:29 /data/zero
crw-rw-rw- 1 root root 1, 5 Aug 14 2020 /dev/zero
[root@centos8 ~]#cp -a /dev/zero /data/zero
cp: overwrite '/data/zero'? y
[root@centos8 ~]#ll /data/zero
crw-rw-rw- 1 root root 1, 5 Aug 14 2020 /data/zero
1.2 硬盘类型
-
IDE:133MB/s,并行接口,早期家用电脑
-
SCSI:640MB/s,并行接口,早期服务器
-
SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线
-
SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而
-
SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入
SAS主板上,反之不行
-
USB:480MB/s
-
M.2:
注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的
服务器硬盘大小
- LFF:3.5寸,一般见到的那种台式机硬盘的大小
- SFF:Small Form Factor 小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘
L、S分别是大、小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考内虑增大单位密度内的磁盘
容量、增强散热、减小功耗
1.3 机械硬盘和固态硬盘
机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电
机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴
上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直
径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径
方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操
作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精
密设备,进入硬盘的空气必须过滤
固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单
元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的
完全相同,在产品外形和尺寸上也与普通硬盘一致
相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD
的2倍
相较于SSD,HDD在价格、容量占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD
机械硬盘结构
1.4 硬盘存储术语
-
head:磁头 磁头数=盘面数
-
track:磁道 磁道=柱面数
-
sector:扇区,512bytes
-
cylinder:柱面 1柱面=512 * sector数/trackhead数=51263*255=7.84M
CentOS 5 之前版本 Linux 以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区
范例:
[root@centos6 ~]#echo "scale=2;512*63*255/1024/1024" |bc
7.84
#查看CHS
[root@centos6 ~]#fdisk -l /dev/sda
Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fc79
Device Boot Start End Blocks Id System
/dev/sda1 * 1 131 1048576 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 131 12879 102400000 83 Linux
/dev/sda3 12879 19253 51200000 83 Linux
/dev/sda4 19253 26109 55065600 5 Extended
/dev/sda5 19254 19515 2097152 82 Linux swap / Solaris
[root@centos8 ~]#fdisk -u=cylinder -l /dev/sda
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Geometry: 255 heads, 2 sectors/track, 26108 cylinders
Units: cylinders of 510 * 512 = 261120 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x59474ddc
Device Boot Start End Cylinders Size Id Type
/dev/sda1 * 5 4117 4113 1G 83 Linux
/dev/sda2 4117 415323 411207 100G 83 Linux
/dev/sda3 415323 620926 205604 50G 83 Linux
/dev/sda4 620926 822413 201488 49G 5 Extended
/dev/sda5 620930 629154 8225 2G 82 Linux swap / Solaris
范例:识别SSD和机械硬盘类型
#1表示机械,0表示SSD
[root@centos8 ~]#lsblk -d -o name,rota
NAME ROTA
sda 1
sr0 1
nvme0n1 0
nvme0n2 0
[root@centos8 ~]#ls /sys/block/
nvme0n1 nvme0n2 sda sr0
[root@centos8 ~]#cat /sys/block/*/queue/rotational
0
0
1
1
[root@centos8 ~]#cat /sys/block/sda/queue/rotational
1
[root@centos8 ~]#cat /sys/block/sr0/queue/rotational
1
[root@centos8 ~]#cat /sys/block/nvme0n1/queue/rotational
0
[root@centos8 ~]#cat /sys/block/nvme0n2/queue/rotational
0
区位记录磁盘扇区结构ZBR(Zoned Bit Recording)
CHS
- CHS采用 24 bit位寻址
- 其中前10位表示cylinder,中间8位表示head,后面6位表示sector
- 最大寻址空间 8 GB
LBA(logical block addressing)
-
LBA是一个整数,通过转换成 CHS 格式完成磁盘具体寻址
-
ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
2 管理存储
使用磁盘空间过程
1.设备分区
2.创建文件系统
3.挂载新的文件系统
2.1 磁盘分区
- 优化I/O性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
2.1.2 分区方式
两种分区方式:MBR,GPT
2.1.2.1 MBR分区
MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
划分分区的单位:
- CentOS 5 之前按整柱面划分
- CentOS 6 版本后可以按Sector划分
0磁道0扇区:512bytes
446bytes: boot loader 启动相关
64bytes:分区表,其中每16bytes标识一个分区
2bytes: 55AA
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5
MBR分区结构
硬盘主引导记录MBR由4个部分组成
-
主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序
-
出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节
-
分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
-
结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55A
MBR中DPT结构
范例: 备份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
#reboot
问题:利用分区策略相同的另一台主机的分区表来还原和恢复当前主机破环的分区表?
2.1.2.2 GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(
512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,
并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以
启动
GPT分区结构
GPT分区结构分为4个区域:
- GPT头
- 分区表
- GPT分区
- 备份区域
2.1.3 BIOS和UEFI
BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是
UEFI启动
BIOS(Basic Input Output System 基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作
系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会
发出长短不同的“滴滴”音,可以简单的判断硬件故障,比如“1长1短”通常表示内存故障,“1长3短”通常
表示显卡故障
BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问1M的内存,其中前640K
称为基本内存,后384K内存留给开机和各类BIOS本身使用。BIOS只能识别到主引导记录(MBR)初始
化的硬盘,最大支持2T的硬盘,4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系
统,传统的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了
EFI(Extensible Firmware Interface)可扩展固件接口,是 Intel 为 PC 固件的体系结构、接口和服务
提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指
定的启动服务,被看做是BIOS 的继任者,或者理解为新版BIOS。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际
组织
UEFI(Unified Extensible Firmware Interface)统一的可扩展固件接口, 是一种详细描述类型接口的标
准。UEFI 相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操
作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制
BIOS和UEFI区别
BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)
当做段基地址,加上16位偏移地址形成20位的物理地址)下,可访问的内存空间为1MB,只支持字符
操作界面
UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作
界面,使用文件方式保存信息,支持GPT分区启动,适合和较新的系统和硬件的配合使用
BIOS+MBR与UEFI+GPT
MSDN (Microsoft Developer Network) 指出,Windows 只能安装于 BIOS + MBR 或是 UEFI + GPT 的
组合上,而 BIOS + GPT 和 UEFI + MBR 是不允许的。但是 BIOS + GPT + GRUB 启动Linux 是可以的
2.1.4 ****
列出块设备
lsblk
创建分区命令
fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作,可以是交互或非交互方式
重新设置内存中的内核分区表版本,适合于除了CentOS 6 以外的其它版本 5,7,8
partprobe
2.1.4.1 parted 命令
注意:parted的操作都是实时生效的,小心使用
格式:
parted [选项]... [设备 [命令 [参数]...]...]
范例:
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted -l 列出所有硬盘分区信息
范例:
[root@centos8 ~]#parted /dev/sdb print
Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
[root@centos8 ~]#parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.
[root@centos8 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
[root@centos8 ~]#parted /dev/sdb mkpart primary 1 1001
Information: You may need to update /etc/fstab.
[root@centos8 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB primary
[root@centos8 ~]#parted /dev/sdb mkpart primary 1002 1102
Information: You may need to update /etc/fstab.
[root@centos8 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB primary
2 1002MB 1102MB 99.6MB primary
[root@centos8 ~]#parted /dev/sdb rm 2
Information: You may need to update /etc/fstab.
[root@centos8 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB primary
[root@centos8 ~]#parted /dev/sdb mklabel msdos
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? Y
Information: You may need to update /etc/fstab.
[root@centos8 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
[root@centos8 ~]#parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
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
help [COMMAND] print general help, or help on
COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition
table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
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
resizepart NUMBER END resize partition NUMBER
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected
device
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)
2.1.4.2 分区工具fdisk和gdisk
fdisk -l [-u] [device...] 查看分区
fdisk [device...] 管理MBR分区
gdisk [device...] 类fdisk 的GPT分区工具
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
范例
[18:55:26 root@CentOS8 ~]#fdisk /dev/sdb
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +10G
Created a new partition 1 of type 'Linux' and of size 10 GiB.
Command (m for help): p
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0x1f1731aa
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 83 Linux #主分区
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2):
First sector (20973568-104857599, default 20973568):
Last sector, +sectors or +size{K,M,G,T,P} (20973568-104857599, default 104857599): +20G
Created a new partition 2 of type 'Extended' and of size 20 GiB.
Command (m for help): p
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0x1f1731aa
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
/dev/sdb2 20973568 62916607 41943040 20G 5 Extended ##扩展分区
Command (m for help): n #逻辑分区
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (20975616-62916607, default 20975616):
Last sector, +sectors or +size{K,M,G,T,P} (20975616-62916607, default 62916607): +10G
Created a new partition 5 of type 'Linux' and of size 10 GiB.
Command (m for help): n #逻辑分区
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (41949184-62916607, default 41949184):
Last sector, +sectors or +size{K,M,G,T,P} (41949184-62916607, default 62916607):
Created a new partition 6 of type 'Linux' and of size 10 GiB.
Command (m for help): p
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0x1f1731aa
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
/dev/sdb2 20973568 62916607 41943040 20G 5 Extended
/dev/sdb5 20975616 41947135 20971520 10G 83 Linux #逻辑分区
/dev/sdb6 41949184 62916607 20967424 10G 83 Linux #逻辑分区
Command (m for help): w #保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[19:16:57 root@CentOS8 ~]#ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 Dec 1 19:16 /dev/sdb
brw-rw---- 1 root disk 8, 17 Dec 1 19:16 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Dec 1 19:16 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Dec 1 19:16 /dev/sdb5
brw-rw---- 1 root disk 8, 22 Dec 1 19:16 /dev/sdb6
gdisk范例
[19:22:18 root@CentOS8 ~]#gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.3
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): n
Partition number (1-128, default 1):
First sector (34-104857566, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-104857566, default = 104857566) 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): P
Disk /dev/sdc: 104857600 sectors, 50.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): D9AFD66E-20E1-4131-B9D1-3A9C775FD980
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 102760381 sectors (49.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
Command (? for help): W
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[19:32:51 root@CentOS8 ~]#ll /dev/sdc*
brw-rw---- 1 root disk 8, 32 Dec 1 19:32 /dev/sdc
brw-rw---- 1 root disk 8, 33 Dec 1 19:32 /dev/sdc1
[20:27:07 root@CentOS8 ~]#partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
[19:42:39 root@CentOS8 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 250G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 126.9G 0 lvm /
├─cl-swap 253:1 0 2.1G 0 lvm [SWAP]
├─cl-home 253:2 0 20G 0 lvm /home
└─cl-data 253:3 0 50G 0 lvm /data
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 10G 0 part
├─sdb2 8:18 0 1K 0 part
├─sdb5 8:21 0 10G 0 part
└─sdb6 8:22 0 10G 0 part
sdc 8:32 0 50G 0 disk
└─sdc1 8:33 0 1G 0 part
sdd 8:48 0 4.9T 0 disk
sr0 11:0 1 10.1G 0 rom
19:52:20 root@CentOS8 ~]#ll /dev/sda*
brw-rw---- 1 root disk 8, 0 Dec 1 19:42 /dev/sda
brw-rw---- 1 root disk 8, 1 Dec 1 19:42 /dev/sda1
brw-rw---- 1 root disk 8, 2 Dec 1 19:42 /dev/sda2
查看内核是否已经识别新的分区
cat /proc/partations
CentOS 7,8 同步分区表:
[20:27:07 root@CentOS8 ~]#partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
Centos6 通知内核重新读取硬盘分区表
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
#示例:
[root@centos6 ~]#partx -a /dev/sda
范例:非交互式创建分区
echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc
范例:
#增加了6,7分区
[root@centos6 ~]#fdisk /dev/sda
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource
busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
#分区表不同步
[root@centos6 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
#同步分区表
[root@centos6 ~]#partx -a /dev/sda
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
BLKPG: Device or resource busy
error adding partition 5
[root@centos6 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /data
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
├─sda6 8:6 0 2G 0 part
└─sda7 8:7 0 3G 0 part
#删除了6,7分区
[root@centos6 ~]#fdisk /dev/sda
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource
busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@centos6 ~]#
[root@centos6 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /data
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
├─sda6 8:6 0 2G 0 part
└─sda7 8:7 0 3G 0 part
#同步分区表
[root@centos6 ~]#partx -d --nr 6-7 /dev/sda
[root@centos6 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
范例: 批量创建分区
[root@centos8 ~]#echo -e 'n\np\n\n\n+1G\nw' |fdisk /dev/sdb
[root@centos8 ~]#fdisk /dev/sdb <<EOF
np+1G
w
EOF
[root@centos8 ~]#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 1G 0 part
2.2 文件系统
2.2.1 文件系统概念
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的
方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进
行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的
存取,安全控制,日志,压缩,加密等
支持的文件系统:****
/lib/modules/`uname -r`/kernel/fs
各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems
帮助:man 5 fs
2.2.2 文件系统类型
-
Linux常用文件系统
-
ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
-
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
-
ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
-
xfs:SGI,支持最大8EB的文件系统
-
swap
-
iso9660 光盘
-
btrfs(Oracle)
-
reiserfs
Windows 常用文件系统
- FAT32
- NTFS
- exFAT
Unix:
- FFS(fast)
- UFS(unix)
- JFS2
网络文件系统:
- NFS
- CIFS
集群文件系统:
- GFS2
- OCFS2(oracle)
分布式文件系统:
- fastdfs
- ceph
- moosefs
- mogilefs
- glusterfs
- Lustre
RAW:
裸文件系统,未经处理或者未经格式化产生的文件系统
常用的文件系统特性:
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的性能存储数据
查前支持的文件系统
cat /proc/filesystems
2.2.3 文件系统的组成部分
- 内核中的模块:ext4, xfs, vfat
- Linux的虚拟文件系统:VFS
- 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
2.2.4 文件系统选择管理
2.2.4.1 创建文件系统
- mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
**ext4**
**xfs**
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL' 设定卷标
- mke2fs:ext系列文件系统专用管理工具
常用选项
-t {ext2|ext3|ext4|xfs} 指定文件系统类型
-b {1024|2048|4096} 指定块 block 大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大 小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性
创建文件系统范例
[19:57:33 root@CentOS8 ~]#mkfs.ext4 /dev/sdb1
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 92bdf831-2aff-44c5-a6d4-28310dfebe58
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[20:15:48 root@CentOS8 ~]#mkfs.xfs /dev/sdb2
mkfs.xfs: /dev/sdb2 appears to contain a partition table (dos).
mkfs.xfs: Use the -f option to force overwrite.
[20:18:10 root@CentOS8 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 250G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 126.9G 0 lvm /
├─cl-swap 253:1 0 2.1G 0 lvm [SWAP]
├─cl-home 253:2 0 20G 0 lvm /home
└─cl-data 253:3 0 50G 0 lvm /data
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 10G 0 part
├─sdb2 8:18 0 1K 0 part
├─sdb5 8:21 0 10G 0 part
└─sdb6 8:22 0 10G 0 part
sdc 8:32 0 50G 0 disk
└─sdc1 8:33 0 1G 0 part
sdd 8:48 0 4.9T 0 disk
sr0 11:0 1 10.1G 0 rom
[20:18:22 root@CentOS8 ~]#mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=655232 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2620928, 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
2.2.4.2 查看和管理分区信息
blkid 可以查看块设备属性信息
格式:
[20:13:50 root@CentOS8 ~]#lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 7f2a69c1-44ed-4abc-b98b-970bdd6109be /boot
└─sda2 LVM2_member GVaWkZ-RiPu-fpWQ-VEiY-wxqK-jC3s-tTcLdr
├─cl-root xfs 4b51fc2f-594e-47e4-abda-37783b1bdf63 /
├─cl-swap swap 060d175f-b794-4b8c-b28b-39c74e22a126 [SWAP]
├─cl-home xfs 1c4060f4-a57f-4ee2-967c-ee02508fe07e /home
└─cl-data xfs 4283420e-289e-4928-980e-2cbf18ae8450 /data
sdb
├─sdb1 ext4 92bdf831-2aff-44c5-a6d4-28310dfebe58
├─sdb2
├─sdb5
└─sdb6
sdc
└─sdc1
sdd
sr0 iso9660 CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00
[20:15:34 root@CentOS8 ~]#blkid
/dev/sda1: UUID="7f2a69c1-44ed-4abc-b98b-970bdd6109be" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="6943c498-01"
/dev/sda2: UUID="GVaWkZ-RiPu-fpWQ-VEiY-wxqK-jC3s-tTcLdr" TYPE="LVM2_member" PARTUUID="6943c498-02"
/dev/sdb1: UUID="92bdf831-2aff-44c5-a6d4-28310dfebe58" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1f1731aa-01"
/dev/sdb5: PARTUUID="1f1731aa-05"
/dev/sdb6: PARTUUID="1f1731aa-06"
/dev/sdc1: PARTLABEL="Linux filesystem" PARTUUID="504e32bf-f6d2-40de-97f3-b4de25b545d0"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-13-01-04-26-00" LABEL="CentOS-8-5-2111-x86_64-dvd" TYPE="iso9660" PTUUID="5fb10f71" PTTYPE="dos"
/dev/mapper/cl-root: UUID="4b51fc2f-594e-47e4-abda-37783b1bdf63" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-swap: UUID="060d175f-b794-4b8c-b28b-39c74e22a126" TYPE="swap"
/dev/mapper/cl-home: UUID="1c4060f4-a57f-4ee2-967c-ee02508fe07e" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-data: UUID="4283420e-289e-4928-980e-2cbf18ae8450" BLOCK_SIZE="512" TYPE="xfs"
[20:18:42 root@CentOS8 ~]#lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 7f2a69c1-44ed-4abc-b98b-970bdd6109be /boot
└─sda2 LVM2_member GVaWkZ-RiPu-fpWQ-VEiY-wxqK-jC3s-tTcLdr
├─cl-root xfs 4b51fc2f-594e-47e4-abda-37783b1bdf63 /
├─cl-swap swap 060d175f-b794-4b8c-b28b-39c74e22a126 [SWAP]
├─cl-home xfs 1c4060f4-a57f-4ee2-967c-ee02508fe07e /home
└─cl-data xfs 4283420e-289e-4928-980e-2cbf18ae8450 /data
sdb
├─sdb1 ext4 92bdf831-2aff-44c5-a6d4-28310dfebe58
├─sdb2
├─sdb5 xfs 224332d1-64c7-4cbb-a3b7-a472ffb825d5
└─sdb6
sdc
└─sdc1
sdd
sr0 iso9660 CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00
[20:18:50 root@CentOS8 ~]#blkid
/dev/sda1: UUID="7f2a69c1-44ed-4abc-b98b-970bdd6109be" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="6943c498-01"
/dev/sda2: UUID="GVaWkZ-RiPu-fpWQ-VEiY-wxqK-jC3s-tTcLdr" TYPE="LVM2_member" PARTUUID="6943c498-02"
/dev/sdb1: UUID="92bdf831-2aff-44c5-a6d4-28310dfebe58" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1f1731aa-01"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-13-01-04-26-00" LABEL="CentOS-8-5-2111-x86_64-dvd" TYPE="iso9660" PTUUID="5fb10f71" PTTYPE="dos"
/dev/mapper/cl-root: UUID="4b51fc2f-594e-47e4-abda-37783b1bdf63" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-swap: UUID="060d175f-b794-4b8c-b28b-39c74e22a126" TYPE="swap"
/dev/mapper/cl-home: UUID="1c4060f4-a57f-4ee2-967c-ee02508fe07e" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-data: UUID="4283420e-289e-4928-980e-2cbf18ae8450" BLOCK_SIZE="512" TYPE="xfs"
/dev/sdb5: UUID="224332d1-64c7-4cbb-a3b7-a472ffb825d5" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="1f1731aa-05"
/dev/sdb6: PARTUUID="1f1731aa-06"
/dev/sdc1: PARTLABEL="Linux filesystem" PARTUUID="504e32bf-f6d2-40de-97f3-b4de25b545d0"
常用选项:
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs :查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
范例:
[root@centos8 ~]#findfs UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15
/dev/sda2
范例:
[root@centos8 ~]#findfs `sed -En '/data/s#^([^ ]+).*#\1#p' /etc/fstab`
/dev/sda3
tune2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L 'LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, -O ^has_journal
-o 调整文件系统的默认挂载选项,-o ^acl
-U UUID 修改UUID号
dumpe2fs命令:查看文件系统信息范例
[20:57:51 root@CentOS8 ~]#dumpe2fs -h /dev/sdb1
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 92bdf831-2aff-44c5-a6d4-28310dfebe58
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 655360
Block count: 2621440
Reserved block count: 131072
Free blocks: 2554687
Free inodes: 655349
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Dec 1 20:13:50 2022
Last mount time: n/a
Last write time: Thu Dec 1 20:57:51 2022
Mount count: 0
Maximum mount count: -1
Last checked: Thu Dec 1 20:13:50 2022
Check interval: 0 (<none>)
Lifetime writes: 4141 kB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: b4e82007-665e-470a-be1a-775e5ac32f70
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x9dd9a623
Journal features: (none)
Journal size: 64M
Journal length: 16384
Journal sequence: 0x00000001
Journal start: 0
root@localhost ~]# df <==这个命令可以叫出目前挂载的装置
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3822848 5585708 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm
[root@localhost ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name: /1 <==这个是文件系统的名称(Label)
Filesystem features: has_journal ext_attr resize_inode dir_index
filetype needs_recovery sparse_super large_file
Default mount options: user_xattr acl <==默认挂载的参数
Filesystem state: clean <==这个文件系统是没问题的(clean)
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2560864 <==inode的总数
Block count: 2560359 <==block的总数
Free blocks: 1524760 <==还有多少个 block 可用
Free inodes: 2411225 <==还有多少个 inode 可用
First block: 0
Block size: 4096 <==每个 block 的大小啦!
Filesystem created: Fri Sep 5 01:49:20 2008
Last mount time: Mon Sep 22 12:09:30 2008
Last write time: Mon Sep 22 12:09:30 2008
Last checked: Fri Sep 5 01:49:20 2008
First inode: 11
Inode size: 128 <==每个 inode 的大小
Journal inode: 8 <==底下这三个与下一小节有关
Journal backup: inode blocks
Journal size: 128M
Group 0: (Blocks 0-32767) <==第一个 data group 内容, 包含 block 的启始/结束号码
Primary superblock at 0, Group descriptors at 1-1 <==超级区块在 0 号 block
Reserved GDT blocks at 2-626
Block bitmap at 627 (+627), Inode bitmap at 628 (+628)
Inode table at 629-1641 (+629) <==inode table 所在的 block
0 free blocks, 32405 free inodes, 2 directories <==所有 block 都用完了!
Free blocks:
Free inodes: 12-32416 <==剩余未使用的 inode 号码
Group 1: (Blocks 32768-65535)
#由于数据量非常的庞大,这里省略了一部分输出信息
#可以看到,使用 dumpe2fs 命令可以查询到非常多的信息,以上信息大致可分为 2 部分。前半部分显示的是超级块的信息,包括文件系统名称、已使用以及未使用的 inode 和 block 的数量、每个 block 和 inode 的大小,文件系统的挂载时间等。
#另外,Linux 文件系统(EXT 系列)在格式化的时候,会分为多个区块群组(block group),每 个区块群组都有独立的 inode/block/superblock 系统。此命令输出结果的后半部分,就是每个区块群组的详细信息(如 Group0、Group1)。
xfs_info:显示示挂载或已挂载的 xfs 文件系统信息
xfs_info mountpoint|devname
范例:
[root@centos8 ~]#xfs_info /dev/sda5
meta-data=/dev/sda7 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
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
超级块和INODE TABLE
块组描述符表(GDT)
ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组
成块组描述符表GDT(group descriptor table)。虽然每个块组都需要块组描述符来记录块组的信息和属
性元数据,但是不是每个块组中都存放了块组描述符。将所有块组的块组信息组成一个GDT保存,并将该
GDT存放于某些块组中,类似存放superblock和备份superblock的块
2.2.4.3 文件系统检测和修复
文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean
注意:一定不要在挂载状态下执行下面命令修复
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
注意:FS_TYPE 一定要与分区上已经文件类型相同
dumpe2fs命令:查看文件系统信息范例
[20:57:51 root@CentOS8 ~]#dumpe2fs -h /dev/sdb1
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 92bdf831-2aff-44c5-a6d4-28310dfebe58
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 655360
Block count: 2621440
Reserved block count: 131072
Free blocks: 2554687
Free inodes: 655349
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Dec 1 20:13:50 2022
Last mount time: n/a
Last write time: Thu Dec 1 20:57:51 2022
Mount count: 0
Maximum mount count: -1
Last checked: Thu Dec 1 20:13:50 2022
Check interval: 0 (<none>)
Lifetime writes: 4141 kB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: b4e82007-665e-470a-be1a-775e5ac32f70
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x9dd9a623
Journal features: (none)
Journal size: 64M
Journal length: 16384
Journal sequence: 0x00000001
Journal start: 0
root@localhost ~]# df <==这个命令可以叫出目前挂载的装置
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3822848 5585708 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm
[root@localhost ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name: /1 <==这个是文件系统的名称(Label)
Filesystem features: has_journal ext_attr resize_inode dir_index
filetype needs_recovery sparse_super large_file
Default mount options: user_xattr acl <==默认挂载的参数
Filesystem state: clean <==这个文件系统是没问题的(clean)
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2560864 <==inode的总数
Block count: 2560359 <==block的总数
Free blocks: 1524760 <==还有多少个 block 可用
Free inodes: 2411225 <==还有多少个 inode 可用
First block: 0
Block size: 4096 <==每个 block 的大小啦!
Filesystem created: Fri Sep 5 01:49:20 2008
Last mount time: Mon Sep 22 12:09:30 2008
Last write time: Mon Sep 22 12:09:30 2008
Last checked: Fri Sep 5 01:49:20 2008
First inode: 11
Inode size: 128 <==每个 inode 的大小
Journal inode: 8 <==底下这三个与下一小节有关
Journal backup: inode blocks
Journal size: 128M
Group 0: (Blocks 0-32767) <==第一个 data group 内容, 包含 block 的启始/结束号码
Primary superblock at 0, Group descriptors at 1-1 <==超级区块在 0 号 block
Reserved GDT blocks at 2-626
Block bitmap at 627 (+627), Inode bitmap at 628 (+628)
Inode table at 629-1641 (+629) <==inode table 所在的 block
0 free blocks, 32405 free inodes, 2 directories <==所有 block 都用完了!
Free blocks:
Free inodes: 12-32416 <==剩余未使用的 inode 号码
Group 1: (Blocks 32768-65535)
#由于数据量非常的庞大,这里省略了一部分输出信息
#可以看到,使用 dumpe2fs 命令可以查询到非常多的信息,以上信息大致可分为 2 部分。前半部分显示的是超级块的信息,包括文件系统名称、已使用以及未使用的 inode 和 block 的数量、每个 block 和 inode 的大小,文件系统的挂载时间等。
#另外,Linux 文件系统(EXT 系列)在格式化的时候,会分为多个区块群组(block group),每 个区块群组都有独立的 inode/block/superblock 系统。此命令输出结果的后半部分,就是每个区块群组的详细信息(如 Group0、Group1)。
常用选项:
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
常用选项:
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
范例:修改破坏的ext文件系统
[root@centos8 ~]#mount /dev/sdb2 /mnt
[root@centos8 ~]#cp /etc/fstab /mnt/f1
[root@centos8 ~]#cp /etc/fstab /mnt/f2
[root@centos8 ~]#ls /mnt
f1 f2 lost+found
[root@centos8 ~]#dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00128317 s, 817 MB/s
[root@centos8 ~]#ls /mnt
[root@centos8 ~]#tune2fs -l /dev/sdb2
tune2fs 1.44.6 (5-Mar-2019)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
[root@centos8 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted
on
devtmpfs 391676 0 391676 0% /dev
tmpfs 408092 0 408092 0% /dev/shm
tmpfs 408092 5824 402268 2% /run
tmpfs 408092 0 408092 0%
/sys/fs/cgroup
/dev/sda2 104806400 4381120 100425280 5% /
/dev/sda3 52403200 398584 52004616 1% /data
/dev/sda1 999320 130848 799660 15% /boot
tmpfs 81616 0 81616 0%
/run/user/0
/dev/sdb2 73786976294838107984 73786976294836115464 1976136 100% /mnt
[root@centos8 ~]#umount /mnt
[root@centos8 ~]#e2fsck /dev/sdb2
e2fsck 1.44.6 (5-Mar-2019)
ext2fs_open2: Bad magic number in super-block
e2fsck: Superblock invalid, trying backup blocks...
test was not cleanly unmounted, check forced.
Resize inode not valid. Recreate<y>? yes
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +(98304--98560) +(163840--164096) +(229376--229632) +
(294912--295168)
Fix<y>? yes
Free blocks count wrong for group #0 (24280, counted=24281).
Fix<y>?
test: e2fsck canceled.
test: ***** FILE SYSTEM WAS MODIFIED *****
[root@centos8 ~]#e2fsck /dev/sdb2 -y
e2fsck 1.44.6 (5-Mar-2019)
test was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #0 (24280, counted=24281).
Fix? yes
Free blocks count wrong for group #1 (32511, counted=32509).
Fix? yes
Free blocks count wrong (498131, counted=498130).
Fix? yes
Free inodes count wrong for group #0 (8181, counted=8179).
Fix? yes
Free inodes count wrong (131061, counted=131059).
Fix? yes
Padding at end of inode bitmap is not set. Fix? yes
test: ***** FILE SYSTEM WAS MODIFIED *****
test: 13/131072 files (0.0% non-contiguous), 26158/524288 blocks
[root@centos8 ~]#tune2fs -l /dev/sdb2
tune2fs 1.44.6 (5-Mar-2019)
Filesystem volume name: test
Last mounted on: <not available>
Filesystem UUID: c44b3a40-70dc-44d2-8427-b8094f73940a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype
extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize
metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 131072
Block count: 524288
Reserved block count: 26214
Free blocks: 498130
Free inodes: 131059
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 255
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Apr 13 16:10:06 2020
Last mount time: n/a
Last write time: Mon Apr 13 16:57:21 2020
Mount count: 0
Maximum mount count: -1
Last checked: Mon Apr 13 16:57:21 2020
Check interval: 0 (<none>)
Lifetime writes: 130 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 8d4f1f25-ab7c-4fb2-b45d-3d23974edede
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x7f222e49
[root@centos8 ~]#mount /dev/sdb2 /mnt
[root@centos8 ~]#ls /mnt
f1 f2 lost+found
[root@centos8 ~]#cat /mnt/f1
#
# /etc/fstab
# Created by anaconda on Wed Jan 15 21:39:15 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15 / xfs
defaults 0 0
UUID=5c2216e3-ae34-444e-aa60-83cbaebb47e7 /boot ext4
defaults 1 2
UUID=9a2293a8-9277-4b18-bae1-498e0b9da145 /data xfs
defaults 0 0
UUID=eebe3bc7-6d52-4ad9-86aa-916f1a123fd4 swap swap
defaults 0 0
[root@centos8 ~]#
2.3 挂载
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入
口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空
进程正在使用中的设备无法被卸载
2.3.1 挂载文件系统 mount
格式:
device:指明要挂载的设备
- 设备文件:例如:/dev/sda5
- 卷标:-L 'LABEL', 例如 -L 'MYDATA'
- UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
- 伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint: 挂载点目录必须事先存在,建议使用空目录
mount 常用命令选项
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只读挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有
auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-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
挂载规则:
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
mount范例
[13:03:42 root@CentOS8 ~]#mount
(rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sdb1 on /mnt/sdb1 type ext4 (rw,relatime)
[13:03:47 root@CentOS8 ~]#touch /mnt/sdb1/z.txt
[13:04:15 root@CentOS8 ~]#umount /mnt/sdb1
[13:04:41 root@CentOS8 ~]#mount -o ro /dev/sdb1 /mnt/sdb1/
[13:05:12 root@CentOS8 ~]#touch /mnt/sdb1/abc.txt
touch: cannot touch '/mnt/sdb1/abc.txt': Read-only file system
[13:11:05 root@CentOS8 sdb1]#mount
/dev/sdb1 on /mnt/sdb1 type ext4 (ro,relatime)
[13:05:30 root@CentOS8 ~]#cd /mnt/sdb1/
[13:05:53 root@CentOS8 sdb1]#umount /mnt/sdb1
umount: /mnt/sdb1: target is busy.
[13:06:11 root@CentOS8 sdb1]#mount -o remount,rw /mnt/sdb1/
[13:07:02 root@CentOS8 sdb1]#mount
(rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sdb1 on /mnt/sdb1 type ext4 (rw,relatime)
[13:13:19 root@CentOS8 sdb1]#ll
total 16
-rw-r--r-- 1 root root 0 Dec 2 13:07 abc.txt
drwx------ 2 root root 16384 Dec 1 20:13 lost+found
-rw-r--r-- 1 root root 0 Dec 2 13:13 z.txt
2.3.2 卸载文件系统 umount
卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点
2.3.3 查看挂载情况
查看挂载
#通过查看/etc/mtab文件显示当前已挂载的所有设备
mount
#查看内核追踪到的已挂载的所有设备
cat /proc/mounts
查看挂载点情况
[13:13:22 root@CentOS8 sdb1]#findmnt /mnt/sdb1
TARGET SOURCE FSTYPE OPTIONS
/mnt/sdb1 /dev/sdb1 ext4 rw,relatime
查看正在访问指定文件系统的进程
[13:29:31 root@CentOS8 sdb1]#lsof /mnt/sdb1/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 63648 root cwd DIR 8,17 4096 2 /mnt/sdb1
lsof 64622 root cwd DIR 8,17 4096 2 /mnt/sdb1
lsof 64623 root cwd DIR 8,17 4096 2 /mnt/sdb1
[13:29:37 root@CentOS8 sdb1]#echo $BASHPID
63648
[13:07:38 root@CentOS8 sdb1]#fuser -v /mnt/sdb1/
USER PID ACCESS COMMAND
/mnt/sdb1: root kernel mount /mnt/sdb1
root 62537 ..c.. bash
终止所有在正访问指定的文件系统的进程
[13:22:54 root@CentOS8 ~]#fuser -km /mnt/sdb1/
/mnt/sdb1: 63737c
2.3.4 持久挂载
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
/etc/fstab格式帮助:
man 5 fstab
每行定义一个要挂载的文件系统,,其中包括共 6 项
- 要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=""
**UUID:UUID=""**
**伪文件系统名称:proc, sysfs**
- 挂载点:必须是事先存在的目录
- 文件系统类型:ext4,xfs,iso9660,nfs,none
- 挂载选项:defaults ,acl,bind
- 转储频率:0:不做备份 1:每天转储 2:每隔一天转储
- fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检 ,1:首先自检;一般只有rootfs才用 2:非rootfs使用
添加新的挂载项,需要执行下面命令生效
[13:46:20 root@CentOS8 ~]#blkid
/dev/sda1: UUID="7f2a69c1-44ed-4abc-b98b-970bdd6109be" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="6943c498-01"
/dev/sda2: UUID="GVaWkZ-RiPu-fpWQ-VEiY-wxqK-jC3s-tTcLdr" TYPE="LVM2_member" PARTUUID="6943c498-02"
/dev/sdb1: UUID="92bdf831-2aff-44c5-a6d4-28310dfebe58" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1f1731aa-01"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-13-01-04-26-00" LABEL="CentOS-8-5-2111-x86_64-dvd" TYPE="iso9660" PTUUID="5fb10f71" PTTYPE="dos"
/dev/mapper/cl-root: UUID="4b51fc2f-594e-47e4-abda-37783b1bdf63" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-swap: UUID="060d175f-b794-4b8c-b28b-39c74e22a126" TYPE="swap"
/dev/mapper/cl-home: UUID="1c4060f4-a57f-4ee2-967c-ee02508fe07e" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-data: UUID="4283420e-289e-4928-980e-2cbf18ae8450" BLOCK_SIZE="512" TYPE="xfs"
/dev/sdb5: UUID="224332d1-64c7-4cbb-a3b7-a472ffb825d5" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="1f1731aa-05"
/dev/sdb6: PARTUUID="1f1731aa-06"
/dev/sdc1: PARTLABEL="Linux filesystem" PARTUUID="504e32bf-f6d2-40de-97f3-b4de25b545d0"
[13:45:58 root@CentOS8 ~]#cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 20 09:32:28 2022
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=4b51fc2f-594e-47e4-abda-37783b1bdf63 / xfs defaults 0 0
UUID=7f2a69c1-44ed-4abc-b98b-970bdd6109be /boot xfs defaults 0 0
UUID=4283420e-289e-4928-980e-2cbf18ae8450 /data xfs defaults 0 0
UUID=1c4060f4-a57f-4ee2-967c-ee02508fe07e /home xfs defaults 0 0
UUID=060d175f-b794-4b8c-b28b-39c74e22a126 none swap defaults 0 0
UUID=224332d1-64c7-4cbb-a3b7-a472ffb825d5 /sdb5 xfs defaults 0 0
UUID=92bdf831-2aff-44c5-a6d4-28310dfebe58 /sdb1 ext4 defaults 0 0
UUID=2021-11-13-01-04-26-00 /mnt iso9660 defaults 0 0
mount -a
范例:centos7, 8 /etc/fstab 的分区UUID错误,无法启动
自动进入emergency mode,输入root 密码
#cat /proc/mounts 可以查看到/ 以rw方式挂载
#vim /etc/fstab
#reboot
范例:centos 6 /etc/fstab 的分区UUID错误,无法启动
如果/etc/fstab 的挂载设备出错,比如文件系统故障,并且文件系统检测项(即第6项为非0),将导致无
法启动
自动进入emergency mode,输入root 密码
#cat /proc/mounts 可以查看到/ 以ro方式挂载,无法直接修改配置文件
#mount -o remount,rw /
#vim /etc/fstab
将故障行的最后1项,即第6项修改为0,开机不检测此项挂载设备的健康性,从而忽略错误,能实现启动
范例:/etc/fstab格式
[root@centos8 ~]#cat /etc/fstab
UUID=cb7cae1e-d227-4f64-872b-cd6cce20c911 /data/mysql ext4 noatime
0 0
/disk.img data/disk xfs defaults
0 0
/etc /mnt/etc none bind
0 0
[root@centos6 ~]#cat /etc/fstab
/disk.img /mnt/disk ext4 loop 0 0
2.4 处理交换文件和分区
2.4.1 swap 介绍
swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据
时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过
多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露
注意:为优化性能,可以将swap 分布存放,或高性能磁盘存放
官方推荐推荐系统 swap 空间
系统中的 RAM 量 | 推荐的 swap 空间 | 允许休眠的建议 swap 空间大小 |
---|---|---|
低于 2 GB | RAM 量的2倍数 | RAM 容量的三倍 |
2 GB - 8 GB | 等于 RAM 量 | RAM 量的倍数 |
8 GB - 64 GB | 4 GB 到 RAM 容量的 0.5 倍 | RAM 容量的 1.5 倍 |
超过 64 GB | 4 GB 到 RAM 容量的 0.5 倍 | 不建议使用休眠功能 |
2.4.2 交换分区实现过程
-
创建交换分区或者文件
-
使用mkswap写入特殊签名
-
在/etc/fstab文件中添加适当的条目
-
使用swapon -a 激活交换空间
启用swap分区
swapon [OPTION]... [DEVICE]
选项:
-a:激活所有的交换分区
-p PRIORITY:指定优先级,也可在/etc/fstab 在第4列指定:pri=value
范例:创建swap分区
[root@centos8 ~]#echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdc
[root@centos8 ~]#mkswap /dev/sdc1
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f
[root@centos8 ~]#blkid /dev/sdc1
/dev/sdc1: UUID="d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f" TYPE="swap"
PARTUUID="b094d43d-01
[root@centos8 ~]#vim /etc/fstab
UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap swap defaults 0 0
[root@centos8 ~]#swapon -a
[root@centos8 ~]#free -h
total used free shared buff/cache available
Mem: 3.7Gi 264Mi 3.2Gi 9.0Mi 261Mi 3.2Gi
Swap: 4.0Gi 0B 4.0Gi
[root@centos8 ~]#cat /proc/swaps
Filename Type Size Used Priority
/dev/sda5 partition 2097148 0 -2
/dev/sdc1 partition 2097148 0 -3
禁用swap分区
swapoff [OPTION]... [DEVICE]
范例:禁用swap分区
[root@centos8 ~]#sed -i.bak '/swap/d' /etc/fstab
[root@centos8 ~]#swapoff -a
SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越高如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
范例: 修改swap分区的优先级
[root@centos8 ~]#cat /etc/fstab
#
UUID=acf9bd1f-caae-4e28-87be-e53afec61347 / xfs defaults
0 0
UUID=1770b87e-db5a-445e-bff1-1653ac64b3d6 /boot ext4 defaults
1 2
UUID=ffffd919-d674-44d9-a4e7-402874f0a1f0 /data xfs defaults
0 0
UUID=409e36d2-ac5e-423f-ad78-9b12db4576bd swap swap defaults
0 0
UUID=509ee336-6aec-48b0-b390-12c1f9889520 swap swap pri=100
0 0
范例: 以文件实现swap功能
[root@centos8 ~]#dd if=/dev/zero of=/swapfile bs=1M count=1024
[root@centos8 ~]#mkswap /swapfile
[root@centos8 ~]#blkid /swapfile >> /etc/fstab
[root@centos8 ~]#/etc/fstab
/swapfile swap swap defaults 0 0 #不要用
UUID,使用文件的路径
[root@centos8 ~]#chmod 600 /swapfile
[root@centos8 ~]#swapon -a
[root@centos8 ~]#swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 2097148 0 -2
/swapfile file 1048572 0 -3
2.4.3 swap的使用策略
/proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间
范例:
[root@centos8 ~]# cat /proc/sys/vm/swappiness
30
[root@centos7 ~]#cat /proc/sys/vm/swappiness
30
[root@rhel5 ~]# cat /proc/sys/vm/swappiness
60
说明:内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。简单地说这个参数定义了系
统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止
对swap的使用,只是最大限度地降低了使用swap的可能性
2.5 移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分,所有移动介质也需要挂载,挂载点通常
在/media 或/mnt下
访问前,介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
2.5.1 使用光盘
在图形环境下自动启动挂载/run/media//
手工挂载
mount /dev/cdrom /mnt/
操作光盘
eject #弹出光盘
eject -t #弹入光盘
创建ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc #来自于genisoimage包
刻录光盘
wodim -v -eject centos.iso
将ISO制作为U盘工具Rufus
官网: http://rufus.ie/
Rufus 是一个开源免费的快速制作 U 盘系统启动盘和格式化 USB 的实用小工具,它可以快速把 ISO 格
式的系统镜像文件快速制作成可引导的 USB 启动安装盘,支持 Windows 或 Linux 启动。Rufus 小巧玲
珑,软件体积仅 7 百多 KB,然而麻雀虽小,它却五脏俱
2.5.2 USB介质
查看USB设备是否识别
lsusb #来自于usbuntils包
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX或类似的设备文件
在图形环境中自动挂载在/run/media//
手动挂载
mount /dev/sdX# /mnt
范例:插入U盘后可以看到日志信息
[root@centos8 ~]#tail /var/log/messages -f
Apr 15 14:25:06 centos8 kernel: usb 4-1: new SuperSpeed Gen 1 USB device number
2 using xhci_hcd
Apr 15 14:25:06 centos8 kernel: usb 4-1: New USB device found, idVendor=0951,
idProduct=1666, bcdDevice= 1.10
Apr 15 14:25:06 centos8 kernel: usb 4-1: New USB device strings: Mfr=1,
Product=2, SerialNumber=3
Apr 15 14:25:06 centos8 kernel: usb 4-1: Product: DataTraveler 3.0
Apr 15 14:25:06 centos8 kernel: usb 4-1: Manufacturer: Kingston
Apr 15 14:25:06 centos8 kernel: usb 4-1: SerialNumber: AC220B280A43B03189723CA0
Apr 15 14:25:06 centos8 kernel: usb-storage 4-1:1.0: USB Mass Storage device
detected
Apr 15 14:25:06 centos8 kernel: scsi host3: usb-storage 4-1:1.0
Apr 15 14:25:06 centos8 kernel: usbcore: registered new interface driver usbstorage
Apr 15 14:25:06 centos8 kernel: usbcore: registered new interface driver uas
Apr 15 14:25:07 centos8 kernel: scsi 3:0:0:0: Direct-Access Kingston
DataTraveler 3.0 PMAP PQ: 0 ANSI: 6
Apr 15 14:25:07 centos8 kernel: sd 3:0:0:0: Attached scsi generic sg4 type 0
Apr 15 14:25:07 centos8 kernel: sd 3:0:0:0: [sdd] 60555264 512-byte logical
blocks: (31.0 GB/28.9 GiB)
Apr 15 14:25:07 centos8 kernel: sd 3:0:0:0: [sdd] Write Protect is off
Apr 15 14:25:07 centos8 kernel: sd 3:0:0:0: [sdd] Write cache: disabled, read
cache: enabled, doesn't support DPO or FUA
Apr 15 14:25:07 centos8 kernel: sdd: sdd1
Apr 15 14:25:07 centos8 kernel: sd 3:0:0:0: [sdd] Attached SCSI removable disk
Apr 15 14:30:02 centos8 systemd[1]: Started /usr/bin/systemctl start man-dbcache-update.
Apr 15 14:30:02 centos8 systemd[1]: Starting man-db-cache-update.service...
Apr 15 14:30:03 centos8 systemd[1]: Started man-db-cache-update.service.
Apr 15 14:33:21 centos8 kernel: usb 4-1: USB disconnect, device number 2
^C
[root@centos8 ~]#dmesg
[ 1861.537401] usb 4-1: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
[ 1861.551660] usb 4-1: New USB device found, idVendor=0951, idProduct=1666,
bcdDevice= 1.10
[ 1861.551663] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1861.551664] usb 4-1: Product: DataTraveler 3.0
[ 1861.551665] usb 4-1: Manufacturer: Kingston
[ 1861.551666] usb 4-1: SerialNumber: AC220B280A43B03189723CA0
[ 1861.568499] usb-storage 4-1:1.0: USB Mass Storage device detected
[ 1861.570443] scsi host3: usb-storage 4-1:1.0
[ 1861.570822] usbcore: registered new interface driver usb-storage
[ 1861.574790] usbcore: registered new interface driver uas
[ 1862.628850] scsi 3:0:0:0: Direct-Access Kingston DataTraveler 3.0 PMAP
PQ: 0 ANSI: 6
[ 1862.631979] sd 3:0:0:0: Attached scsi generic sg4 type 0
[ 1862.634222] sd 3:0:0:0: [sdd] 60555264 512-byte logical blocks: (31.0 GB/28.9
GiB)
[ 1862.636424] sd 3:0:0:0: [sdd] Write Protect is off
[ 1862.636429] sd 3:0:0:0: [sdd] Mode Sense: 45 00 00 00
[ 1862.640597] sd 3:0:0:0: [sdd] Write cache: disabled, read cache: enabled,
doesn't support DPO or FUA
[ 1862.650723] sdd: sdd1
[ 1862.656289] sd 3:0:0:0: [sdd] Attached SCSI removable disk
范例:格式化U盘为 FAT32 文件系统
[root@centos8 ~]#dnf -y install dosfstools
[root@centos8 ~]#mkfs.vfat /dev/sdd1
mkfs.fat 4.1 (2017-01-24)
[root@centos8 ~]#mount /dev/sdd1 /mnt
范例:查看USB设备
[root@centos8 ~]#yum -y install usbutils
[root@centos8 ~]#lsusb
Bus 004 Device 002: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9
G2
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
2.6 磁盘常见工具
2.6.1 文件系统空间实际真正占用等信息的查看工具 df
df [OPTION]... [FILE]...
常用选项
-H 以10为单位
-T 文件系统类型
-h human-readable
-i inodes instead of blocks
-P 以Posix兼容的格式输出
范例:
[root@centos8 ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 903M 0 903M 0% /dev/shm
tmpfs tmpfs 903M 8.7M 894M 1% /run
tmpfs tmpfs 903M 0 903M 0% /sys/fs/cgroup
/dev/sda2 xfs 100G 2.7G 98G 3% /
/dev/sda3 xfs 50G 1.4G 49G 3% /data
/dev/sda1 ext4 976M 128M 781M 15% /boot
tmpfs tmpfs 181M 0 181M 0% /run/user/0
[root@centos8 ~]#lsblk -f
NAME FSTYPE LABEL UUID
MOUNTPOINT
sda
├─sda1 ext4 5c2216e3-ae34-444e-aa60-83cbaebb47e7
/boot
├─sda2 xfs f7f53add-b184-4ddc-8d2c-5263b84d1e15 /
├─sda3 xfs 9a2293a8-9277-4b18-bae1-498e0b9da145
/data
├─sda4
├─sda5 swap eebe3bc7-6d52-4ad9-86aa-916f1a123fd4
[SWAP]
└─sda6
sdb
└─sdb1 ext4 /data/mysql cb7cae1e-d227-4f64-872b-cd6cce20c911
sdc swap a3dc8863-b7a6-462b-a8e5-72d034a442de
sr0 iso9660 CentOS-8-1-1911-x86_64-dvd 2020-01-03-21-42-40-00
范例:
[root@rhel5 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
99415464 2084776 92199220 3% /
/dev/sda1 101086 12056 83811 13% /boot
tmpfs 517536 0 517536 0% /dev/shm
[root@rhel5 ~]# df -P
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/VolGroup00-LogVol00 99415464 2084776 92199220 3% /
/dev/sda1 101086 12056 83811 13% /boot
tmpfs
2.6.2 查看某目录总体空间实际占用状态 du
显示指定目录下面各个子目录的大小,单位为KB
du [OPTION]... DIR
常用选项
-h human-readable
-s summary
--max-depth=# 指定最大目录层级
-x, --one-file-system #忽略不在同一个文件系统的目录
范例:
[root@centos8 ~]#du -sh /*
0 /bin
116M /boot
4.0K /data
0 /dev
22M /etc
24K /home
0 /lib
0 /lib64
0 /media
0 /misc
0 /mnt
0 /net
12K /opt
du: cannot access '/proc/1529/task/1529/fd/4': No such file or directory
du: cannot access '/proc/1529/task/1529/fdinfo/4': No such file or directory
du: cannot access '/proc/1529/fd/4': No such file or directory
du: cannot access '/proc/1529/fdinfo/4': No such file or directory
0 /proc
197M /root
13M /run
0 /sbin
0 /srv
0 /sys
0 /tmp
1.7G /usr
138M /var
范例:
[root@centos8 ~]#du -h -x --max-depth=1 /
22M ./etc
197M ./root
138M ./var
1.7G ./usr
24K ./home
0 ./media
0 ./mnt
12K ./opt
0 ./srv
0 ./tmp
2.1G .
大厂面试题: df 和 du 区别,什么时候df >du 什么时候df < du
目录内挂载有其它分区时的情况
当删除文件但不释放空间时,有什么不同?(du 查看文件空间释放,df不释放)
2.6.3 工具 dd
dd 命令:convert and copy a file
格式:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
常用选项
if=file 从所命名文件读取而不是从标准输入
of=file 写到所命名的文件而不是到标准输出
ibs=size 一次读size个byte
obs=size 一次写size个byte
bs=size block size, 指定块大小(既是是ibs也是obs)
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 复制n个bs
conv=conversion[,conversion...] 用指定的参数转换文件
conversion 转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
fdatasync 写完成前,物理写入输出文件
范例:
[root@centos8 ~]#cat f1.txt;
abcdef
[root@centos8 ~]#cat f2.txt
123456789
[root@centos8 ~]#dd if=f1.txt of=f2.txt bs=1 count=2 skip=3 seek=4
2+0 records in
2+0 records out
2 bytes copied, 6.6515e-05 s, 30.1 kB/s
[root@centos8 ~]#cat f2.txt
1234de[root@centos8 ~]#echo 123456789 > f2.txt
[root@centos8 ~]#cat f2.txt
123456789
[root@centos8 ~]#cat f1.txt
abcdef
[root@centos8 ~]#cat f1.txt; cat f2.txt
abcdef
123456789
[root@centos8 ~]#dd if=f1.txt of=f2.txt bs=1 count=2 skip=3 seek=4 conv=notrunc 2+0 records in
2+0 records out
2 bytes copied, 7.6153e-05 s, 26.3 kB/s
[root@centos8 ~]#cat f2.txt
1234de789
范例:
#备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 #破坏MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
#有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有
fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
#将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/dev/sdy
#将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx of=/path/to/image
#备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
dd if=/dev/sdx | gzip >/path/to/image.gz
#将备份文件恢复到指定盘
dd if=/path/to/image of=/dev/sdx
#将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
#将内存里的数据拷贝到root目录下的mem.bin文件
dd if=/dev/mem of=/root/mem.bin bs=1024
#拷贝光盘数据到root文件夹下,并保存为cdrom.iso文件
dd if=/dev/cdrom of=/root/cdrom.iso
#销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
#通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
#测试硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
#测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
练习
1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项
[17:56:33 root@CentOS8 ~]#fdisk /dev/sdd
Welcome to fdisk (util-linux 2.32.1).
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.
The size of this disk is 4.9 TiB (5368709120000 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
Created a new DOS disklabel with disk identifier 0xc4be196b.
Command (m for help): p
Disk /dev/sdd: 4.9 TiB, 5368709120000 bytes, 10485760000 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
Disklabel type: dos
Disk identifier: 0xc4be196b
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-4294967295, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-4294967294, default 4294967294): +2g
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p
Disk /dev/sdd: 4.9 TiB, 5368709120000 bytes, 10485760000 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
Disklabel type: dos
Disk identifier: 0xc4be196b
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 4196351 4194304 2G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[17:57:11 root@CentOS8 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 250G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 126.9G 0 lvm /
├─cl-swap 253:1 0 2.1G 0 lvm
├─cl-home 253:2 0 20G 0 lvm /home
└─cl-data 253:3 0 50G 0 lvm /data
sdb 8:16 0 50G 0 disk
├─sdb1 8:17 0 10G 0 part /sdb1
├─sdb2 8:18 0 1K 0 part
├─sdb3 8:19 0 2G 0 part
├─sdb5 8:21 0 10G 0 part /sdb5
└─sdb6 8:22 0 10G 0 part
sdc 8:32 0 50G 0 disk
└─sdc1 8:33 0 2G 0 part
sdd 8:48 0 4.9T 0 disk
└─sdd1 8:49 0 2G 0 part
sr0 11:0 1 10.1G 0 rom /mnt
[17:57:20 root@CentOS8 ~]#mkfs.ext4 -b 2048 -m 1 -L TEST /dev/sdd1
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 1048576 2k blocks and 131072 inodes
Filesystem UUID: 5a1d73aa-87a5-4ed3-a8cb-67da82281678
Superblock backups stored on blocks:
16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[17:59:10 root@CentOS8 ~]#blki
blkid blkiomon
[17:59:10 root@CentOS8 ~]#blkid /dev/sdd1
/dev/sdd1: LABEL="TEST" UUID="5a1d73aa-87a5-4ed3-a8cb-67da82281678" BLOCK_SIZE="2048" TYPE="ext4" PARTUUID="c4be196b-01"
[17:59:38 root@CentOS8 ~]#mkdir /test
[18:00:24 root@CentOS8 ~]#vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 20 09:32:28 2022
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=4b51fc2f-594e-47e4-abda-37783b1bdf63 / xfs defaults 0 0
UUID=7f2a69c1-44ed-4abc-b98b-970bdd6109be /boot xfs defaults 0 0
UUID=4283420e-289e-4928-980e-2cbf18ae8450 /data xfs defaults 0 0
UUID=1c4060f4-a57f-4ee2-967c-ee02508fe07e /home xfs defaults 0 0
UUID=060d175f-b794-4b8c-b28b-39c74e22a126 none swap defaults 0 0
UUID=224332d1-64c7-4cbb-a3b7-a472ffb825d5 /sdb5 xfs defaults 0 0
UUID=92bdf831-2aff-44c5-a6d4-28310dfebe58 /sdb1 ext4 defaults 0 0
UUID=2021-11-13-01-04-26-00 /mnt iso9660 defaults 0 0
UUID=8775eea9-bb7a-48f0-94ba-dd12edbfe8ed none swap pri=100 0 0
UUID=5a1d73aa-87a5-4ed3-a8cb-67da82281678 /test ext4 defaults 0 0
[18:02:14 root@CentOS8 ~]#mount -a
[18:02:30 root@CentOS8 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 452144 0 452144 0% /dev
tmpfs 482292 0 482292 0% /dev/shm
tmpfs 482292 7472 474820 2% /run
tmpfs 482292 0 482292 0% /sys/fs/cgroup
/dev/mapper/cl-root 133001780 8715444 124286336 7% /
/dev/sdb5 10473472 106264 10367208 2% /sdb5
/dev/sr0 10540998 10540998 0 100% /mnt
/dev/sdb1 10255636 36888 9678076 1% /sdb1
/dev/mapper/cl-home 20961280 179304 20781976 1% /home
/dev/mapper/cl-data 52403200 10939484 41463716 21% /data
/dev/sda1 1038336 238552 799784 23% /boot
tmpfs 96456 12 96444 1% /run/user/42
tmpfs 96456 0 96456 0% /run/user/0
/dev/sdd1 2031306 9236 1992908 1% /test
[18:02:32 root@CentOS8 ~]#
2、写一个脚本,完成如下功能:
(1) 列出当前系统识别到的所有磁盘设备
(2) 如磁盘数量为1,则显示其空间使用信息
否则,则显示最后一个磁盘上的空间使用信息
[17:49:10 root@CentOS8 ~]#cat showdisk.sh
#!/bin/bash
#================================================================
# Copyright (C) 2021 . All rights reserved.
#
# 文件名称:showDisk.sh
# 创 建 者:alex
# 创建日期:2022年12月02日
# 描 述:
#
#================================================================
DISKFILE=`lsblk | grep -Eo "^[sh]d[a-z]"`
COUNT=`lsblk | grep -Eo "^[sh]d[a-z]" | wc -l`
echo $COUNT
if (( COUNT == 1 ));then
fdisk -l "/dev/$DISKFILE"
else
fdisk -l "/dev/$( echo $DISKFILE | xargs -n 1 | tail -n 1 )"
fi
3、将CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.10-x86_64-Everything.iso文件,并将其配置为yum源
#在/mnt下创建三个文件夹:
centos1:用于挂载CentOS的第一张光盘
centos2:用于挂载CentOS的第二张光盘
centos:用于存放要生成启动盘内容
2.挂载 Centos 镜像文件,注意:根据自己iso位置
mount -o loop ./CentOS-6.10-x86_64-bin-DVD1.iso /mnt/centos1
mount -o loop ./CentOS-6.10-x86_64-bin-DVD2.iso /mnt/centos2
3.拷贝文件
#/mnt/centos/Packages 目录下:
cp -rv /mnt/centos1/. /mnt/centos/
\cp -v /mnt/centos2/Packages/*.rpm /mnt/centos/Packages/
#注意:使用.,而不是*,因为第一张光盘中有两个隐藏文件,我们平常的拷贝会胡烈隐藏文件
4.合并TRANS.TBL
将centos2中TRANS.TBL的信息追加到centos1中TRANS.TBL后面, 并排序保存
cat /mnt/centos2/Packages/TRANS.TBL >> /mnt/centos/Packages/TRANS.TBL
mv /mnt/centos/Packages/{TRANS.TBL,TRANS.TBL.BAK}
sort /mnt/centos/Packages/TRANS.TBL.BAK > /mnt/centos/Packages/TRANS.TBL
rm -f /mnt/centos/Packages/TRANS.TBL.BAK
#/mnt/centos中的内容已经是合并后的内容了,即可以用作本地源和做成ISO使用
5更新Yum列表
cd /etc/yum.repos.d
rename .repo .repo.bak *.repo
cp CentOS-Media.repo.bak CentOS-ISO.repo
vi CentOS-ISO.repo
参考内容:
[c6-iso]
name=CentOS-ISO
baseurl=file:///mnt/centos
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
yum clean all
6.安装依赖包
yum install -y createrepo
yum install -y isomd5sum
yum install -y genisoimage*
7下载mkdvdiso.sh文件
https://github.com/h2onda/mkdvdiso.sh
8.添加执行权限
chmod u+x ./mkdvdiso.sh
9.开始制作:
./mkdvdiso.sh /mnt/centos /root/CentOS-6.10-x86_64-bin-DVD-Everything.iso
10执行最后的内容
Total translation table size: 822981
Total rockridge attributes bytes: 362424
Total directory bytes: 550912
Path table size(bytes): 112
Done with: The File(s) Block(s) 1970847
Writing: Ending Padblock Start Block 1971336
Done with: Ending Padblock Block(s) 150
Max brk space used 348000
1971486 extents written (3850 MB)
Inserting md5sum into iso image...
md5 = 9bbb8667545442fadf75cb26309ae880
Inserting fragment md5sums into iso image...
fragmd5 = 5251d166e3afe62ecef98d1dad82cd5bbad2592c75ef6a1784953e8e9876
frags = 20
Setting supported flag to 0
Process Complete!
磁盘配额 quota
====================================================================================
作用: 限制用户或组对磁盘空间的使用,例如文件服务器,邮件服务器...
一、启用磁盘限额
1. 让文件系统支持配额 [ext3/4]
[root@tianyun ~]# vim /etc/fstab
/dev/vg01/lv_home /home ext4 defaults,usrquota,grpquota 1 2
[root@tianyun ~]# mount -o remount /home/
[root@tianyun ~]# mount
/dev/mapper/vg01-lv_home on /home type ext3 (rw,usrquota,grpquota)
2. 创建磁盘配额的数据库文件
注意: 建议停用SELinux
[root@nfs ~]# setenforce 0
setenforce: SELinux is disabled
[root@nfs ~]# vim /etc/selinux/config
SELINUX=disabled
[root@tianyun ~]# yum -y install quota
[root@tianyun ~]# quotacheck -acug
[root@tianyun ~]# ll /home/aquota.*
-rw------- 1 root root 12288 09-09 23:06 /home/aquota.group
-rw------- 1 root root 11264 09-09 23:06 /home/aquota.user
//-a 所有分区(已支持配额)
//-c 创建
//-u 用户
//-g 组
3.启动磁盘配额
[root@tianyun ~]# quotaon -a //启动所有分区的磁盘配额
二、日常管理
+++设置配额+++
方法一:edquota
[root@tianyun ~]# edquota -u alice
Disk quotas for user alice (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/vg01-lv_home 16 8192 10240 4 0 8
blocks: 从磁盘的使用量限制,比如限制用户使用10M,单位是k
inodes: 从创建文件数限制,比如只能建立100个文件
soft: 软限制 block 8M
hard: 硬限制 block 10M
grace time: 宽限期,默认7天 # edquota -t
[root@tianyun ~]# su - alice
[alice@tianyun ~]$ pwd
/home/alice
[alice@tianyun ~]$ dd if=/dev/zero of=file99 bs=1M count=6
6+0 records in
6+0 records out
6291456 bytes (6.3 MB) copied, 0.00549407 seconds, 1.1 GB/s
[alice@tianyun ~]$ dd if=/dev/zero of=file99 bs=1M count=9
dm-2: warning, user block quota exceeded.
9+0 records in
9+0 records out
9437184 bytes (9.4 MB) copied, 0.0113783 seconds, 829 MB/s
[alice@tianyun ~]$ dd if=/dev/zero of=file99 bs=1M count=11
dm-2: warning, user block quota exceeded.
dm-2: write failed, user block limit reached.
dd: 写入 “file99”: 超出磁盘限额
10+0 records in
9+0 records out
10440704 bytes (10 MB) copied, 0.0101768 seconds, 1.0 GB/s
[alice@tianyun ~]$ quota //查看自己的配额情况
Disk quotas for user alice (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/vg01-lv_home
10240* 8192 10240 6days 8* 0 8
方法二: setquota
# setquota -u username block软限制 block硬限制 inode软限制 inode硬限制 分区
# setquota -u jack 80000 100000 15 20 /dev/sda2
# quota jack
方法三:复制
# edquota -p alice tom robin user1 user2 user3
将alice的配额方案复制给后面所有用户
[root@nfs ~]# for i in {1..10}
> do
> useradd zhang$i
> edquota -p alice zhang$i
> done
+++查看配额+++
查看单个用户的配额: # quota jack
查看所有用户的配额: # repquota -a
# repquota -ag
普通用户查看自己配额: $ quota
扩展知识:针对组设置配额
例1:限制hr组的成员能在/home/hr目录中:100M 50文件
[root@tianyun ~]# groupadd hr
[root@tianyun ~]# useradd hr01 -G hr
[root@tianyun ~]# useradd hr02 -G hr
[root@tianyun ~]# mkdir /home/hr
[root@tianyun ~]# chgrp hr /home/hr
[root@tianyun ~]# chmod 2770 /home/hr
[root@tianyun ~]# ll -d /home/hr
drwxrws--- 2 root hr 4096 09-12 17:07 /home/hr
[root@tianyun ~]# edquota -g hr
Disk quotas for group hr (gid 507):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/vg01-lv_home 4 0 102400 1 0 50
[root@tianyun ~]# repquota -ag
====================================================================================
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)