小白成长之路-Linux磁盘管理(一)
文章目录
- 前言
- 一、磁盘介绍
- 1、磁盘的物理结构
- 1.1硬盘结构
- 1.2磁头数、磁道、柱面、扇区
- 2.CHS编号
- 2.1磁道编号规则
- 2.3扇区编号规则
- 2.3通过CHS计算硬盘容量
- 3、磁盘存储划分
- 3.1第一个扇区存储的数据
- 3.2硬盘分区
- 4.开机流程
- 5、要点
- 6、磁盘存储数据的形式
- 二、Linux文件系统
- 1、根文件系统
- 2、虚拟文件系统
- 3、真文件系统
- 3.1、ext4
- 3.2、xfs
- 4、伪文件系统
- 4.1、procfs
- 4.2、devtmpfs
- 4.3、sysfs
- 三、磁盘分区与挂载
- 1、磁盘分区方式
- MBR
- GPT
- 表示形式
- 2、分区命令
- 2.1、fdisk命令
- 2.2、parted命令
- 3、查看与识别命令
- 3.1、lsblk命令
- 3.2、partprobe命令
- 3.3、blkid命令
- 4、格式化命令
- 5、挂载命令
- 4.1、mount命令&swapon命令
- 4.2、umount命令&swapoff命令
- 四、案例流程(详细)
- 1.挂载磁盘
- 2.检查磁盘容量
- 3.分区
- 4.格式化
- 5.挂载到目录节点上
- 6.自动挂载
- 7.测试 etc/fastab
- 五、故障分析
- 1.挂载源写错
- 2.挂载点写错
- 3.文件系统写错
- 4.创建拓展磁盘无法识别
- 总结
前言
`第一部分有些分散,最终的目的是要达成第四点的几个案例
一、磁盘介绍
文件系统是Linux系统的核心,在Linux系统中,一切皆文件。对于开发者而言,编程过程中通常用到的是文件IO。在open函数打开文件,read函数读取文件的过程底层原理如何?本文件系统系列文章主要尝试针对的是这部分内容进行深入的讲解。
文件最终是存储在磁盘上,文件的存取,最终是读写磁盘。
1、磁盘的物理结构
1.1硬盘结构
其中:
- 每个盘片有两面,两面都可以存储数据。
- 每个盘面都有一个磁头,用于存取数据。
- 所有磁头都是固定的,一起做物理移动。但是每次只有一个磁头执行存取数据的任务,选择使用哪个磁头是由系统控制的。磁头间的切换非常迅速,而磁头摆动寻道则比较慢。
- 磁头摆动,找到要读取数据所在的磁道;盘片通过转动,将数据“送到”磁头下。
1.2磁头数、磁道、柱面、扇区
- 磁头数: 每个盘面都有一个磁头,因此磁头数 = 盘面数。
- 磁道: 上以盘片轴心为圆心,不同半径的同心圆称为磁道,磁道不是真正肉眼可看见的一道一道“坑”,而是被磁盘上被磁化的区域,磁道之间有一定的间隙,以免磁道之间磁介质相互影响。
- 扇区: 每个磁道被等分为若干个弧段(扇区),每个扇区可以存放512个字节的数据。扇区是磁盘驱动器向磁盘读写数据的最小单元。
- 柱面: 不同盘片半径相同的磁道组成的一个“柱面”。
2.CHS编号
所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。每个柱面、磁头、扇区都有自己的编号。
2.1磁道编号规则
- 磁头编号: 从上到下,分别为磁头0号,磁头1号…
- 柱面编号: 最外圈的柱面编号为0,往里依次递增1,2,3…
2.3扇区编号规则
每个磁道都可以被分为若干个扇区,假设有18个扇区,编号依次为1,… 18。这里的1…18在一个磁道中是唯一的,但不同磁道之间会重复。因此,要确定一个扇区在硬盘(多个盘片)中的具体位置,则需要结合柱面号/磁头号/扇区号来确定——绝对扇区编号,或者是为整个硬盘的所有扇区分配一个唯一的编号——DOS扇区编号(也称为相对扇区编号或逻辑扇区编号)。
- 绝对扇区: 由柱面号/磁头号/扇区号唯一确定。
- DOS(Disk Operating System)扇区(逻辑扇区): 磁盘操作系统为了管理方便,会将_柱面号/磁头号/扇区号_确定的扇区编号转换为易于管理和计算的单一数字编号,称为相对扇区编号或逻辑扇区编号。DOS扇区编号是从柱面0/磁头0/扇区1开始的,编号为0,依次递增,即柱面0/磁头0/扇区18的DOS扇区编号为18;柱面0/磁头1/扇区1的DOS扇区编号为19…。每个分区的第一个扇区的逻辑扇区编号为0。
2.3通过CHS计算硬盘容量
硬盘存储容量=磁头数×柱面数×每个磁道扇区数×每个扇区字节数
3、磁盘存储划分
3.1第一个扇区存储的数据
硬盘的第一个扇区(逻辑编号为0)可以说是整个硬盘最重要扇区了,它主要存储两大信息:
- 主引导分区(Master Boot Record,MBR): 存放引导加载程序,大小为446字节。
- 分区表(partition table): 记录整块硬盘分区的状态,占64字节,每一个分区信息占16个字节。
3.2硬盘分区
分区的最小单位为柱面(Cylinder),也就是说,分区其实就是指定从第几个柱面到第几个柱面属于哪个区。
假设硬盘有400个柱面,平均分为4个区(C、D、E、F盘),则第四个分区F的柱面范围是第301号到第400号柱面。
分区表中,记录的就是就是每个分区的起始柱面号和结束柱面号。因为分区表只有64字节,因此最多只能容纳4个分区的记录(硬盘默认),要想分更多的去,则需要通过扩展分区来创建逻辑分区。
4.开机流程
-
加载BIOS: BIOS(Base Input Output System,基本输入输出系统,读做/'baious/)是硬件厂商写入到主板ROM里的一个程序,电脑开机时,会最先执行BIOS。
-
MBR: BIOS在执行的过程中,会根据用户设置(即在BIOS的Boot界面选择的优先启动项,U盘/硬盘/光驱),如果硬盘的优先级最高,则计算机会从硬盘的第一个扇区的MBR中的读取引导加载程序(Boot Loader)。和BIOS一样,主引导分区MBR是硬件本身会支持的东西。
-
**引导加载程序:**引导加载程序(Boot Loader)是用于读取操作系统内核文件的一个小软件,不同的操作系统有各自的引导加载程序。每个分区都可以有自己的文件系统,有自己的引导扇区,在启动的过程中,用户可以选择是直接加载引导程序所在分区的操作系统,还是将引导加载功能交给各分区引导扇区中的加载程序。boot loader的功能主要有:
- 提供菜单:让用户选择不同的开机选项,是多重引导的重要功能。
- 载入内核文件:直接指向可开机的程序区段,开始操作系统。
- 转交其他loader: 将引导加载功能转交给其他loader负责。
-
**操作系统内核文件:**最后,引导加载程序加载操作系统的内核文件,启动操作系统!
5、要点
- 每个分区都有自己的引导扇区(boot sector)。
- 实际可开机的操作系统内核文件是存放在各个分区内的,如在C盘安装Windows系统,在D盘安装Linux操作系统。
- 引导加载程序(boot loader)只会认识自己所在分区内的可开机内核文件,以及其他boot loader(相当于一个指针,指向其他loader)。
- loader可以直接指向或者间接地将管理权交给其他loader。
- 一点经验:如果要安装多系统,最好先安装Windows,后安装Linux。因为Windows会强制覆盖MBS,也就是说,如果你先装Linux再装Windows,MBR中就只有Windows的相关选项(Linux的被覆盖掉了)。而Linux则不会强制覆盖MBR,你可以选择将Linux的引导程序安装在MBR或者其所在分区的引导扇区中;你也可以在Linux的引导程序中设置Windows的开机选项。
6、磁盘存储数据的形式
磁盘以二进制的形式存储数据。我们平时编程过程中读写文件模式可能有文本形式/二进制形式,文件也有文本文件、音频文件、图片文件…等各种不同类型的文件,但这些文件在磁盘上都是以二进制的方式存储。
可以想像一下,二进制中的0,对应磁盘上的一个“凹”点,1对应磁盘上的一个“凸”点。
二、Linux文件系统
计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
文件系统的本质:一种方便管理、组织、访问数据的软件。
- 对于管理来说,主要是磁盘空闲空间的管理
- 对于组织来说,主要是通过引入文件(inode)、树形目录(dentry)来组织用户的数据。文件包含用户的数据、树形为用户提供了一个对数据进行分类的功能。
- 对于访问来说,通过目录+文件名的方式进行文件创建、删除、读、写(也就是所谓的增、删、查、改)。
1、根文件系统
根文件系统(rootfs)是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
2、虚拟文件系统
虚拟文件系统VFS软件抽象层为用户屏蔽了底层文件系统的差异,向上层提供了统一地访问接口。
3、真文件系统
真文件系统其实是实际存储设备的文件系统,挂载于EEPROM、 Nor FLASH、 NAND FLASH、 eMMC 等存储器中。
3.1、ext4
EXT4是第四代扩展文件系统(Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,使用64位空间记录块数量和i-节点数量。
3.2、xfs
XFS最早针对IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个64位的文件系统,后来进行开源并且移植到了Linux操作系统中,目前CentOS 7将XFS+LVM作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。
4、伪文件系统
Linux内核提供了sysfs、procfs、devtmpfs等伪文件系统,**伪文件系统存在于内存,不占用硬盘。**以文件地形式向用户提供一些系统信息,用户读写这些文件就可以读取、修改系统的一些信息。
4.1、procfs
procfs是 进程文件系统的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。这个文件系统通常被挂载到 /proc 目录。
由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。
4.2、devtmpfs
devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev(udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。),缩短 GNU/Linux 的开机时间。
如果将一个设备连接到Linux系统时,通常需要一个设备驱动程序才能正常工作。此时通过设备文件或设备节点与设备驱动程序交互,这些是看起来像普通文件的特殊文件。由于这些设备文件就像普通文件一样,所以可以使用ls、cat等程序与它们交互。这些设备文件一般存放在/dev目录下。
4.3、sysfs
sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。sysfs 文件系统被挂载在 /sys 挂载点上。
Sysfs的目的是更好地管理系统上的设备,相比/dev目录无法做到这一点。Sysfs是一个虚拟文件系统,通常挂载在/sys目录下。它为我们提供了比在/dev目录中能够看到的更详细的信息。目录/sys和/dev在某些方面看起来非常相似,但它们确实有很大的不同。基本上,/dev目录很简单,它允许其他程序访问设备本身,而/sys文件系统用于查看信息和管理设备。
/sys文件系统基本上包含了系统中所有设备的所有信息,比如制造商和型号、设备插入的位置、设备的状态、设备的层次结构等等。在这里看到的文件不是设备节点,因此实际上并不是在/sys目录下与设备交互,而是在管理设备。
三、磁盘分区与挂载
磁盘热扫描:**
cd /sys/class/scsi_host
for i in `ls /sys/class/scsi_host`;do echo "- - -" > ${i}/scan;done
[root@localhost scsi_host]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 119G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 67G 0 lvm /home
sdb 8:16 0 20G 0 disk
sr0 11:0 1 9.5G 0 rom /run/media/root/CentOS 7 x86_64
1、磁盘分区方式
MBR
主引导记录,支持四个主分区或三主一扩展多个逻辑,每分区最大2TB,兼容性好。
GPT
是GUID分区表(GUID Partition Table)的缩写; 含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。 自纠错能力强,一块磁盘上主分区数量不受(4个的)限制,支持大于18EB的总容量, 几乎没有上限,最大支持到128个分区,分区大小支持到256TB。
表示形式
硬盘:
/dev/hda:hd,表示硬盘的接口为IDE
/dev/sda:sd,表示硬盘的接口为scsi;a是硬盘的编号,如:b、c.....
分区:
/dev/sda1:第一个分区
/dev/sda2:第二个分区
假如使用MBR分区方式: 四个主分区,分别是:sda1,sda2,sda3,sda4;扩展分区:有且只能有一个,并且会占用主分区编号;
逻辑分区:基于扩展分区之上;/dev/sda5
2、分区命令
2.1、fdisk命令
fdisk - Linux分区表操作工具软件
语法:
fdisk [选项] <磁盘> 更改分区表
fdisk [选项] -l <磁盘> 列出分区表
fdisk -s <分区> 给出分区大小(块数)
选项:
选项 | 作用 |
---|---|
-l | 显示系统中已安装的分区表 |
-s | 显示分区的扇区数 |
-u | 显示分区的单元号 |
-c | 检查分区表是否正确 |
-d | 显示分区表中的错误 |
-n | 显示分区的起始和结束扇区号 |
-v | 显示fdisk的版本信息 |
-m | 显示分区的媒体类型 |
-u | 指定分区的单元号 |
-o | 指定分区的文件系统编号 |
-r | 从新分区表中创建一个新的根分区 |
-L | 创建逻辑分区(可选) |
-p | 显示当前分区表的状态 |
-S | 设置分区的扇区大小(可选) |
-a | 设置分区的主引导记录(MBR)类型(可选) |
案例:
交互式分区
[root@c2407 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x41008f20 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):m
命令操作a toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partitiong create a new empty GPT partition tableG create an IRIX (SGI) partition tablel list known partition typesm print this menun add a new partitiono create a new empty DOS partition tablep print the partition tableq quit without saving changess create a new empty Sun disklabelt change a partition's system idu change display/entry unitsv verify the partition tablew write table to disk and exitx extra functionality (experts only)
#解析
a 切换可引导标志
b 编辑 bsd 磁盘标签
c 切换 dos 兼容性标志
d 删除分区
g 创建新的空 GPT 分区表
G 创建 IRIX(SGI)分区表
l 列出已知分区类型
m 打印此菜单
n 添加新分区
o 创建新的空 DOS 分区表
p 打印分区表
q 不保存更改退出
s 创建新的空 Sun 磁盘标签
t 更改分区的系统 ID
u 更改显示/输入单位
v 验证分区表
w 将表写入磁盘并退出
x 额外功能(仅限专家
#分区类型
82 Linux 交换 / So
83 Linux
8e Linux LVM
创建主分区
命令(输入 m 获取帮助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p):
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):p磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41008f20设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@c2407 ~]# 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 ├─centos-root 253:0 0 50G 0 lvm /├─centos-swap 253:1 0 2G 0 lvm [SWAP]└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part
sr0 11:0 1 1024M 0 rom
创建扩展分区
命令(输入 m 获取帮助):n
Partition type:p primary (1 primary, 0 extended, 3 free)e extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (10487808-41943039,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):
将使用默认值 41943039
分区 2 已设置为 Extended 类型,大小设为 15 GiB命令(输入 m 获取帮助):p磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41008f20设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 41943039 15727616 5 Extended
创建逻辑分区
命令(输入 m 获取帮助):n
Partition type:p primary (1 primary, 1 extended, 2 free)l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (10489856-41943039,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-41943039,默认为 41943039):+5G
分区 5 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):p磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41008f20设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 41943039 15727616 5 Extended
/dev/sdb5 10489856 20975615 5242880 83 Linux
非交互创建分区
[root@c2407 ~]# vim fdisk.txt
n
p+5G
w##################以上为文件内容######
fdisk /dev/sdb < fdisk.txt
[root@c2407 ~]# 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 ├─centos-root 253:0 0 50G 0 lvm /├─centos-swap 253:1 0 2G 0 lvm [SWAP]└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 5G 0 part
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 1024M 0 rom
2.2、parted命令
语法:
parted [options] [device [command [options...]...]]
选项:
选项 | 作用 |
---|---|
-l,–list | 列出所有块设备上的分区布局 |
-h,–help | 显示此帮助信息 |
案例:
parted /dev/sdb
#对/dev/sdb进行分区或管理操作
(parted) mklabel gpt
#定义分区表格式
#(常用的有msdos和gpt分区表格式,msdos不支持2TB以上容量的磁盘,所以大于2TB的磁盘选gpt分
区表格式)
(parted) mkpart p1
#创建第一个分区,名称为p1
#(p1只是第一个分区的名称,用别的名称也可以,如part1)
File system type? [ext2]? ext3
#定义分区格式
#(不支持ext4,想分ext4格式的分区,可以通过mkfs.ext4格式化成ext4格式)
Start? 1
#定义分区的起始位置
#(单位支持K,M,G,T)百分比
End? 5T
#定义分区的结束位置
#(单位支持K,M,G,T)百分比
(parted) print
Number Start End Size File system Name 标志
#查看当前分区情况
(parted) rm
#rm删除命令
#(删除之前必须确保分区没有被挂载)
Partition number? 1
#删除第一个分区
Number
3、查看与识别命令
3.1、lsblk命令
lsblk - list block devices
语法:
lsblk [options] [device...]
选项:
选项 | 作用 |
---|---|
案例:
[root@c2407 ~]# 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 ├─centos-root 253:0 0 50G 0 lvm /├─centos-swap 253:1 0 2G 0 lvm [SWAP]└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 5G 0 part
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 1024M 0 rom
3.2、partprobe命令
partprobe - inform the OS of partition table changes
语法:
partprobe [-d] [-s] [devices...]
选项:
选项 | 作用 |
---|---|
案例:
[root@c2407 ~]# partprobe /dev/sdb
3.3、blkid命令
查看磁盘分区的UUID
[root@c2407 ~]# blkid
/dev/mapper/centos-root: UUID="f2840324-c37b-4223-bd2c-fce06d067b06" TYPE="xfs"
/dev/sda2: UUID="42kMNt-GtE2-gNCd-bfIj-PPry-yTWY-TQ0B7r" TYPE="LVM2_member"
/dev/sda1: UUID="93d6db3e-561a-4e35-8b4d-7e8d3c9d0e91" TYPE="xfs"
/dev/sdb1: UUID="032cdca8-8800-46ef-82f3-cfa352f1ce5c" TYPE="xfs"
/dev/sdb2: UUID="5742659f-2f02-4d97-989a-31eb63c69234" TYPE="ext4"
/dev/sdb3: UUID="a33e9ee4-2d50-4e73-86c6-07f12bac0387" TYPE="swap"
/dev/mapper/centos-swap: UUID="bee55b41-0179-440b-98be-a050e8b4b70c" TYPE="swap"
/dev/mapper/centos-home: UUID="b13ce83a-ea51-4fb3-b6c9-feb1a56a282b" TYPE="xfs"
4、格式化命令
mkfs命令
用于格式化磁盘分区,生成指定的文件系统。格式化后分区中的数据将丢失!!!
语法:
mkfs [ -V ] [ -t 文件系统类型 ] [ fs-选项 ] 文件系统 [ 块 ]
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
选项:
选项 | 作用 |
---|---|
-t | 文件系统类型 |
-v | 产生冗长输出信息。帮助信息 |
案例:
1)普通文件系统格式化
#格式化为xfs文件系统
[root@c2407 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327680 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1310720, 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
#格式化为ext4文件系统
[root@c2407 ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
2)swap文件系统格式化
[root@c2407 ~]# mkswap /dev/sdb3
正在设置交换空间版本 1,大小 = 5242876 KiB
无标签,UUID=a33e9ee4-2d50-4e73-86c6-07f12bac0387
5、挂载命令
挂载源: 磁盘分区或者文件系统
挂载点: 文件系统访问的入口,通常是目录。
4.1、mount命令&swapon命令
mount - mount a filesystem,挂载一个文件系统;临时挂载,重启失效!
swapon:挂载swap文件系统
语法:
mount [-lhV]
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
mount [-fnrsvw] [-o option[,option]...] device|dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
选项:
选项 | 作用 |
---|---|
-t | 指定要挂载的文件系统类型,常见的文件系统类型有ext4、ntfs、vfat等。 |
-o | 指定挂载选项,比如可以指定只读挂载(ro)、允许所有用户挂载(user)、允许执行程序挂载(exec)等。 |
-r | 以只读模式挂载文件系统。 |
-w | 以读写模式挂载文件系统 |
-a | 挂载/etc/fstab文件中定义的所有文件系统。 |
-n | 不重新挂载/etc/fstab文件中定义的文件系统。 |
-o remount | 重新挂载一个已经挂载的文件系统,可以改变挂载选项。 |
-o loop | 挂载一个loop设备上的文件系统。 |
案例:
1)普通文件系统挂载
#临时挂载文件系统
[root@c2407 ~]# mkdir /sdb1 /sdb2
[root@c2407 ~]# mount /dev/sdb1 /sdb1
[root@c2407 ~]# mount /dev/sdb2 /sdb2
[root@c2407 ~]# 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 ├─centos-root 253:0 0 50G 0 lvm /├─centos-swap 253:1 0 2G 0 lvm [SWAP]└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part /sdb1
├─sdb2 8:18 0 5G 0 part /sdb2
├─sdb3 8:19 0 5G 0 part
└─sdb4 8:20 0 5G 0 part
sr0 11:0 1 1024M 0 rom
##文件系统没有生成或者损坏;文件系统类型不被操作系统识别。
[root@c2407 ~]# mount /dev/sdb3 /sdb3
mount: /dev/sdb3 写保护,将以只读方式挂载
mount: 文件系统类型错误、选项错误、/dev/sdb3 上有坏超级块、缺少代码页或助手程序,或其他错误有些情况下在 syslog 中可以找到一些有用信息- 请尝试dmesg | tail 这样的命令看看。
#永久挂载文件系统 :写入/etc/fstab
#挂载源 挂载点 文件系统类型 挂载参数 是否备份 是否自检
[root@c2407 ~]# cat /etc/fstab#
# /etc/fstab
# Created by anaconda on Mon Jul 29 19:04:52 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=93d6db3e-561a-4e35-8b4d-7e8d3c9d0e91 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /sdb1 xfs defaults 0 0
[root@c2407 ~]# mount -a #测试fstab中文件系统是否进行正藏挂载
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 5.1G 45G 11% /
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /sdb1
#注意:文件系统找不到,影响系统的启动。导致的故障;无法进入操作系统。
2)swap文件系统挂载
[root@c2407 ~]# swapon /dev/sdb3
[root@c2407 ~]# free -mtotal used free shared buff/cache available
Mem: 1819 475 954 10 388 1186
Swap: 7167 0 7167
[root@c2407 ~]# swapon -a #读取fstab文件中的swap文件系统进行挂载
3)挂载本地文件,如:iso镜像文件
[root@c2407 ~]# mount -o loop deepin-desktop-community-20.9-amd64.iso /mnt
mount: /dev/loop0 写保护,将以只读方式挂载
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.7G 42G 18% /
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /sdb1
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/loop0 iso9660 3.6G 3.6G 0 100% /mnt
4)挂载模拟的块设备文件
[root@c2407 ~]# dd if=/dev/zero of=./2.txt bs=100M count=1
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,0.325804 秒,322 MB/秒
##格式化
[root@c2407 ~]# mkfs.ext4 2.txt
mke2fs 1.42.9 (28-Dec-2013)
2.txt is not a block special device.
无论如何也要继续? (y,n) y
Discarding device blocks: 完成
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
##挂载
[root@c2407 ~]# mkdir /2.txt
[root@c2407 ~]# mount /root/2.txt /2.txt/
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.7G 42G 18% /
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /sdb1
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/loop0 iso9660 3.6G 3.6G 0 100% /mnt
/dev/loop1 ext4 93M 1.6M 85M 2% /2.txt
**注意:**在Rocky操作系统中,模拟的磁盘文件无法作为swap使用!!
4.2、umount命令&swapoff命令
umount - 卸载文件系统
swapoff-卸载swap文件系统
语法:
umount -a [-nrv] [-t vfstype]
umount 挂资源或者挂载点
选项:
选项 | 作用 |
---|---|
-a | 卸载所有可卸载文件系统 |
案例:
1)卸载普通文件系统
[root@c2407 ~]# umount /dev/sdb1
[root@c2407 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.8G 42G 18% /
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
/dev/sda1 xfs 1014M 185M 830M 19% /boot
/dev/mapper/centos-home xfs 147G 38M 147G 1% /home
2)swap文件系统卸载
[root@c2407 ~]# swapoff /dev/sdb3
[root@c2407 ~]# free -mtotal used free shared buff/cache available
Mem: 1819 472 957 10 388 1190
Swap: 2047 0 2047
#卸载所有swap文件系统
[root@c2407 ~]# swapoff -a
[root@c2407 ~]# free -mtotal used free shared buff/cache available
Mem: 1819 471 960 10 387 1191
Swap: 0 0 0
四、案例流程(详细)
注:挂载前现在虚拟机添加一块新的
最后一步切记点确定,否则无法添加
1.挂载磁盘
这里使用的是绝对路径,之前有相对路径,两种方法都行
前提条件是给虚拟机额外添加一块硬盘
2.检查磁盘容量
分区前先查看磁盘的容量
3.分区
创建主分区
分区创建好后输入p查看
4.格式化
5.挂载到目录节点上
只有目录能挂载,可以创建一个目录
6.自动挂载
这只是临时挂载,要想开机也能挂载
vim /etc/fstab
7.测试 etc/fastab
注:etc/fastab是开机时自动启动的文件,非常重要,一定要检测这个文件里的内容是否正确
五、故障分析
1.挂载源写错
把这个地方改成正确的
重启虚拟机会发现一直在转圈,无法启动,按Esc进入
输入密码可以暂时登录终端
根据提示输入 journalctl -xb可以进入报错日志
标红色的就是报错的地方,然后进入vim /etc/fstab修改
2.挂载点写错
3.文件系统写错
4.创建拓展磁盘无法识别
排查故障:umount /dev/sdb1
原因:当前分区后占用挂载点
总结
主要学习了Linux的挂载磁盘流程以及故障分析
以上就是今天要讲的内容,希望能帮到小伙伴们。
相关文章:
小白成长之路-Linux磁盘管理(一)
文章目录 前言一、磁盘介绍1、磁盘的物理结构1.1硬盘结构1.2磁头数、磁道、柱面、扇区 2.CHS编号2.1磁道编号规则2.3扇区编号规则2.3通过CHS计算硬盘容量 3、磁盘存储划分3.1第一个扇区存储的数据3.2硬盘分区 4.开机流程5、要点6、磁盘存储数据的形式 二、Linux文件系统1、根文…...
【Linux】第二十四章 管理网络安全
1. 防火墙在 Linux 系统安全中有哪些重要的作用? 防止未经授权的访问 网络流量过滤,常见过滤方式包括:基于 IP 地址、端口、协议类型(如 TCP、UDP)、源和目标地址等。限制流量速率、阻止来自单个IP或多个IP的高频请求保…...
【解决】SSH 远程失败之路由配置问题
开发平台:RedHat 8 一、问题描述 使用 WindTerm SSH 远程连接 192.168.88.211 虚拟主机,无法连接。 二、问题追溯 VMWare 虚拟机配置 虚拟网卡IPVMNet 模式应用网卡1(eth0)192.168.88.11/24VMNet 8服务网卡2(…...
中级网络工程师知识点9
1.在Linux中,负责配置DNS的文件是/etc/resolv.conf,包含了主机的域名搜索顺序和DNS服务器的地址 2.主域名服务器在接收到域名请求后,首先查询的是本地缓存 3.自动专用地址:169.254.X.X/16 4.FTP默认20端口,传输文件…...
网页前端开发(基础)
前端开发三件客:HTML,CSS,JavaScript。 web标准,也称网页标准,由3个组成部分。1.HTML,管理页面的元素和内容。2.CSS,负责网页的表现(页面元素的外观,位置等页面样式。如:…...
Git命令使用全攻略:从创建分支到合并的完整流程
Git命令使用全攻略:从创建分支到合并的完整流程 引言一、初始化项目与基础配置1.1 克隆远程仓库1.2 查看当前分支状态 二、创建与管理分支2.1 从main分支创建新功能分支2.2 查看分支列表2.3 提交代码到新分支2.4 推送分支到GitHub 三、版本发布与标签管理3.1 创建轻…...
边缘智能与量子计算双轮驱动:IVX 开启实时 AI 开发新维度
一、技术跃迁:量子化组件架构如何颠覆传统 AI 开发流程 在传统 AI 开发范式中,将 GPT-4o、Mediapipe 等模型集成到业务系统需要经历 "模型训练 - API 对接 - 前端适配" 的三重技术壁垒。开发团队需同时掌握 TensorFlow、Flask、React 等技术栈…...
对冲策略加仓止损盈思路
外汇交易中的对冲策略,重点在于加仓和盈利出局的策略。该策略通过多种方法来管理头寸,旨在最大化盈利并控制风险。 加仓策略 金字塔加仓法 金字塔加仓法是一种逐步增加头寸的方法。在初始头寸盈利后,以较小的手数逐步增加头寸。这种方法可以在…...
ERP生产环境索引重建:高风险操作还是性能良药?何时动手,如何操刀?
ERP系统是企业运营的核心,其数据库性能至关重要。索引作为提升查询效率的关键,其维护(尤其是重建)操作却常常让DBA和运维工程师们如履薄冰。本文将深入探讨在生产ERP环境中重建索引的潜在风险、必要性评估、最佳实践以及不同数据库的注意事项,旨在帮助技术人员做出明智决策…...
PyTorch 之 torch.distributions.Categorical 详解
PyTorch 之 torch.distributions.Categorical 详解 PyTorch 之 torch.distributions.Categorical 详解一、创建分类分布(一)基本语法(二)示例 二、采样(一)方法(二)示例 三、计算概率…...
杰发科技AC7840——如何把结构体数据写到Dflash中
1. 结构体数据被存放在Pflash中 正常情况下,可以看到全局变量的结构体数据被存放在Pflash中 数字部分存在RAM中 2. 最小编程单位 8字节编程,因此如果结构体存放在Dfalsh中,进行写操作,需要写8字节的倍数 第一种办法:…...
vue路由小案例
vue路由小案例 案例需求案例实现小结 案例需求 创建二级路由,掌握嵌套路由点击内容,根据不同id实现页面的跳转,掌握传参方式利用routerlink标签封装的类,实现高亮实现重定向,自动跳转到二级页面 案例实现 ÿ…...
链表面试题9之环形链表进阶
那么上一题我们已经知道了双指针的变法以及拓展的用法,那么这里我们直接难度升级。 想回去复习的这里放个链接:链表的面试题8之环形链表-CSDN博客 题目链接:142. 环形链表 II - 力扣(LeetCode) 我们来看这道题目主要…...
CentOS 7上BIND9配置DNS服务器指南
详细说明如何在 CentOS 7 上配置 BIND9 扮演这四种不同的 DNS 角色,包括配置文件示例和注意事项。 BIND9 可以扮演 DNS 体系中的多种角色: 权威DNS服务器 (Authoritative DNS Server): 存储特定域名(例如 example.com)的官方DNS记…...
Pytorch针对不同电脑配置详细讲解+安装(CPU)
一、前言 安装pytorch前,应按照我前边的博文中,安装完anaconda和pycharm,并且配置完环境变量以后哈。 Pytorch是什么? 它是一个库,是一个开源的机器学习框架,专注于深度学习任务,由Facebook的人工智能研…...
知识体系_数据分析挖掘_基尼系数
1 概述 基尼系数(gini coefficient)表示在全部居民收入中,用于进行不平均分配的那部分收入占总收入的百分比。社会中每个人的收入都一样、收入分配绝对平均时,基尼系数是0;全社会的收入都集中于一个人、收入分配绝对不平均时,基尼系数是1。现实生活中,两种情况都不可能发…...
Fiddler抓包教程->HTTP和HTTPS基础知识
1.简介 有的伙伴可能会好奇,不是讲解和分享抓包工具,怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fiddler无论对开发人员…...
超级维特根斯坦
AI智能体核心指令:语言智慧融合体 - 深度思辨、专业应用与协同创新大师 1. 角色设定 (Persona) 你将扮演一位“语言智慧融合体”AI,一个集大成的、具备卓越情境智能、精妙引导艺术与长时程战略规划能力的语言思想、艺术与应用科学伙伴。你的核心人格与方法论基于以下杰出贡…...
探索付费社群的成功之道:生财与群响的深度解析
随着互联网技术的发展和用户需求的多样化,付费社群作为一种新型商业模式逐渐崭露头角,并迅速成为众多创业者和个人寻求知识、资源以及人脉的重要平台。本文将深入探讨两个成功的付费社群——生财和群响,分析它们如何在各自领域内取得显著成就…...
【b站计算机拓荒者】【2025】微信小程序开发教程 - 3 项目目录结构
3 项目目录结构 3.1 项目目录结构 3.1.1 目录介绍 # 1 项目主配置文件,在项目根路径下,控制整个项目的-app.js # 小程序入口文件,小程序启动,会执行此js-app.json # 小程序全局配置文件,配置小程序导航栏颜色等信息…...
TuyaOpen横空出世!涂鸦智能如何用开源框架重构AIoT开发范式?
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引子:AIoT开发的“不可能三角”被打破 当AI与物理世界深度融合的浪潮席卷全球,开发者们却始终面临一个“不可能三角”——开发效率、技术深度与商业化落地难以兼得。 …...
物联网(IoT)智能项目全景指南:技术构架、实现细节与应用实践
目录 一、物联网项目的核心组成和发展方向 1. 核心组成 2. 发展趋势 二、系统设计的详细流程 1. 需求分析与方案规划 2. 硬件方案深度设计 3. 软件架构设计 4. 方案示意图(架构图) 三、关键技术深度剖析 1. 传感器及其接口技术 2. 嵌入式MCU选…...
【c# 类型转换中 as 和()】
在 C# 中,as 关键字和强制类型转换(())都用于对象类型的转换,但它们在语法、行为和用途上有显著的区别。 1. 语法区别 强制类型转换(()) 语法:(TargetType)expression用途:将一个…...
Elasticsearch 实战面试题,每个题目都会单独解析
Elasticsearch 在 Java 中最常用的客户端是什么?如何初始化一个 RestHighLevelClient?如何用 Spring Boot 快速集成 Elasticsearch?Spring Data Elasticsearch 如何定义实体类与索引的映射? ES的倒排索引和正排索引的区别及适用场…...
01-通过纯js理解数据驱动图表概念
现有1组一维数组数据: const data [720, 320, 531, 120, 230, 387, 258] 通过forEach循环该data,根据数据值,循环出对应长度的 rect 标签,计算好横纵坐标的位置,并在最后将各个 rect标签 append 到 svg 标签中。如图所…...
Java DTO 深度解析
一、什么是DTO? DTO(Data Transfer Object) 是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式。其核心目的是封装数据,减少网络传输开销,同时避免直接暴露领域模型&a…...
Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter
一、Python Python是一种高级、通用、解释型的开源编程语言,由Guido van Rossum于1990年代初设计。它具有以下显著特点: 1.语言特性 (1) 语法简洁易读,接近自然语言(如print(“Hello World!”)) (2) 采用强制缩进而非大括号定义代码块 (3) 支持面向对象、函数式和过…...
视频监控联网系统GB28181协议中互联结构详解
文章目录 4.1 SIP 监控域互联结构4.1.1 概述4.1.2 区域内联网4.1.3 跨区域联网4.1.4 联网方式4.1.4.1 级联4.1.4.2 互联 4.2 SIP 监控域与非 SIP 监控域互联结构4.2.1 概述4.2.2 控制协议网关4.2.3 媒体网关 智联视频超融合平台介绍 4.1 SIP 监控域互联结构 4.1.1 概述 联网系…...
系统编程的标准IO
标准IO 头文件需求: #include <stdio.h>1.fopen和fclose (1)fopen fopen的函数功能是打开一个文件。 首先看看fopen的函数声明: FILE *fopen(const char *path, const char *mode);第一个参数path是文件地址,传入的是不可变的字符…...
windows安装WS,实测可行
参考链接 1、 wsl -l -v 查看哪些ubuntu环境在运行 2、wsl -t Ubuntu 停止当前的Ubuntu 3、wsl --install -d Ubuntu-22.04 下载ubunt 4、wsl --unregister Ubuntu-22.04 移除ubuntu 5、wsl --export Ubuntu-22.04 F:\Ubuntu-22.04\Ubuntu-22.04.tar 导出 Ubuntu-22.04 为 .ta…...
【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
文章目录 T1 偏蓝 (5/5)T2 IPv6 (0/5)T3 2025 图形 (10/10)T4 最大数字 (10/10)T5 倒水 (15/15)T6 拼好数 (0/15)T7 登山 (20/20)T8 原料采购 (20/20) 更好的阅读体验 高速访问:https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久链接࿱…...
栈和队列的模拟实现
栈和队列的模拟实现 容器适配器priority_queue(优先级队列)priority_queue的使用priority_queue的模拟实现: 仿函数什么叫仿函数?需要自己实现仿函数的情况: 栈的模拟实现队列的模拟实现deque(vector和list的缝合怪&am…...
python学习day3
1比较运算符号(生成布尔类型) print(98大于90吗,98>90) print(98小于90吗,98<90) print(98等于90吗,9890) print(98不等于90吗,98!90)2逻辑运算符号 print(8>7 and 6>5) print(9>8 and 7<5) print(8<7 and 10/0) #当第一个表达式结…...
Java转Go日记(四十二):错误处理
1.1.1. 错误处理 执行任何操作后,如果发生任何错误,GORM将其设置为*DB的Error字段 if err : db.Where("name ?", "jinzhu").First(&user).Error; err ! nil {// 错误处理...}// 如果有多个错误发生,用GetErrors获…...
考研系列-408真题计算机组成原理篇(2020-2023)
写在前面 此文章是本人在备考过程中408真题计算机组成原理部分(2020年-2023年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2020年 1.机器字长相关 指令字长和机器字长没有明确的关系,但是一般来说…...
经典面试题:TCP 三次握手、四次挥手详解
在网络通信的复杂架构里,“三次握手”与“四次挥手”仿若一座无形的桥梁,它们是连接客户端与服务器的关键纽带。这座“桥梁”不仅确保了连接的稳固建立,还保障了连接的有序结束,使得网络世界中的信息能够顺畅、准确地流动。 在面…...
Raft算法学习(1)博士论文大纲
参考资料 原文一共257页,其中前六章为算法重点介绍,第七章有点像A/B TEST 论文标题: 共识:连接理论与实践 (CONSENSUS: BRIDGING THEORY AND PRACTICE) 作者: Diego Ongaro 日期: 2014年8月 机构ÿ…...
PDF处理控件Aspose.PDF教程:以编程方式将 PDF 导出为 JPG
在本节中,我们将探讨如何使用 Aspose.PDF 库将 PDF 文档转换为 JPG 图像。Aspose.PDF 是一个功能强大且用途广泛的库,专为需要以编程方式处理 PDF 文件的开发人员而设计。它提供了丰富的功能,可用于跨多个平台创建、编辑和转换 PDF 文档。其主…...
记录一下flutter项目自己封窗的弹窗
在评委项目开发中我使用到的弹窗dialog与modal sheet底部弹出组件,我对其进行了基础的封装,以适用于本项目,代码如下: class JudgeDialog {// 内容边距static EdgeInsetsGeometry _contentPadding(String? content) {return c…...
计算机网络基础概念
网络通信的本质就是进程间通信。我们日常使用的聊天软件、在线视频软件等,事实上都是本机客户端进程与远地服务端进程之间进行网络通信所实现的。我们与朋友进行远程聊天,本质上是从本地客户端将聊天内容发送给服务端,再由服务端转发给目标客…...
【原创】ubuntu22.04下载编译AOSP 15
repo init -u http://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b master source build/envsetup.sh lunch aosp_cf_x86_64_phone-trunk_staging-userdebug find ./ -name “index.lock” -exec rm -f {} ; find ./ -name “index.lock” -exec rm -i {} ;…...
鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局
华为在5月19日发布会上推出的两款鸿蒙电脑新品——华为MateBook Pro和HUAWEI MateBook Fold 非凡大师,标志着其在PC领域的深度布局和技术突破。结合发布会信息和行业背景,以下为分析及影响预测: 一、产品核心亮点及创新 华为MateBook Pro&…...
数据要素如何重构人力资本升级
一、数字经济时代 在传统工厂车间,老师傅的经验智慧曾是企业最宝贵的资产。而在现代的数字化办公室,每天产生的千万条数据流正在重塑企业创新规则。这个变革的核心密码锁定在两个关键维度:人力资本结构的质变与创新资源的智配。 数据要素与…...
【爬虫】12306自动化购票
上文: 【爬虫】12306查票-CSDN博客 下面是简单的自动化进行抢票,只写到预定票,没有写完登陆, 跳出登陆后与上述代码同理修改即可。 感觉xpath最简单,复制粘贴: 还有很多写法: 官网地址&#…...
保密行业工作沟通安全:吱吱软件的“四重防泄露”设计
“工作沟通安全威胁是指在金融、科技、医疗等保密行业中,错发、泄露、窃取一条消息或者一份文件,都有可能引发数据安全灾难性失控。以往的即时通讯软件仅依赖单一的加密手段,无法满足保密行业从发送、传输到接受全链路加密的更高规格的数据安…...
2001-2023年上市公司管理讨论与分析文本数据(MDA文本数据)
2001-2023年上市公司管理讨论与分析文本数据(MD&A文本数据) 1、时间:2001-2023年 2、来源:上市公司年报 3、格式:txt 4、样本量:6W 5、说明:“管理层讨论与分析”(MANAGEME…...
Unity3D仿星露谷物语开发46之种植/砍伐橡树
1、目标 种植一棵橡树,从种子变成大树。 然后可以使用斧头砍伐橡树。 2、删除totalGrowthDays字段 修改growthDays的含义,定义每个值为到达当前阶段的累加天数。此时最后一个阶段就是totalGrowthDays的含义。所以就可以删除totalGrowthDays字段。 &…...
9-社区动态(Stack布局)
涉及知识点: stack布局 video组件 3.组件状态控制: State、Prop以及Link装饰器 组件状态控制:Observed&ObjectLink装饰器 课时: 2 1 任务 1.1 需求 完成社区动态功能,社区动态显示用户发布的跟游戏相关的短视频,自动循环…...
如何使用MATLAB NLP工具箱进行文本聚类
文章目录 前言一、核心流程与代码实现二、高级聚类技术三、评估聚类质量四、实战案例:新闻聚类五、优化技巧与注意事项 前言 在 MATLAB 中使用 NLP 工具箱进行文本聚类主要分为数据预处理、特征提取、相似度计算、聚类算法应用和结果分析五个核心步骤。以下是详细教…...
deepseek梳理java高级开发工程师es面试题
Elasticsearch 面试题及答案(高级 Java 开发工程师版) 基础概念 1. 解释 Elasticsearch 中的倒排索引是什么?为什么它比传统数据库更适合全文搜索? 答案: 倒排索引是一种将文档中的词项(token)映射到包含该词项的文…...