分类目录归档:日志

linux中使用fio测试硬盘入写性成

fio可能需要安装

sudo apt install fio
或
sudo dnf install fio

检测命令:

cd <测试磁盘对应目录>
fio --name=seqwrite --rw=write --bs=1M --size=2G --direct=1 --iodepth=1

# 4K随机写入
fio --name=randwrite --rw=randwrite --bs=4k --size=1G --direct=1 --sync=0 --iodepth=1 --numjobs=1 --runtime=60 --time_based --group_reporting

# 模拟真实数据库负载(高队列深度)
fio --name=randwrite --rw=randwrite --bs=4k --size=10G --direct=1 --iodepth=32 --numjobs=1 --runtime=60 --time_based --group_reporting

# 单线程、低队列深度(贴近桌面/轻负载)
fio --name=randwrite --rw=randwrite --bs=4k --size=1G --direct=1 --iodepth=1 --numjobs=1 --runtime=30 --time_based

结果示例:

seqwrite: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1
fio-3.39
Starting 1 process
seqwrite: Laying out IO file (1 file / 2048MiB)

seqwrite: (groupid=0, jobs=1): err= 0: pid=179780: Sat Jan  3 14:52:33 2026
  write: IOPS=2506, BW=2507MiB/s (2628MB/s)(2048MiB/817msec); 0 zone resets
    clat (usec): min=334, max=3223, avg=386.08, stdev=189.18
     lat (usec): min=340, max=3229, avg=395.13, stdev=189.45
    clat percentiles (usec):
     |  1.00th=[  338],  5.00th=[  338], 10.00th=[  343], 20.00th=[  347],
     | 30.00th=[  351], 40.00th=[  351], 50.00th=[  351], 60.00th=[  355],
     | 70.00th=[  359], 80.00th=[  367], 90.00th=[  416], 95.00th=[  515],
     | 99.00th=[  848], 99.50th=[ 1909], 99.90th=[ 3130], 99.95th=[ 3195],
     | 99.99th=[ 3228]
   bw (  MiB/s): min= 2488, max= 2488, per=99.25%, avg=2488.00, stdev= 0.00, samples=1
   iops        : min= 2488, max= 2488, avg=2488.00, stdev= 0.00, samples=1
  lat (usec)   : 500=94.87%, 750=3.32%, 1000=1.03%
  lat (msec)   : 2=0.29%, 4=0.49%
  cpu          : usr=2.45%, sys=18.26%, ctx=2053, majf=0, minf=9
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,2048,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=2507MiB/s (2628MB/s), 2507MiB/s-2507MiB/s (2628MB/s-2628MB/s), io=2048MiB (2147MB), run=817-817msec

Disk stats (read/write):
  nvme0n1: ios=0/12655, sectors=0/3084040, merge=0/54, ticks=0/2598, in_queue=2598, util=68.09%

Run status group 0 (all jobs) 可以看到 bw 参数。以下是常见硬盘类型在 4K 随机写入(典型 OLTP 场景) 下的 IOPS 等级与参考值(基于行业实测与厂商数据):

性能等级IOPS 范围(4K 随机写)对应存储介质典型场景
极差< 50 IOPS低速机械盘(如 5400 RPM HDD)、老旧/故障设备、严重拥塞的虚拟磁盘不适合数据库、系统盘
低劣50 – 150 IOPS普通桌面级 HDD(7200 RPM)基础文件存储,非关键业务
中等150 – 1,000 IOPS企业级 HDD(10K–15K RPM)、低端 SATA SSD轻量级虚拟机、日志盘、开发环境
良好1,000 – 10,000 IOPS主流 SATA SSD(如三星 870 EVO、Intel D3-S4510)中小型数据库、系统盘、通用服务器
优秀10,000 – 100,000 IOPS高端 SATA / PCIe 3.0 NVMe SSD(如 Samsung PM9A1、WD SN750)高并发数据库、虚拟化平台、容器节点
顶级> 100,000 IOPS高性能 NVMe SSD(如 Samsung PM1733、Intel Optane P5800X、PCIe 4.0/5.0 旗舰盘)核心交易系统、高频金融、AI 训练缓存

