/etc/fstab 文件学习systemd与该文件关系
文章目录
- 一、文件字段
- 1.1、设备标识
- 1.2、挂载点
- 1.3、文件系统类型
- 1.4、挂载选项
- 1.5、dump
- 1.5、fsck顺序
- 二、/etc/fstab 与systemd 的关系
- 2.1、/etc/fstab 与systemd 的关系
- 2.2、systemd 之前/etc/fstab生效过程
- 2.3、systemd 时代/etc/fstab生效过程
- 三、相关知识
- 3.1、如何更具UUID 确定文件设备名?</u>
- 3.2、如何生成UUID?
- 3.3、文件系统格式化
- 3.4、swap 分区和swap文件的创建
- 参考文档
/etc/fstab
文件是 Linux 系统中用于定义和管理文件系统的挂载信息的配置文件,决定了系统启动时如何挂载文件系统。这个文件包含了系统中所有需要在启动时
自动挂载的文件系统的条目。如下:
# <文件系统> <挂载点> <文件系统类型> <选项> <dump> <fsck顺序>
UUID=123456789 / ext4 defaults 1 1
/dev/sda2 /boot ext4 defaults 1 2
/dev/sda3 none swap sw 0 0
/dev/sdb1 /var/log ext4 nosuid 0 0
/dev/sdb2 /var/lib ext4 defaults 0 0
LABEL=docker /var/lib/docker ext4 defaults,noatime,nodiratime,prjquota 0 0
一、文件字段
字段 | 含义 |
---|---|
设备标识(file systems ) | 可以是设备名(如 /dev/sda1)、UUID、LABEL 或者其他标识符。 |
挂载点(dir ) | 文件系统将被挂载到的目录路径。 |
文件系统类型(type ) | 如 ext4, xfs, nfs 等。 |
挂载选项(options ) | 如 defaults, ro (只读), rw (读写) 等。 |
备份选项(dump ) | 用于 dump 命令的参数,0 表示不备份。 |
文件系统检查顺序(pass ) | 用于 fsck 命令的参数,0 表示不检查。 |
1.1、设备标识
- 可以使用设备文件名、UUID或者标签,也可以是NFS等远程文件系统。
- 远程文件系统配置方式是
<host>:<dir>
,与直接使用mount命令挂载远程文件系统是一致的。 - 使用物理设备名或分区名,如 /dev/sdb1,表示第一个硬盘的第一个分区.
- UUID和LABEL配置方式是
LABEL=<label>
或者UUID=<uuid>
三种方式优缺点
UUID
是一个 128 位的数字,用于唯一标识文件系统。每个文件系统在格式化时都会生成一个唯一的 UUID。
优点:
- 唯一性:UUID 是全局唯一的,不会因为设备顺序或名称的变化而改变。
- 稳定性:即使磁盘顺序或设备文件名发生变化,UUID 也不会改变,因此更稳定。
缺点:
- 可读性差:UUID 是一串较长的字符串,不容易记忆和识别。
- 适用场景:适用于需要高稳定性和唯一性的环境,尤其是在多磁盘或多分区的系统中
设备文件名
是指设备在系统中的路径,例如 /dev/sda1 或 /dev/vda1。
优点:
- 易读性:设备文件名较短且易于理解,方便管理员识别。
缺点:
- 不稳定性:设备文件名可能会因为磁盘顺序变化、磁盘更换或系统重启等原因而改变。
- 依赖硬件:如果硬件配置发生变化(如添加或移除磁盘),设备文件名可能会发生变化。
- 适用场景:适用于单磁盘或简单的系统配置,或者在不需要高度稳定性的环境中。
LABEL
是用户为文件系统指定的一个标签,可以在格式化文件系统时设置。
优点:
- 可读性好:LABEL 可以是任意的字符串,便于管理员理解和记忆。
- 灵活性:可以为多个文件系统设置相同的 LABEL,但通常建议每个文件系统的 LABEL 是唯一的。
缺点:
- 非唯一性:LABEL 不是全局唯一的,如果多个文件系统设置了相同的 LABEL,可能会导致混淆。
- 依赖用户设置:需要在格式化文件系统时正确设置 LABEL,否则无法使用。
- 适用场景:适用于需要良好可读性和灵活性的环境,特别是在多磁盘或多分区的系统中,可以通过有意义的 LABEL 来标识文件系统。
1.2、挂载点
文件系统挂载的位置,即它在目录树中的路径。挂载点可以是任何一个空目录;如果是swap ,挂载点 通常是 none,因为 swap 不需要实际的挂载点,文件系统类型 是 swap,并且 选项 通常包括 sw(表示启用 swap)。
如下:
# Swap 分区:
/dev/sdb2 none swap sw 0 0# Swap 文件:
/swapfile none swap sw 0 0
1.3、文件系统类型
文件系统类型字段指定了挂载点所使用的文件系统类型,此字段告诉操作系统在挂载时应该使用哪种文件系统驱动来读取和写入数据。常见文件系统类型如下:
文件系统类型 | 说明 |
---|---|
ext4 | 第四代扩展文件系统,广泛用于 Linux 系统 |
xfs | 高性能的日志文件系统,适用于大容量存储 |
btrfs | 具有高级功能(如快照、池化)的现代文件系统 |
nfs | 网络文件系统,用于通过网络共享文件 |
vfat | 支持 FAT32 文件系统的驱动 |
ntfs | 支持 NTFS 文件系统的驱动 |
tmpfs | 临时文件系统,存储在内存中 |
swap | 交换分区 |
1.4、挂载选项
挂载选项字段用于指定文件系统在挂载时的行为。这些选项可以控制文件系统的读写权限、日志记录、性能优化等方面。常见挂载选项及其含义如下:
挂载选项 | 含义 | 示例 |
---|---|---|
defaults | 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async | /dev/sda1 /mnt/data ext4 defaults 0 2 |
auto | 在启动时或键入了 mount -a 命令时自动挂载。(默认) | /dev/sda1 /mnt/data ext4 auto 0 2 |
noauto | 只在你的命令下被挂载。 | /dev/sda1 /mnt/data ext4 noauto 0 2 |
exec | 允许执行此分区的二进制文件。 | /dev/sda1 /mnt/data ext4 exec 0 2 |
noexec | 不允许执行此文件系统上的二进制文件。 | /dev/sda1 /mnt/data ext4 noexec 0 2 |
ro | 以只读模式挂载文件系统。 | /dev/sda1 /mnt/data ext4 ro 0 2 |
rw | 以读写模式挂载文件系统。 | /dev/sda1 /mnt/data ext4 rw 0 2 |
user | 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec, nosuid, nodev 参数。 | /dev/sda1 /mnt/data ext4 user 0 2 |
users | 允许所有 users 组中的用户挂载文件系统. | /dev/sda1 /mnt/data ext4 users 0 2 |
nouser | 只能被 root 挂载。(默认) | /dev/sda1 /mnt/data ext4 nouser 0 2 |
owner | 允许设备所有者挂载. | /dev/sda1 /mnt/data ext4 owner 0 2 |
sync | I/O 同步进行。每次写操作都会立即写入磁盘,保证数据完整性但会降低性能。 | /dev/sda1 /mnt/data ext4 sync 0 2 |
async | I/O 异步进行。写操作可能会延迟写入磁盘,提高性能但可能有数据丢失的风险(默认) | /dev/sda1 /mnt/data ext4 async 0 2 |
dev | 解析文件系统上的块特殊设备。允许将文件系统中的设备文件解释为设备节点(默认) | /dev/sda1 /mnt/data ext4 dev 0 2 |
nodev | 不解析文件系统上的块特殊设备。 | /dev/sda1 /mnt/data ext4 nodev 0 2 |
suid | 允许 suid 操作和设定 sgid 位。允许设置用户 ID 和组 ID 位(默认),这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。 | /dev/sda1 /mnt/data ext4 suid 0 2 |
nosuid | 禁止 suid 操作和设定 sgid 位。禁止设置用户 ID 和组 ID 位 | /dev/sda1 /mnt/data ext4 nosuid 0 2 |
noatime | 不更新文件系统上 inode 访问记录,可以提升性能。 | /dev/sda1 /mnt/data ext4 noatime 0 2 |
nodiratime | 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。 | /dev/sda1 /mnt/data ext4 nodiratime 0 2 |
relatime | 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能。更新文件的访问时间戳,但只有当文件的修改时间戳或状态时间戳发生变化时才更新访问时间戳。 | /dev/sda1 /mnt/data ext4 relatime 0 2 |
flush | 主要用于 NFS(Network File System)文件系统。这个选项的作用是确保数据在写入时被立即刷新到服务器上,从而提高数据的一致性和可靠性。 | 192.168.1.100:/exports/data /mnt/nfs nfs defaults,flush 0 0 |
nofail | 即使设备在启动时不可用,系统仍会继续正常启动,不会中断或进入应急模式。此时,系统只会记录设备挂载失败的错误信息,但不会影响整体启动过程 | /dev/sda1 /mnt/data ext4 nofail 0 2 |
x-systemd.automount | 指定在访问挂载点时自动挂载。文件系统在首次访问时(例如用户尝试访问 /mnt/usb 目录时)才会自动挂载。此选项避免了系统启动时挂载失败的问题,因为它只在需要时挂载 | /dev/sda1 /mnt/data ext4 x-systemd.automount 0 2 |
comment | 忽略此条目,用于注释 | /dev/sda1 /mnt/data ext4 comment 0 2 |
loop | 指定该设备是一个循环设备 | /path/to/file.img /mnt/loop ext4 loop 0 2 |
offset | 指定循环设备的偏移量 | /path/to/file.img /mnt/loop ext4 loop,offset=1024 0 2 |
size | 指定循环设备的大小 | /path/to/file.img /mnt/loop ext4 loop,size=1024 0 2 |
discard | 启用 TRIM 支持,用于 SSD | /dev/sda1 /mnt/data ext4 discard 0 2 |
x-systemd.device-timeout | 指定等待设备出现的超时时间 | /dev/sda1 /mnt/data ext4 x-systemd.device-timeout=10 0 2 |
x-systemd.requires | 指定挂载前需要启动的服务 | /dev/sda1 /mnt/data ext4 x-systemd.requires=network-online.target 0 2 |
x-systemd.idle-timeout | 指定在没有活动时自动卸载的时间 | /dev/sda1 /mnt/data ext4 x-systemd.idle-timeout=1min 0 2 |
bind | 绑定挂载,将一个目录挂载到另一个目录 | /path/to/source /path/to/target none bind 0 0 |
remount | 重新挂载已经挂载的文件系统 | /dev/sda1 /mnt/data ext4 remount 0 2 |
mand | 强制执行强制锁 | /dev/sda1 /mnt/data ext4 mand 0 2 |
nomand | 禁用强制锁。 | /dev/sda1 /mnt/data ext4 nomand 0 2 |
iversion | 启用 inode 版本号。 | /dev/sda1 /mnt/data ext4 iversion 0 2 |
nobarrier | 禁用屏障支持,提高性能但可能降低数据完整性。 | /dev/sda1 /mnt/data ext4 nobarrier 0 2 |
barrier | 启用屏障支持,提高数据完整性但可能降低性能。 | /dev/sda1 /mnt/data ext4 barrier 0 2 |
data | 控制数据写入方式,如 writeback, ordered, journal。 | /dev/sda1 /mnt/data ext4 data=writeback 0 2 |
errors | 控制文件系统错误处理方式,如 continue, remount-ro, panic。 | /dev/sda1 /mnt/data ext4 errors=remount-ro 0 2 |
acl | 启用访问控制列表。 | /dev/sda1 /mnt/data ext4 acl 0 2 |
noacl | 禁用访问控制列表。 | /dev/sda1 /mnt/data ext4 noacl 0 2 |
usrquota | 启用用户配额。 | /dev/sda1 /mnt/data ext4 usrquota 0 2 |
grpquota | 启用组配额。 | /dev/sda1 /mnt/data ext4 grpquota 0 2 |
prjquota | 启用项目配额。 | /dev/sda1 /mnt/data ext4 prjquota 0 2 |
inode64 | 启用 64 位 inode 支持。 | /dev/sda1 /mnt/data ext4 inode64 0 2 |
bigalloc | 启用大块分配。 | /dev/sda1 /mnt/data ext4 bigalloc 0 2 |
stripe | 指定 RAID 条带宽度。 | /dev/sda1 /mnt/data ext4 stripe=256 0 2 |
delalloc | 延迟分配。 | /dev/sda1 /mnt/data ext4 delalloc 0 2 |
nodelalloc | 禁用延迟分配。 | /dev/sda1 /mnt/data ext4 nodelalloc 0 2 |
logbufs | 指定日志缓冲区数量。 | /dev/sda1 /mnt/data ext4 logbufs=16 0 2 |
logbsize | 指定日志块大小。 | /dev/sda1 /mnt/data ext4 logbsize=256k 0 2 |
1.5、dump
dump 字段是用于指定文件系统备份策略的一个字段。这个字段的值是一个数字,通常用于与 dump 命令配合使用,以决定哪些文件系统需要备份以及备份的频率。
- 这个字段的值是一个整数,范围从 0 到 9。
- 0: 表示该文件系统不需要被 dump 命令备份。
- 1-9: 表示该文件系统的备份优先级。数字越小,优先级越高。例如,1 表示高优先级,9 表示低优先级。
UUID=1234-5678 / ext4 defaults 0 1
UUID=8765-4321 /home ext4 defaults 1 2
UUID=abcd-efgh /data xfs noatime,nodiratime 0 0
1.5、fsck顺序
fsck 顺序字段(也称为 pass 字段)用于指定文件系统检查工具 fsck 在系统启动时检查文件系统的顺序。
- 这个字段的值是一个整数,通常取值为 0、1 或 2。
- 0: 表示该文件系统不需要在启动时进行 fsck 检查。
- 1: 表示该文件系统是根文件系统(通常是 /),并且需要在启动时首先进行检查。
- 2: 表示该文件系统不是根文件系统,但在启动时需要进行检查。这些文件系统会在根文件系统检查之后按顺序进行检查。
二、/etc/fstab 与systemd 的关系
2.1、/etc/fstab 与systemd 的关系
- 兼容性:systemd 完全支持 /etc/fstab 文件,并且会在系统启动时读取并处理其中的条目。这意味着你可以在 /etc/fstab 中定义的文件系统仍然会被 systemd 自动挂载。
- 动态挂载:systemd 提供了更灵活的挂载机制,例如 systemd-automount 单元,可以在需要时动态挂载文件系统。这些单元可以由用户或系统事件触发,而不是仅在系统启动时挂载。
- 单位文件:systemd 使用 .mount 和 .automount 单位文件来定义文件系统的挂载行为。这些单位文件可以手动创建,也可以通过 systemd-fstab-generator 从 /etc/fstab 自动生成。
- 优先级:如果你在 /etc/fstab 和 systemd 单位文件中都定义了相同的挂载点,systemd 会优先使用单位文件中的配置。这允许你覆盖 /etc/fstab 中的设置,以实现更复杂的挂载行为。
2.2、systemd 之前/etc/fstab生效过程
在传统的 init 系统中,/etc/fstab 的处理主要由以下几个步骤完成:
- 读取和解析 /etc/fstab:
系统启动时,init 进程会读取并解析 /etc/fstab 文件,获取所有需要挂载的文件系统条目。 - 执行 mount -a 命令:
init 进程会调用 mount -a 命令来挂载 /etc/fstab 中定义的所有文件系统。-a 选项表示挂载所有在 /etc/fstab 中定义的文件系统。 - 处理挂载选项:
mount 命令会根据 /etc/fstab 中定义的选项来挂载每个文件系统。例如,如果某个文件系统被标记为 noauto,则它不会在启动时自动挂载。 - 根文件系统挂载:
根文件系统(通常是 /)会在早期启动阶段由内核或 initrd(初始 RAM 磁盘)进行挂载。/etc/fstab 中定义的其他文件系统会在根文件系统挂载后进行挂载。 - 错误处理:
如果某个文件系统无法挂载,mount 命令会记录错误信息,并继续尝试挂载其他文件系统。具体的错误处理行为可能会因系统配置而异。
2.3、systemd 时代/etc/fstab生效过程
systemd 通过其内置的生成器和单元文件机制来处理 /etc/fstab 中的条目,确保这些文件系统在系统启动时被正确挂载。以下是 systemd 时代 /etc/fstab 生效的具体过程:
-
systemd-fstab-generator:
systemd 使用 systemd-fstab-generator 工具来读取 /etc/fstab 文件,并根据其中的条目生成相应的 .mount 和 .automount 单元文件。这些单元文件会被放置在 /run/systemd/generator 目录下。.mount
单元文件:
定义了文件系统的挂载点、类型和选项。
例如,对于 /etc/fstab 中的一个条目:
UUID=1234-5678 /mnt/data ext4 defaults 0 2
会生成一个类似如下的单元文件/run/systemd/generator/mnt-data.mount
:[Unit] Description=Mount for /mnt/data[Mount] What=/dev/disk/by-uuid/1234-5678 Where=/mnt/data Type=ext4 Options=defaults[Install] WantedBy=multi-user.target
.automount
单元文件:
如果 /etc/fstab 中的条目包含 x-systemd.automount 选项,systemd 会生成一个 .automount 单元文件,用于延迟挂载(即在访问挂载点时才挂载)。
例如,对于以下条目:
UUID=1234-5678 /mnt/data ext4 x-systemd.automount 0 2
会生成一个类似如下的单元文件/run/systemd/generator/mnt-data.automount
:[Unit] Description=Automount for /mnt/data[Automount] Where=/mnt/data[Install] WantedBy=multi-user.target
-
单元文件的加载
生成的.mount
和.automount
单元文件会被 systemd 加载并激活。systemd 会在启动过程中根据这些单元文件来挂载或自动挂载文件系统。 -
挂载过程
- 自动挂载 (x-systemd.automount):
如果启用了自动挂载,systemd 会在访问挂载点时才挂载文件系统。例如,当第一次访问 /mnt/data 时,systemd 会触发挂载操作。
自动挂载可以减少启动时间,因为文件系统不会在启动时立即挂载,而是在需要时才挂载。 - 立即挂载:
如果没有启用自动挂载,systemd 会在启动过程中立即挂载文件系统。
这些挂载点通常由local-fs.target
或multi-user.target
等目标单元管理。
- 自动挂载 (x-systemd.automount):
-
错误处理
如果某个文件系统无法挂载,systemd 会记录错误信息,并继续尝试挂载其他文件系统。
你可以通过 journalctl 查看详细的日志信息,以诊断挂载失败的原因
三、相关知识
3.1、如何更具UUID 确定文件设备名?
$ cat /etc/fstab
UUID=f0d8224f-6cba-426a-a091-b70024003f95 /boot ext4 defaults 1 2$ lsblk -f | grep f0d8224f-6cba-426a-a091-b70024003f95
└─vda1 ext4 f0d8224f-6cba-426a-a091-b70024003f95 /boot
可知 此设备文件名为/dev/vda1
3.2、如何生成UUID?
设备文件的 UUID(Universally Unique Identifier)是在文件系统格式化时生成的。每个文件系统在格式化时都会生成一个唯一的 UUID,以确保其在全球范围内的唯一性。
- 生成 UUID 的过程–格式化文件系统:
当你使用 mkfs 命令或其他文件系统工具格式化一个分区或磁盘时,UUID 会自动生成。例如,使用mkfs.ext4
命令格式化一个分区时,UUID 会自动分配给该文件系统。 - UUID 生成算法:
UUID 通常是通过特定的算法生成的,这些算法旨在确保生成的 UUID 在全球范围内是唯一的。常见的 UUID 生成算法包括基于时间戳、随机数和硬件 MAC 地址
等。 - 存储 UUID:
生成的 UUID 会被存储在文件系统的超级块中,这是一个包含文件系统元数据的区域。你可以使用 blkid 或 lsblk 等命令来查看文件系统的 UUID。
3.3、文件系统格式化
文件系统格式化是一个将磁盘或分区初始化为特定文件系统类型的过程。格式化会创建文件系统的结构,包括超级块、inode 表、数据块等,并分配 UUID 和其他元数据。
格式化过程:
- 创建超级块:超级块包含文件系统的元数据,如文件系统的大小、状态信息、UUID 等。
- 创建 inode 表:inode 是文件系统中用于存储文件元数据的数据结构,如文件权限、所有者、时间戳等。
- 创建数据块:数据块用于存储实际的文件数据。
- 分配 UUID:生成并分配一个唯一的 UUID 给文件系统。
- 写入其他元数据:如位图、日志等,用于文件系统的管理和维护。
常见文件系统类型:
- ext4:Linux 系统常用的文件系统。
- NTFS:Windows 系统常用的文件系统。
- FAT32:跨平台兼容性较好的文件系统,但有单文件大小限制。
- XFS:适用于大文件和高性能需求的文件系统。
- Btrfs:具有高级功能(如快照、校验和)的现代文件系统。
格式化的时机
- 首次使用:通常在新磁盘或分区首次使用时进行格式化。
- 重新格式化:当需要更改文件系统类型或修复严重损坏的文件系统时,可能会重新格式化。
- 恢复出厂设置:某些情况下,恢复设备到出厂设置时会进行格式化。
机器每次启动都会格式化文件系统吗?
不会。机器每次启动时不会自动进行文件系统格式化。格式化是一个破坏性的操作,会删除磁盘上的所有数据。
检查和修复:在某些情况下,操作系统可能会在启动时检查文件系统的完整性,并在发现错误时尝试修复。例如:
fsck
(File System Consistency Check):在 Linux 系统中,fsck 工具会在启动时检查和修复文件系统错误。chkdsk
(Check Disk):在 Windows 系统中,chkdsk 工具可以检查和修复文件系统错误。
3.4、swap 分区和swap文件的创建
创建 Swap 分区
假设你已经有一个未使用的分区 /dev/sdb2,你可以将其设置为 swap 分区:
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2
然后在 /etc/fstab 中添加以下条目:
/dev/sdb2 none swap sw 0 0
创建 Swap 文件
假设你想创建一个 2GB 的 swap 文件 /swapfile,你可以按以下步骤操作:
- 创建空文件:
sudo fallocate -l 2G /swapfile
- 设置适当的权限:
sudo chmod 600 /swapfile
- 将文件设置为
swap:sudo mkswap /swapfile
- 启用 swap 文件:
sudo swapon /swapfile
- 在 /etc/fstab 中添加条目:
/swapfile none swap sw 0 0
- 验证 Swap 配置:
sudo swapon --show
参考文档
1、https://juejin.cn/post/7259354549165178941
2、https://blog.csdn.net/peng2hui1314/article/details/142675349
3、https://www.ctyun.cn/zhishi/p-216081
4、https://blog.csdn.net/szembed/article/details/126933883
相关文章:
/etc/fstab 文件学习systemd与该文件关系
文章目录 一、文件字段1.1、设备标识1.2、挂载点1.3、文件系统类型1.4、挂载选项1.5、dump1.5、fsck顺序 二、/etc/fstab 与systemd 的关系2.1、/etc/fstab 与systemd 的关系2.2、systemd 之前/etc/fstab生效过程2.3、systemd 时代/etc/fstab生效过程 三、相关知识3.1、如何更具…...
springcloud基础
一 SpringCloud简介 1.1 SpringCloud是什么 SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFli…...
全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式
目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...
HTML+CSS+JS制作汽车网站(内附源码,含5个页面)
一、作品介绍 HTMLCSSJS制作一个汽车网站,包含首页、新车发布页、预约试驾页、最新资讯页、品牌故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部导航栏 包含logo、主导航菜单(首页、新车、二…...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Windows EXE文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Windows可执行文件(EXE),从而显著提…...
微软开源GraphRAG的使用教程-使用自定义数据测试GraphRAG
微软在今年4月份的时候提出了GraphRAG的概念,然后在上周开源了GraphRAG,Github链接见https://github.com/microsoft/graphrag,截止当前,已有6900Star。 安装教程 官方推荐使用Python3.10-3.12版本,我使用Python3.10版本安装时,在…...
C++ 中的字面量类型定义
在 C 中,字面量类型(Literal Type)是指可以作为字面量使用的类型。字面量是指代码中直接写出的常量值,比如整数 42、浮点数 3.14、字符串 "hello" 等。而字面量类型则是支持创建这些字面量的类型。 C 中的字面量类型定…...
LeetCode:101. 对称二叉树
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输…...
Docker Compose 配置指南
目录 1. Docker Compose 配置1.1 基本配置结构1.2 docker-compose.yml 的各部分1.3 常用配置选项 2. Docker Compose 使用方法2.1 创建 Docker Compose 配置文件2.2 启动服务2.3 查看容器状态2.4 查看服务日志2.5 停止服务2.6 重新构建服务 3. Docker Compose 常用命令3.1 dock…...
【Linux开发工具】自动化构建-make/Makefile
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux开发工具】gcc和g 🔖流水不争,争的是滔滔不 一、make和Makefile简介1.1 什么是…...
VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)
名人说:一点浩然气,千里快哉风。—— 苏轼《水调歌头》 创作者:Code_流苏(CSDN) 目录 一、Python环境安装二、VScode下载及安装三、VSCode配置Python环境四、运行测试五、背景图设置 很高兴你打开了这篇博客,更多详细的安装教程&…...
Python 异步协程:从 async/await 到 asyncio 再到 async with
在 Python 3.8 以后的版本中,异步编程变得越来越重要。本文将系统介绍 Python 标准库中的异步编程工具,带领大家掌握 async/await 语法和 asyncio 的使用。 从一个简单的场景开始 假设我们在处理一些耗时的 I/O 操作,比如读取多个文件或处理…...
矩阵-向量乘法的行与列的解释(Row and Column Interpretations):中英双语
本文是学习这本书的笔记 网站是:https://web.stanford.edu/~boyd/vmls/ 矩阵-向量乘法的行与列的解释 矩阵-向量乘法(Matrix-Vector Multiplication)是线性代数中的基本操作,也是机器学习、数据科学和工程中常用的数学工具。本文…...
针对超大规模病理图像分析!华中科技大学提出医学图像分割模型,提高干燥综合征诊断准确性
口干、眼干、皮肤干,每天伴有不明原因的肌肉酸痛和全身乏力,如果以上症状你「中招」了,除了考虑冬季天气干燥外,还应该警惕一种常见却总是被我们忽视的疾病——干燥综合征 (Sjgren’s Syndrome, SS)。 干燥综合征是以外分泌腺高度…...
混合开发环境---使用编程AI辅助开发Qt
文章目录 [toc]1、说明2、演示视频 1、说明 新时代的浪潮早就已经来临,上不了船的人终将被抛弃,合理使用AI辅助开发、提升效率是大趋势 注意:不要被AI奴隶 合理使用AI辅助编程,十倍提升效率。 大部分的编程AI都有vs code插件&…...
Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…...
[前端]HTTP库Axios
一、Axios简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它是一个流行的 JavaScript 库,用于发起 HTTP 请求,如 GET、POST、DELETE 等。Axios 提供了易于使用的 API,支持请求和响应的拦截、转换数据格…...
Excel中index()函数
函数功能概述 INDEX 函数用于返回表格或区域中的值或对值的引用。它可以根据指定的行和列的位置从一个单元格区域中提取数据。这个函数有两种形式:数组形式和引用形式。语法结构(数组形式) INDEX(array, row_num, column_num)array࿰…...
linux-----文件命令
文件和目录的基本概念 文件类型: 普通文件:这是最常见的文件类型,用于存储数据,如文本文件、二进制文件等。文本文件可以用文本编辑器打开并查看内容,二进制文件则包含机器可执行的代码或其他特定格式的数据。目录文件…...
lua dofile 传参数
cat 1.lua arg[1] 111 arg[2] 222 dofile(./2.lua) cat 2.lua print("First argument is: " .. arg[1]) print("Second argument is: " .. arg[2]) 执行 lua 1.lua,结果为: First argument is: 111 Second argument is: 222 l…...
【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?
要在 Windows 上编译 etcd 及 etcdctl 工具,并使用 bat 脚本启动 etcd 集群,首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤: 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...
重温设计模式--备忘录模式
文章目录 备忘录模式(Memento Pattern)概述定义: 作用:实现状态的保存与恢复支持撤销 / 恢复操作 备忘录模式UML图备忘录模式的结构原发器(Originator):备忘录(Memento)&…...
如何借助边缘智能网关实现厂区粉尘智能监测告警
在诸如木制品加工、纺织品加工、塑料橡胶制品加工等多种工业生产场景中,粉尘问题的隐患和风险不可小觑。如果缺少对生产环境中粉尘的监测和管理,可能发生易燃易爆、环境污染和工人尘肺等生产事故。 针对工业场景中的粉尘状况监测、管理及预警,…...
解析mysqlbinlog
一、前置设置 ps -ef | grep mysql 查看mysql进程对应的安装目录 需设置mysql binlog日志模式为 ROW 二、执行命令 [rootlocalhost bin]# mysqlbinlog --verbose --base64-outputdecode-rows /usr/local/mysql/data/binlog.000069 > 1.sql 查看文件具体内容...
【gym】理解gym并测试gym小游戏CartPole (一)
一、gym与文件位置的联合理解 import gym import inspect# 加载 CliffWalking 环境 env gym.make(CliffWalking-v0)# 获取环境的类 env_class type(env)# 获取环境类所在的文件路径 file_path inspect.getfile(env_class)print(f"The source code for CliffWalking-v0…...
【jvm】内存泄漏的8种情况
目录 1. 说明2. 静态集合类持有对象引用3. 单例模式4. 内部类持有外部类5. 未关闭的连接6. 变量不合理的作用域7. 改变对象的哈希值8. 缓存Cache泄漏9. 监听器和回调 1. 说明 1.内存泄漏(Memory Leak)指的是程序中动态分配的内存由于某种原因没有被释放…...
android:sharedUserId 应用进程声明介绍
背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…...
WPSJS:让 WPS 办公与 JavaScript 完美联动
随着办公自动化需求的日益增长,WPS Office 推出了 WPSJS,这是一款强大的开发者工具,允许开发者通过 JavaScript 脚本与 WPS 办公软件进行互动。无论是在表格中自动填充数据、在文档中修改格式,还是在演示文稿中插入动态内容&#…...
【Linux进程】进程间通信(共享内存、消息队列、信号量)
目录 前言 1. System V IPC 2. 共享内存 系统调用接口 shmget ftok shmat shmdt shmctl 共享内存的读写 共享内存的描述对象 3. 消息队列 msgget msgsnd msgctl 消息队列描述对象 4. 信号量 系统调用接口 semget semctl 信号量描述对象 5. 系统层面IPC资源 6.…...
负载均衡的原理
负载均衡(Load Balancing)是一种计算机技术,用于在多个服务器、网络连接、计算资源之间合理分配工作负载,以提升应用程序的可用性、性能和可扩展性,以下是详细介绍: 工作原理 流量分配:负载均衡…...
Flash Attention
op融合 原始方法: 痛点:多次读取、写入显存。 解决:中间结果不保存,1个kernel顺序算完多个操作。 反向传播时用到这些中间结果要求导,怎么办? 答:类似activation checkpointing,重新…...
Craft CMS 模板注入导致 Rce漏洞复现(CVE-2024-56145)(附脚本)
0x01 产品描述: Craft CMS 是一个灵活且强大的内容管理系统(CMS),专为创意团队和开发人员设计,提供高度可定制、直观且性能优越的网站和内容管理解决方案。它以用户友好的界面、强大的插件生态系统以及支持现代web开发最佳实践的特性而闻名0x02 漏洞描述: 由于模板…...
步进电机位置速度双环控制实现
步进电机位置速度双环控制实现 野火stm32电机教学 提高部分-第11讲 步进电机位置速度双环控制实现(1)_哔哩哔哩_bilibili PID模型 位置环作为外环,速度环作为内环。设定目标位置和实际转轴位置的位置偏差,经过位置PID获得位置期望,然后讲位置期望(位置变化反映了转轴的速…...
Sigrity Optimize PI CapGen仿真教程文件路径
为了方便读者能够快速上手和学会Sigrity Optimize PI和 Deacap Generate 的功能,将Sigrity Optimize PI CapGen仿真教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171471?spm1001.2014.3001.5503...
open Feign日志输出
openFeign默认是没有日志输出的,只有在open Feign所在的包的级别达到debug才会有输出,而且级别有四级。 四种日志级别: OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级: NON…...
进程间关系与守护进程
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 进程间关系与守护进程 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 进程组 什…...
C++设计模式:组合模式(公司架构案例)
组合模式是一种非常有用的设计模式,用于解决**“部分-整体”**问题。它允许我们用树形结构来表示对象的层次结构,并且让客户端可以统一地操作单个对象和组合对象。 组合模式的核心思想 什么是组合模式? 组合模式的目的是将对象组织成树形结…...
ubuntu 安装docker
Step1:更新系统软件包 sudo apt update Step2:安装依赖包【用于通过HTTPS来获取仓库】 sudo apt install apt-transport-https ca-certificates curl software-properties-common Step3:添加Docker官方GPG密钥 sudo -i curl -fsSL https://…...
PSDK的编译与ROS包封装
本文档讲述在NIVIDIA开发板上使用大疆提供的Payload SDK获取无人机实时GPS信息的方法,以及基于Payload SDK发布ROS GPS话题信息的方法。 文章目录 0 实现目标1 Payload SDK1.1 PSDK 源码的编译1.2 PSDK 的使用 2 遥测数据的读取2.1 示例代码结构2.2 读取机载GPS信息…...
【工作流】工作顺序
背景 当时的情况是:没有产品经理,后端直接和需求方对接;前端只能短时间投入大部分时间要忙别的;只有3个角色:需求方,后端,前端; 当时直接执行的 直接使用会议了解需求,…...
Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉
遇到问题: 从今年开始,不知道咋回事,电脑上的Unity2017像是变了个人似得,突然特别爱闪退掉,有时候还次次闪退,真是让人无语,一直以来我都怀疑是不是电脑上安装了什么别的软件了,导致…...
Java基础面试题20:Java语言sendRedirect()和forward()方法有什么区别?
Java基础面试题:Java语言sendRedirect()和forward()方法有什么区别? 在 Java Web 开发中,sendRedirect() 和 forward() 是两个非常常用的方法,但它们有一些核心区别。我们来用最简单的方式给你解释清楚。 一、sendRedirect() 和 …...
2、光同步数字传送网的特点
同步复用 光同步数字传送网(SDH)采用同步复用方式。它将多个低速信号复用成高速信号,与准同步数字体系(PDH)的异步复用不同。在 SDH 中,各支路信号与复用后的高速信号是同步的,这种同步复用的方…...
3.4 stm32系列:定时器(PWM、定时中断)
一、定时器概述 1.1 软件定时原理 使用纯软件(CPU死等)的方式实现定时(延时)功能; 不精准的延迟: /* 微秒级延迟函数* 不精准* stm32存在压出栈过程需要消耗时间* 存在流水线,执行时间不确定…...
【环境搭建】Python、PyTorch与cuda的版本对应表
一个愿意伫立在巨人肩膀上的农民...... 在深度学习的世界里,选择合适的工具版本是项目成功的关键。CUDA、PyTorch和Python作为深度学习的三大支柱,它们的版本匹配问题不容忽视。错误的版本组合可能导致兼容性问题、性能下降甚至项目失败。因此࿰…...
【经验总结】AUTOSAR架构下基于TJA1145收发器偶发通信丢失不可恢复问题分析
目录 前言 正文 1.问题描述 2.尝试问题复现 3.尝试问题定位 4.直接原因 5.总结 前言 在《【CAN通信】TJA1145收发器重要功能介绍》一文中我们详细介绍了TJA1145收发器的重点内容,最近在开发测试过程中就遇到了一个CAN通信丢失且不可恢复的偶发问题,解决该问题的思路和…...
帝国CMS:如何去掉帝国CMS登录界面的认证码登录
如果在安装的时候,不小心选中了认证码选项,那么后面登录帝国后台都会要求输入认证码才能登录,如何去除这个设置呢,笔者以古诗词网 www.gushichi.com为例,为大家举例说明! 去除步骤如下: 1.前往…...
CTF入门:单主机渗透——flag_XEE的常规思路
学习通过技术手段获取目标主机中预置的5个flag值。 在kali操作机中打开终端,然后使用nmap工具对目标机器进行端口扫描: nmap -sT 192.168.12.26 访问80端口。 网站首页是一个登录框,在界面上有一个提示的标签“弱口令”,说…...
Note2024122303_Code2Docu插件使用
Note2024122303_Code2Docu插件初使用V1.0 step1: 安装 跳转链接 文档阅读:下载文档阅读。 根据文档内容,大概知道首先下载并安装插件: 资料说明和安装方式: 意思是: 下载文件后直接运行 Code2Docu_Installati…...
深度学习之目标检测篇——残差网络与FPN结合
特征金字塔多尺度融合特征金字塔的网络原理 这里是基于resnet网络与Fpn做的结合,主要把resnet中的特征层利用FPN的思想一起结合,实现resnet_fpn。增强目标检测backone的有效性。代码实现如下: import torch from torch import Tensor from c…...