Posts

RHEL 9 LVM system.devices 问题导致虚拟机无法启动

问题描述

在深信服超融合虚拟机中,如果运行 RedHat Linux 9 系列及以上操作系统,使用第三方备份软件进行无代理备份后恢复系统,或者跨集群迁移虚拟机,大概率出现系统无法正常启动的问题。

原因分析

从 RHEL 9 开始,默认启用了 LVM 设备文件功能。system.devices 文件控制 LVM 设备的可见性和可用性,如果物理卷(PV)不在该文件中,LVM 将不会使用它。

当系统通过备份恢复或跨集群迁移后,物理卷的 ID 会发生变更,导致原有的 system.devices 文件无法正确识别设备,从而无法加载逻辑卷组。

官方文档参考:LVM 设备文件配置

解决方法

步骤 1:进入救援模式

使用安装光盘或 ISO 启动系统,选择进入救援模式,选择选项 3 进入 SHELL。

步骤 2:切换到系统根目录

在 SHELL 中按 1 继续挂载系统,然后执行:

chroot /mnt/sysroot

步骤 3:删除 system.devices 文件

rm -f /etc/lvm/devices/system.devices

步骤 4:重启系统

exit
reboot

步骤 5:重新创建 system.devices 文件

系统正常启动后,执行以下命令重新生成 system.devices 文件:

vgimportdevices -a

验证

通过对比 system.devices 文件的前后变化,可以看到 IDNAME 字段已经更新:

--- system.devices
+++ system.devices.bak
2,3c2,3
< # Created by LVM command vgimportdevices pid 167429 at Fri Jan 17 13:34:50 2025
< # HASH=3025863125
---
> # Created by LVM command vgs pid 131552 at Wed Dec 11 22:03:44 2024
> # HASH=364014683
5,6c5,6
< VERSION=1.1.1
< IDTYPE=sys_serial IDNAME=1624319849518-0 DEVNAME=/dev/vda3 PVID=W4s53DYkIKMtYj6TdOxizXKwzrqVfx4L PART=3
---
> VERSION=1.1.5
> IDTYPE=sys_serial IDNAME=7894377599278-0 DEVNAME=/dev/vda3 PVID=W4s53DYkIKMtYj6TdOxizXKwzrqVfx4L PART=3

可以看到 IDNAME7894377599278-0 变更为 1624319849518-0,这正是导致系统无法识别设备的原因。

预防措施

对于频繁需要备份恢复或迁移的 RHEL 9 系统,可以考虑以下预防措施:

  1. 在系统中禁用 LVM 设备文件功能(根据实际需求评估风险)
  2. 在备份前执行 vgexportdevices 导出设备文件
  3. 恢复或迁移后务必检查并重建 system.devices 文件

参考资料

Windows上修改MTU大小

netsh interface ipv4 show subinterfaces

netsh interface ipv4 set subinterface <subinterface name> mtu=9000 store=persistent

Winget通过pin命令排除指定应用的更新

在使用winget upgrade -r 更新软件的时候,总是会把WPS中文版更新为国外版本,该版本没有中文选项,家人使用特别不方便。查询winget文档,并没有发现exclude选项,但是发现了pin命令。pin命令可以让程序固定在当前版本,除非通过--include-pinned 明确指出,否则不会自动更新pin过的应用。 具体操作如下:

winget pin add Kingsoft.WPSOffice

再次更新就会提示1 程序包拥有阻止升级的包钉。不会自动更新pin过的程序了。

winget upgrade -r
找不到与输入条件匹配的已安装程序包
1 程序包拥有阻止升级的包钉使用 'winget pin' 命令查看和编辑包钉使用 --include-pinned 参数可能显示更多结果

参考链接

pin Command | Microsoft Learn

HUAWEI交换机用ssh key认证登录

华为交换机配置ssh key认证

# 本地生成密钥对
ssh-keygen -t ecdsa -f huaweikey
sys
# 配置密钥对
ecc peer-public-key demo encoding-type openssh
public-key-code begin
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIb+qZ2O6fdr2AEd+Zq/Xf3tnCfpJk33NGFVAog= demo
public-key-code end
peer-public-key end
# 创建本地用户
aaa
local-user demo service-type ssh
quit
# 创建同名ssh用户
ssh user demo assign ecc-key demo
ssh user demo authentication-type ecc
ssh user demo service-type stelnet
# 配置用户权限
user-interface vty 0 4
user privilege level 15

MOC - music on console 无头音乐播放器

最近把一台老的笔记本电脑当作NAS使用,都是通过ssh管理。笔记本电脑自带声卡和喇叭,便想着说利用起来播放一些音乐。通过一番搜索,发现MOC这个软件正符合我的需求。

  • 官网https://moc.daper.net/
  • 命令 mocp 启动TUI
    • h 显示帮助信息
    • a 添加当前目录到播放列表
    • n 下一曲
    • b 上一曲
    • X 自动播放下一曲
    • S 随机播放
    • p 或空格 暂停
    • q 退出

Windows域控配置时钟源

背景

在 Active Directory 环境中,所有成员计算机和域控制器默认使用层级时间同步架构:

  • 森林根域的 PDC Emulator → 整个森林的权威时间源
  • 子域的 PDC Emulator → 向森林根 PDC 同步
  • 普通域控制器 → 向同域的 PDC Emulator 同步
  • 域成员计算机 → 向所在站点的域控制器同步

因此,只需在森林根域的 PDC Emulator 上配置外部 NTP 源,时间就能自动向下层传播。

修改 SSH 监听端口与 SELinux 配置

概述

出于安全考虑,修改 SSH 默认端口(22)是一个常见的安全加固措施。本文介绍如何修改 SSH 监听端口,并正确配置 SELinux 以允许新端口的访问。

修改 SSH 监听端口

1. 编辑 SSH 配置文件

sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,取消注释并修改为需要的端口:

Port 22
Port 2222

建议同时保留默认端口和自定义端口,便于测试。确认新端口正常工作后,再删除默认端口配置。

2. 重启 SSH 服务

sudo systemctl restart sshd

3. 验证新端口

# 检查 SSH 服务监听端口
sudo ss -tlnp | grep sshd

# 或使用 netstat
sudo netstat -tlnp | grep sshd

应该看到新端口(如 2222)已开始监听。