linux入门4.5(NFS服务器和iSCSI服务器)

文章目录

NFS 服务器详细介绍与总结

一、NFS 服务基础认知

(一)核心定义与功能

NFS,即 Network File System(网络文件系统),最早由 Sun 公司开发,是专为 UNIX&Linux 系统设计的磁盘文件共享技术。其核心功能是通过网络,让不同主机系统实现文件或目录的共享。NFS 客户端(多为 web 等应用服务器)可通过 "挂载(mount)" 操作,将 NFS 服务端的共享数据目录挂载到本地系统的指定挂载点。从客户端本地视角看,服务端的共享目录如同自身的磁盘分区或目录,实际却存储在远端的 NFS 服务端。

(二)企业应用场景

在企业集群架构中,NFS 主要用于存储视频、图片、附件等静态资源文件。例如,网站用户上传的 BBS 图片、附件、头像等,会集中存放在 NFS 共享目录中,尤其在中小网站公司应用频率极高。

(三)端口与 RPC 的关联

NFS 支持功能丰富,不同功能需启动不同程序,且会随机使用未被占用的小于 1024 的端口传输数据,导致客户端难以直接获取服务端端口。此时需依赖RPC(远程过程调用)服务

  • RPC 的核心作用是注册 NFS 各功能对应的端口,并将端口信息汇报给客户端,确保客户端能连接到正确端口。
  • RPC 定义了进程间网络交互通信机制,允许客户端进程向远程服务进程请求服务,无需了解服务器底层通信协议细节。

(四)工作原理

  1. NFS 服务器:负责 "导出" 文件系统目录及其内容,即开放指定目录供客户端访问。
  2. NFS 客户端:将服务器导出的文件系统挂载到本地,之后通过本地文件访问方式操作远端共享目录。

二、NFS 服务器部署流程(以 RHEL8 为例)

复制代码
配置服务的正常流程:
1. 安装软件包
2. 准备服务用到的各种材料,例如用户、目录等
3. 配置服务器(修改配置文件)
4. 启用并启动服务
5. 配置防火墙
6. 客户端测试
bash 复制代码
# 1. 安装软件包
[root@server ~ 10:12:03]# yum install -y nfs-utils

# 2. 准备服务用到的各种材料,例如用户、目录等
[root@server ~ 10:14:00]# mkdir -p /shares/webapp
[root@server ~ 10:30:10]# echo 'hello myfriend' > /shares/webapp/index.html

# 客户端nginx用户的UID为998,客户端nginx用户可以读写该目录
[root@server ~ 10:30:49]# chown 998 /shares/webapp