注:

  • 所有数值基于 队列深度 ≥ 16、4K 随机写、稳态(steady-state) 条件;
  • 实际 IOPS 受队列深度、读写比例、预处理(preconditioning)、SLC 缓存耗尽等因素显著影响;
  • NVMe 盘在高队列深度下可达 50万~200万+ IOPS(如企业级 U.2 或 EDSFF 形态)。

debian 13 Trixie KDE 如何启用日期时间自动同步

debian 13 (代号 Trixie) KDE 默认没有启用日期时间自动同步,KDE底层还是依赖系统服务,如 systemd-timesyncd

# 1. 安装 systemd-timesyncd
sudo apt update
sudo apt install systemd-timesyncd

# 2. 启用 NTP
sudo timedatectl set-ntp true

# 3. 检查状态
timedatectl status

如何判断一个进程是否运行在容器中

1、查看该进程的 PID

以 nginx 为例

# ss -ntpl | grep nginx
LISTEN     0      511          *:88                       *:*                   users:(("nginx",pid=28791,fd=8),("nginx",pid=28790,fd=8),("nginx",pid=28789,fd=8),("nginx",pid=28788,fd=8),("nginx",pid=28787,fd=8))
LISTEN     0      511          *:80                       *:*                   users:(("nginx",pid=28791,fd=7),("nginx",pid=28790,fd=7),("nginx",pid=28789,fd=7),("nginx",pid=28788,fd=7),("nginx",pid=28787,fd=7))

或通过 ps -aux ,第二列就是 PID

ps -aux | grep nginx
root     28787  0.0  0.0  10560  1804 ?        Ss   09:33   0:00 nginx: master process
100      28788  0.0  0.0  11076  2884 ?        S    09:33   0:00 nginx: worker process
100      28789  0.0  0.0  11024  2500 ?        S    09:33   0:00 nginx: worker process
100      28790  0.0  0.0  11056  2888 ?        S    09:33   0:00 nginx: worker process
100      28791  0.0  0.0  11024  2500 ?        S    09:33   0:00 nginx: worker process
root     31719  0.0  0.0 112812   976 pts/2    S+   09:59   0:00 grep --color=auto nginx

2、查看进程的 cgroup

cat /proc/<pid>/cgroup
# cat /proc/28791/cgroup                                                                                                                                                                               
11:perf_event:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
10:pids:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
9:freezer:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
8:memory:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
7:devices:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
6:cpuacct,cpu:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
5:hugetlb:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
4:net_prio,net_cls:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
3:blkio:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
2:cpuset:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
1:name=systemd:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5

看到例如CPU、内存、磁盘都在 docker 中,因此此进程应该是运行在容器中。

3、确认容器服务

docker ps | grep <容器ID前4到10位>

# docker ps | grep 21d0c
21d0cf703b47   nginx   "tini entrypoint.sh"   32 minutes ago   Up 32 minutes      mynginx

云服务器禁用22端口并禁用root登录

1、添加sshd端口

编辑 /etc/ssh/sshd_config ,添加以下行:

Port 22
Port 2222

重启服务:

systemctl restart sshd

2、添加普通用户

useradd -m -s /bin/bash <user>
passwd <user> # 设置密码

允许无密切换 root

visudo

添加以下行:

<user>   ALL=(ALL)       NOPASSWD: ALL

3、禁用端口和root账号

注意:使用 ssh user@ip -p 2222 验证能否登录,使用 sudo su 切换到 root 账号,确保一切正常才能禁用!

编辑 /etc/ssh/sshd_config ,修改 PermitRootLogin yesPermitRootLogin no ,注释(或删除) Port 22

重启服务:

systemctl restart sshd

win10 win11 绕过联网验证,使用本地账号登录

通过命令行绕过联网验证

1. 打开命令提示符

  • 在需要联网的界面,按下  Shift + F10  组合键,调出命令提示符窗口。

2. 输入命令

  • 输入  OOBE\BYPASSNRO  并按下回车键,系统会自动重启。

3. 创建本地账户

  • 重启后,在联网界面会出现“跳过”选项,点击该选项。
  • 输入本地账户的用户名,设置密码(也可不设置),然后按照提示完成后续操作即可。

系统安装完成后切换为本地账户

