大家好,又见面了,我是你们的朋友全栈君。
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)
示例:备份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分区
- 备份区域
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
(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 | 指定要挂载的设备上的文件系统类型 |
-r | readonly,只读挂载 |
-w | read 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
—————————————————————————————————
本文告一段落,如有错误,欢迎各位同僚指正,本人不胜感激!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140301.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...