# 3. 配置服务器(修改配置文件)
配置文件位置 /etc/exports /etc/exports.d/*.exports

配置文件格式:
共享目录  客户端1(共享选项1) 客户端2(共享选项2)

参数说明:
- 共享目录:需要共享的目录
- 客户端:可以是单个主机,例如10.1.8.11,也可以是网段10.1.8.0/24,还可以主机名*.laoma.cloud
- 共享选项:控制共享方式,例如,rw读写共享,ro只读共享

[root@server ~ 10:31:05]# vim /etc/exports.d/*.exports
[root@server ~ 10:32:53]# cat /etc/exports.d/*.exports
/shares/webapp 10.1.8.0/24(rw)

# 4. 启用并启动服务
[root@server ~ 10:32:59]# systemctl enable nfs-server.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@server ~ 10:33:23]# systemctl is-active nfs-server.service 
active
# 5. 配置防火墙
[root@server ~ 10:33:40]# systemctl is-active firewalld.service 
unknown

三、配置客户端

bash 复制代码
# 1. 准备web服务器
[root@client ~ 10:11:57]# yum install -y nginx
[root@client ~ 10:34:59]# id nginx
uid=997(nginx) gid=995(nginx) 组=995(nginx)
[root@client ~ 10:35:34]# systemctl enable nginx.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

# 2. 安装NFS客户端
[root@client ~ 10:36:16]# yum install -y nfs-utils

# 3. 查看共享并挂载
[root@client ~ 10:37:01]# showmount -e 10.1.8.10
Export list for 10.1.8.10:
/shares/webapp 10.1.8.0/24
[root@client ~ 10:37:40]# mount 10.1.8.10:/shares/webapp /usr/share/nginx/html
[root@client ~ 10:38:14]# df -h /usr/share/nginx/html
文件系统                  容量  已用  可用 已用% 挂载点
10.1.8.10:/shares/webapp   50G  1.6G   49G    4% /usr/share/nginx/html

# 4. 测试web服务器页面
[root@server ~ 10:33:55]# curl 10.1.8.11
hello myfriend
bash 复制代码
# 5. 持久化挂载
[root@client ~ 10:38:29]# vim /etc/fstab
# 最后添加一条记录
10.1.8.10:/shares/webapp /usr/share/nginx/html nfs defaults        0 0

# 6. 重启服务器验证
[root@client ~ 11:11:42]# reboot

连接断开
连接主机...
连接主机成功
Last login: Fri Sep 26 10:11:57 2025 from 10.1.8.1
[root@client ~ 11:12:08]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Sep  2 10:18:35 2025
#
# 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=cf9a0e0b-ff82-40a3-b1ff-58226e3bcb6e /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
10.1.8.10:/shares/webapp /usr/share/nginx/html  nfs     defaults        0 0

[root@server ~ 10:38:45]# curl 10.1.8.11
hello myfriend

挂载选项补充说明:
客户端的root对于服务器端来说 啥也不是。
默认情况,服务端共享的目录,客户端的root是只具备other用户的权限。
默认共享选项包含root_squash,压缩root权限为nobody。
可以使用选项no_root_squash

iSCSI 服务器详细介绍与总结

一、iSCSI 服务基础认知

(一)核心定义与本质

  • SCSI 基础:SCSI(Small Computer System Interface,小型计算机系统接口)是计算机与智能设备(硬盘、光驱、打印机等)的连接标准,用于实现设备间的数据传输。

  • iSCSI 定义:iSCSI(Internet Small Computer System Interface,互联网小型计算机系统接口),又称 IP SAN,由 IBM 公司研发,是将传统 SCSI 接口与以太网技术结合的 IP SAN 技术。它基于 TCP/IP 协议封装 SCSI 数据包,实现 iSCSI 服务端(Target)与客户端(Initiator)的网络连接,最终让服务端为客户端提供远程存储资源。

  • 性能与安全特性

    • 性能:通常需使用专用 10Gb 以太网或更高速网络,以最大化传输性能;SAN 流量默认不加密(因传输环境多为封闭数据中心内网),减少加密对性能的损耗。
    • 安全:若需通过 WAN 传输,可借助 IPsec 对流量加密,保障数据安全。

(二)核心架构与组件

iSCSI 采用 C/S(客户端 - 服务端)架构,客户端访问的 iSCSI 目标在本地会显示为未格式化的 SCSI 块设备,与本地直连存储设备操作逻辑一致。其核心组件及功能如下:

组件 定义与功能 关键说明
Initiator(发起者) iSCSI 客户端,负责向服务端请求存储资源 多以软件形式部署,也可使用硬件 HBA(iSCSI Host Bus Adapters);必须拥有唯一 IQN 标识
Target(目标) iSCSI 服务端的存储资源载体 需拥有唯一 IQN 标识;每个 Target 可提供一个或多个块设备(LUN),一台服务器可部署多个 Target
IQN(iSCSI Qualified Name) 全球唯一的命名标识,用于区分 Initiator 和 Target 格式:iqn.YYYY-MM.com.reversed.domain:name_string,其中 "YYYY-MM" 为创建年月(确保唯一性),"reversed.domain" 为反向域名(如 server.redhat.fun 对应 cloud.laoma.www),"name_string" 为自定义标识(可省略)
Portal(门户) 服务端监听存储请求的 IP 地址与端口 默认端口 3260,格式如 "10.1.8.10:3260",用于客户端与服务端建立连接
LUN(Logical Unit Number) Target 提供的逻辑块设备 每个 Target 可关联一个或多个 LUN,客户端通过访问 LUN 使用实际存储资源
ACL(Access Control List) 访问控制列表 通过 Initiator 的 IQN 限制客户端对 Target 的访问,仅允许授权 IQN 的客户端连接
TPG(Target Portal Group) Target 的完整配置集合 包含 Portal、LUN、ACL 等配置,多数场景下一个 Target 对应一个 TPG,高级配置可多 TPG
Discovery(发现) 客户端查询服务端 Target 列表的过程 客户端通过此操作获取可连接的 Target 信息,为后续登录做准备
Login(登录) 客户端向 Target 进行身份验证的过程 验证通过后,客户端可正常使用 Target 提供的块设备

二、iSCSI Target(服务端)配置流程

bash 复制代码
# 1. 安装软件包
[root@server ~ 11:12:18]# yum install -y targetcli targetd

# 2. 启用并启动服务
[root@server ~ 11:28:32]# systemctl enable target --now
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.

# 3. 准备共享块设备
server端添加一个200G SATA接口硬盘
创建分区1 100G 空间分享给客户端
[root@server ~ 11:29:05]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0   47G  0 lvm  /home
sdb               8:16   0  200G  0 disk 
sr0              11:0    1  4.4G  0 rom  
[root@server ~ 11:29:08]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.
[root@server ~ 11:29:36]# parted /dev/sdb unit MiB mkpart dbapp 1 10241
信息: You may need to update /etc/fstab.

# 4. 配置共享块存储
[root@server ~ 13:51:18]# targetcli                                       
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

#  /backstores 提供后端存储
#  /iscsi 配置如何共享后端存储


##  后端存储添加块设备
/> /backstores/block create dev=/dev/sdb1 name=db01
Created block storage object db01 using /dev/sdb1.
/> ls /backstores/block/
o- block ................................................... [Storage Objects: 1]
  o- db01 ......................... [/dev/sdb1 (100.0GiB) write-thru deactivated]
    o- alua .................................................... [ALUA Groups: 1]
      o- default_tg_pt_gp ........................ [ALUA state: Active/optimized]
      

##  配置如何共享后端存储

# 创建target,后续客户端 会扫描 target
target名称使用IQN来表示
不管是客户端还是服务端都通过IQN来表示自己。      
/> /iscsi/ create iqn.2025-09.cloud.wsf.server.x8664:db
Created target iqn.2025-09.cloud.wsf.server.x8664:db.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/> ls /iscsi/
o- iscsi ........................................................... [Targets: 1]
  o- iqn.2025-09.cloud.wsf.server.x8664:db ............................ [TPGs: 1]
    o- tpg1 .............................................. [no-gen-acls, no-auth]
      o- acls ......................................................... [ACLs: 0]
      o- luns ......................................................... [LUNs: 0]
      o- portals ................................................... [Portals: 1]
        o- 0.0.0.0:3260 .................................................... [OK]
 
# 切换相应目录
/> cd /iscsi/iqn.2025-09.cloud.wsf.server.x8664:db/tpg1/
/iscsi/iqn.20...x8664:db/tpg1> ls
o- tpg1 .................................................. [no-gen-acls, no-auth]
  o- acls ............................................................. [ACLs: 0]
  o- luns ............................................................. [LUNs: 0]
  o- portals ....................................................... [Portals: 1]
    o- 0.0.0.0:3260 ........................................................ [OK]
    
# 配置放行客户端(iqn.2025-09.cloud.wsf.server.x8664:db)
4/iscsi/iqn.20...x8664:db/tpg1> acls/ create iqn.2025-09.cloud.wsf.server.x8664:b
Created Node ACL for iqn.2025-09.cloud.wsf.server.x8664:db
/iscsi/iqn.20...x8664:db/tpg1> acls/ create iqn.2025-09.cloud.wsf.server.x8664:webapp
Created Node ACL for iqn.2025-09.cloud.wsf.server.x8664:webapp

# 验证配置
/iscsi/iqn.20...x8664:db/tpg1> ls
o- tpg1 .................................................. [no-gen-acls, no-auth]
  o- acls ............................................................. [ACLs: 2]
  | o- iqn.2025-09.cloud.wsf.server.x8664:db ................... [Mapped LUNs: 0]
  | o- iqn.2025-09.cloud.wsf.server.x8664:webapp ............... [Mapped LUNs: 0]
  o- luns ............................................................. [LUNs: 0]
  o- portals ....................................................... [Portals: 1]
    o- 0.0.0.0:3260 ........................................................ [OK]
/iscsi/iqn.20...x8664:db/tpg1> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
[root@server ~ 13:54:14]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.


# 配置客户端可以访问的设备
/iscsi/iqn.20...x8664:db/tpg1> luns/ create /backstores/block/db01 
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2025-09.cloud.wsf.server.x8664:webapp
Created LUN 0->0 mapping in node ACL iqn.2025-09.cloud.wsf.server.x8664:db


# 退出配置
/iscsi/iqn.20...x8664:db/tpg1> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json

三、配置客户端

bash 复制代码
# 1. 安装软件包
[root@client ~ 14:19:24]# yum install -y iscsi-initiator-utils

# 2. 设置客户端的IQN
[root@client ~ 14:29:23]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2025-09.cloud.wsf.server.x8664:webapp
[root@client ~ 14:15:05]# systemctl restart iscsid

# 3. 扫描目标
[root@client ~ 14:16:00]# iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2025-09.cloud.wsf.server.x8664:db
选项说明:
-m discovery 发现模式
-t st 找target(sendtarget)
-p 10.1.8.10 服务地址

# 4. 挂载设备
[root@client ~ 14:16:21]# iscsiadm -m node -T iqn.2025-09.cloud.wsf.server.x8664:db -l
Logging in to [iface: default, target: iqn.2025-09.cloud.wsf.server.x8664:db, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2025-09.cloud.wsf.server.x8664:db, portal: 10.1.8.10,3260] successful.

# 5. 识别为本地硬盘 sdb
[root@client ~ 14:16:24]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0   47G  0 lvm  /home
sdb               8:16   0  100G  0 disk 
sr0              11:0    1  4.4G  0 rom  
bash 复制代码
# 6. 使用存储
[root@client ~ 16:25:05]# mkfs.xfs /dev/sdb
[root@client ~ 14:30:25]# vim /etc/fstab 
/dev/sdb /usr/share/nginx/html  xfs  defaults 0 0
[root@client ~ 14:37:16]# mount -a
[root@client ~ 14:37:47]# df /usr/share/nginx/html/
文件系统           1K-块  已用      可用 已用% 挂载点
/dev/sdb       104806400 32992 104773408    1% /usr/share/nginx/html
[root@client ~ 14:38:24]# echo hello data > /usr/share/nginx/html/index.html
[root@server ~ 14:38:45]# curl http://10.1.8.11
hello data

# 重启系统验证
[root@client ~ 14:38:36]# reboot

问题: /dev/sdb 挂载超时,系统启动失败。
原因: 操作系统启动,首先挂载设备,然后启动服务。这里sdb设备是如何识别到的呢? 是因为我们启动了iscsi服务,通过网络识别的吧。
解决方法:
1. 在紧急模式下,先注释/dev/sdb挂载条目,确保进入系统
2. 进入系统后,设置挂载选项_netdev,表明设备是网络设备。操作系统在启动时候,会等网络相关服务启动完成后再挂载。
[root@client ~ 17:00:03]# vim /etc/fstab 
/dev/mapper/mpatha /usr/share/nginx/html  xfs  _netdev  0 0
3. 重启验证
监控多路径状态

如何单个网线断掉之后,还能继续呢?

用两个网线。 客户端识别设备,有两个路径。

实践:server和client都添加一个网卡 Vmnet1,IP地址分别设置为10.1.1.10 10.1.1.11

bash 复制代码
# server配置网络
[root@server ~ 15:01:29]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.10/24 fe80::20c:29ff:feef:ac01/64 
ens37            UP             10.1.1.10/24 fe80::6e55:c413:33ac:7091/64

# client配置网络
[root@client ~ 15:02:02]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fea3:6803/64 
ens37            UP             10.1.1.11/24 fe80::d73c:95a5:a861:7c62/64 

# 客户端卸载文件系统
[root@client ~ 15:02:04]# umount /usr/share/nginx/html 

# 通过10.1.1.10扫描,并登录
[root@client ~ 15:08:46]# iscsiadm -m discovery -t st -p 10.1.1.10
10.1.1.10:3260,1 iqn.2025-09.cloud.wsf.server.x8664:db
[root@client ~ 15:09:29]# iscsiadm -m node -T iqn.2025-09.cloud.wsf.server.x8664:db -l
Logging in to [iface: default, target: iqn.2025-09.cloud.wsf.server.x8664:db, portal: 10.1.1.10,3260] (multiple)
Login to [iface: default, target: iqn.2025-09.cloud.wsf.server.x8664:db, portal: 10.1.1.10,3260] successful.

# 本机额外出现一块硬盘 sdc
[root@client ~ 15:10:16]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0   47G  0 lvm  /home
sdb               8:16   0  100G  0 disk 
sdc               8:32   0  100G  0 disk 
sr0              11:0    1  4.4G  0 rom  

# 安装多路径软件,使用多路径软件识别
[root@client ~ 15:10:26]# yum install -y device-mapper-multipath

# 生成多路径配置文件
[root@client ~ 15:11:11]# mpathconf --enable
# 启动服务
[root@client ~ 15:12:03]# systemctl start multipathd.service 

# 识别设备
[root@client ~ 15:14:11]# multipath -ll
mpatha (36001405884b915a10df4d00a0fde7df9) dm-3 LIO-ORG ,db01            
size=100G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 32:0:0:0 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 33:0:0:0 sdc 8:32 active ready running
# 如果客户端没有识别两个设备为同一个设备,
# 需要使用iscsiadm登出 (-u选项),然后再次iscsiadm登入(-l选项)。
多路径配置文件(/etc/multipath.conf)

配置文件包含 5 个核心部分,用于自定义多路径规则,优先级为:multipaths > devices > defaults

配置段 功能说明 示例配置
blacklist 定义不纳入多路径管理的设备 blacklist { devnode "sd[a-z]"; wwid 1234567890abcde; }
blacklist_exceptions 定义例外设备(即使在 blacklist 中也纳入管理) blacklist_exceptions { device { vendor "IBM"; product "s/390.*"; } }
defaults 所有多路径的默认配置 defaults { path_selector "service-time 0"; path_grouping_policy "failover"; }
devices 指定特定存储设备的配置(按 vendor/product 匹配) devices { device { vendor "COMPAQ"; product "S110 (C) COMPAQ"; path_grouping_policy "multibus"; } }
multipaths 指定单个多路径设备的配置(按 WWID 匹配) multipaths { multipath { wwid "3600140559c2883e039048cbbce4320b4"; alias "Clusterstorage"; } }
  • 关键配置参数:
    • path_selector:路径选择算法,如service-time 0(选择服务时间最短路径)、round-robin 0(轮询分配 IO);
    • path_grouping_policy:路径聚合策略,failover(每条路径单独成组,主备模式)、multibus(所有路径聚合为一组,负载均衡,需存储支持 active-active);
    • user_friendly_names:是否启用友好设备名(如mpath0),默认启用,禁用后使用 WWID 作为设备名。
bash 复制代码
# 修改 fstab,并挂载
[root@client ~ 15:16:11]# vim /etc/fstab 
/dev/mapper/mpatha /usr/share/nginx/html  xfs  _netdev  0 0
[root@client ~ 15:23:16]# mount -a
[root@client ~ 15:23:21]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                  485776       0   485776    0% /dev
tmpfs                     497816       0   497816    0% /dev/shm
tmpfs                     497816    7836   489980    2% /run
tmpfs                     497816       0   497816    0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 1694184 50709016    4% /
/dev/mapper/centos-home 49250820   33004 49217816    1% /home
/dev/sda1                1038336  142208   896128   14% /boot
tmpfs                      99564       0    99564    0% /run/user/0
[root@client ~ 15:23:23]# df -h /usr/share/nginx/html/
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.7G   49G    4% /
[root@client ~ 15:24:07]# vim /etc/fstab 
[root@client ~ 15:24:53]# ls /dev/mapper/
centos-home  centos-root  centos-swap  control  mpatha
[root@client ~ 15:25:01]# mount -a
[root@client ~ 15:25:11]# reboot

连接断开
连接主机...
连接主机成功
Last login: Fri Sep 26 14:54:12 2025 from 10.1.8.1
[root@client ~ 15:30:32]# df
文件系统                    1K-块    已用      可用 已用% 挂载点
devtmpfs                   485776       0    485776    0% /dev
tmpfs                      497816       0    497816    0% /dev/shm
tmpfs                      497816    7840    489976    2% /run
tmpfs                      497816       0    497816    0% /sys/fs/cgroup
/dev/mapper/centos-root  52403200 1693968  50709232    4% /
/dev/mapper/centos-home  49250820   33004  49217816    1% /home
/dev/sda1                 1038336  142208    896128   14% /boot
/dev/mapper/mpatha      104806400   32996 104773404    1% /usr/share/nginx/html
tmpfs                       99564       0     99564    0% /run/user/0
相关推荐
什么半岛铁盒2 小时前
C++项目:仿muduo库高并发服务器------EventLoop模块的设计
linux·服务器·c++·mysql·ubuntu
Kaede62 小时前
如何快速排查服务器宕机故障
运维·服务器
深鱼~2 小时前
VSCode+WSL+cpolar:打造跨平台的随身Linux开发舱
linux·ide·vscode
用户237390331473 小时前
“标准 I/O 用 fopen,底层控制用 open; 要 mmap 必 open,跨平台选 fopen。”
linux
深思慎考3 小时前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(5——通过cpp-httplib库建立网页模块)
linux·c++·搜索引擎
Rhys..4 小时前
敏捷(Agile)流程
运维·敏捷流程
李小枫4 小时前
在linux上安装kafka,并使用kafka-clients实现消费者
linux·kafka·linq
煤球王子4 小时前
浅学内存分配与释放(二)
linux