要是你在首次启用时不小心使用了微软账户登录,可按以下步骤切换:

1. 点击“开始”按钮,然后选择“设置”,接着进入“账户”,再点击“你的信息”。

2. 点击“改用本地账户登录”选项。

3. 输入微软账户的密码进行验证。

4. 设置本地账户的用户名和密码,点击“下一步”。

5. 点击“注销并完成”,之后使用新创建的本地账户登录系统。

windows中离线安装mysql

下载安装包

8.x版:https://dev.mysql.com/downloads/mysql/

5.x版:https://downloads.mysql.com/archives/community/

下载后解压到 d: 盘,要求打开 d:\mysql 后能看到 bin 目录。

安装 vcruntime140(可选)

x86: https://aka.ms/vs/17/release/vc_redist.x86.exe

x64: https://aka.ms/vs/17/release/vc_redist.x64.exe

环境配置

d:\mysql\bin 配置到用户环境 PATH 中。

配置 mysql.ini

注意:务必先打开显示文件扩展名!

在 mysql 目录下创建文件夹 data ,创建 my.ini 文件并粘贴以下内容:

[mysqld]
#设置3306端
port=3306
# MySQL程序安装目录
basedir=D:\mysql
# 数据库文件存放地址
datadir=D:\mysql\data 
#设置最大连接数
max_connections=512
#允许临时存放在查询缓存区大小
query_cache_size=0
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 数据库默认使用引擎
default-storage-engine=INNODB
[mysql]
# mysql客户端默认的字符集,5.7才有的,5.6以及之前的版本没有default-character-set属性
default-character-set=utf8mb4

初始化数据目录

mysqld --initialize [--user=mysql] --console

执行该命令后,MySQL 会自动生成一个初始的 root 用户密码,密码信息会显示在命令行输出中,例如:

2023-10-01T12:34:56.789012Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: AbcDef123!

安装 mysqld

以管理员身份运行CMD命令行,输入以下命令:

# 安装服务
mysqld -install [mysql]
# 启动mysql
net start mysql
# 修改密码为 123456(输入命令后会要求输入初始密码)
mysqladmin -uroot -p password 123456
# 首次登录
mysql -u root -p

输入之前记录的临时密码,登录成功后,执行以下命令修改 root 用户的密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
flush privileges;

验证 MySQL 安装:

SELECT VERSION();

其他操作

# 卸载
mysqld -remove [mysql]

Nginx配置Basic Authentication认证

生成认证文件

方法1

安装工具

# debian
sudo apt install apache2-utils
# redhat
sudo yum install -y httpd-tools

创建认证文件,-c是创建新的文件

sudo htpasswd -c ./htpasswd user1
# 按提示输入user1的密码
# 也可以直接在命令中输入密码,加上-b参数
sudo htpasswd -cb ./htpasswd user1 password
# 添加额外的用户
sudo htpasswd -c ./htpasswd user2

htpasswd文件示例内容如下

$ cat htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

方法2

openssl passwd -apr1 password

创建htpasswd文件,将上述密码加入到 htpasswd,格式如下,其中 user1 是用户名

# 允许使用#来注释
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0:允许在第二个冒号之后加注释

配置 nginx

单路径匹配

location /api {
  # 显示给用户的提示,有空格等符号时必须使用单/双引号
  auth_basic secure;
  # 加密文件
  auth_basic_user_file /etc/nginx/htpasswd;
}

整个服务生效

server {
  ...
  auth_basic secure;
  auth_basic_user_file /etc/nginx/htpasswd;

  location /public/ {
      auth_basic off;
  }
}

给PGSQL添加只读用户

-- 1. 创建新用户readonly
CREATE ROLE readonly LOGIN PASSWORD 'passwd';

-- 2. 授予readonly用户对mydb1数据库的只读权限
-- 首先授予连接权限
GRANT CONNECT ON DATABASE mydb1 TO readonly;

-- 进入需要授权的数据库(PGADMIN等软件需要提前进入管理数据库)
\c mydb1

-- 然后为mydb1数据库中的所有表授予SELECT权限
-- 这里的假设是所有表都在public模式下,如果不是,需要指定正确的模式
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

-- 如果需要包括未来创建的表,使用以下命令
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;