2026年11月14日星期六

服务器重启后所有docker容器挂掉无法启动修复

第一步:SSH 登录,检查 docker 服务是否开机启用

  1. # 查看是否 enabled
  2. systemctl is-enabled docker
  3. # 查看当前状态
  4. systemctl status docker
  • 返回 disabled → 根本不会开机启动 docker,容器自然全部不起来
  1. # 启用开机自启
  2. systemctl enable --now docker
  3. systemctl enable containerd

很多 Debian / 自己装 docker 的环境,安装后不会自动 enable,这是最高发原因Docker

第二步:检查所有容器的重启策略

  1. # 列出所有容器+重启策略
  2. docker inspect --format '{{.Name}} {{.HostConfig.RestartPolicy.Name}}' $(docker ps -a -q)
  • no:不自动启动(问题根源)
  • always:系统重启 docker 起来就自动拉
  • unless-stopped:推荐,手动 stop 后不再自动拉起,意外退出 / 主机重启自动拉

批量修改全部容器为 unless-stopped

  1. docker update --restart unless-stopped $(docker ps -a -q)

⚠️ 如果是应用商店新建应用时,一定要勾选【开机自动重启】,否则默认是 no;如果是旧应用,在面板容器编辑页修改重启策略。

第三步:重启后 docker 启动失败 / 启动太晚(第二个高频坑)

执行看开机阶段 docker 日志:

  1. journalctl -u docker -b

常见报错:

  1. /etc/docker/daemon.json json 语法错误、配置写错 → dockerd 启动失败
  2. 数据盘 / 外挂存储(挂载卷)在 docker 之后才挂载(NAS、USB 盘、LVM、加密盘)
    • 现象:docker 启动时找不到挂载目录,容器启动失败直接跳过
    • 解决:systemd 给 docker 加挂载依赖,或者把 docker 数据目录放到系统盘,卷目录放到外部盘并配置x-systemd.mount-timeout
  3. OpenWrt/Armbian 非 systemd 系统:procd 启动顺序问题,dockerd 启动太晚,容器不会自动拉起,需要调整启动优先级

第四步:1Panel Compose 编排的应用(docker-compose)

compose 里的 restart 才生效,单纯靠 1panel compose 管理,不会额外帮你开机启动

  1. services:
  2. xxx:
  3. restart: unless-stopped

修改后必须 docker compose up -d 重建容器,只改 yaml 不 up 不生效。

第五步:临时验证方案(改完后测试)

  1. # 停止docker,模拟主机重启
  2. systemctl stop docker
  3. systemctl start docker
  4. # 看容器是否自动起来
  5. docker ps

如果此时全部自动起来,说明配置没问题,是主机开机顺序 / 挂载问题。

排查优先级速查

  1. systemctl is-enabled docker → disabled 优先修复
  2. 检查容器 restart policy 是不是 no
  3. 看 journalctl -u docker -b 有没有 daemon 报错
  4. 检查容器挂载目录是否是外置盘、开机挂载延迟
  5. 确认不是手动在面板里点过【停止容器】(unless-stopped 模式下手动 stop 后不会自动拉起)

补充:如果你是 Debian

debian 官方 docker 包默认 enable,但如果你是手动脚本安装、或者重装过 docker,经常会变成 disabled。

2026年11月9日星期一

DISM命令修复win10+系统损坏文件

能进系统,在线方式使用:

执行 SFC 校验修复
sfc /scannow
执行在线修复
DISM /Online /Cleanup-Image /RestoreHealth

能进系统,离线修复损坏文件使用:

适合:SFC 报错、DISM 在线修复卡 62%/ 找不到源、无网络
挂载 ISO,记下虚拟盘号(假设是 H:)
管理员打开终端,先查看镜像索引(区分专业 / 家庭版) 
DISM /Get-WimInfo /WimFile:H:\sources\install.wim
如果是 install.esd:
DISM /Get-WimInfo /WimFile:H:\sources\install.esd
记下你系统对应的 Index 编号(比如专业版一般是 6) 3. DISM 指定镜像源修复,/LimitAccess 禁止联网找源
wim版本 :
DISM /Online /Cleanup-Image /RestoreHealth /Source:wim:H:\sources\install.wim:6 /LimitAccess :: 
esd版本 :
DISM /Online /Cleanup-Image /RestoreHealth /Source:esd:H:\sources\install.esd:6 /LimitAccess
DISM 跑完后,执行 SFC 校验修复
sfc /scannow



2026年10月16日星期五

共享核显给hyper-v 中的虚拟机以提升虚拟机显示性能

首先配置好hyper-v组件并安装好虚拟机,示例命名:VM1
1、宿主机以管理员方式启动 PowerShell,查看显卡信息,输入命令:
Windows11:
Get-VMHostPartitionableGpu
Windows10:
Get-VMPartitionableGpu

2、Name中的就是我们可以调用的显卡,需要复制一下里面的内容做备用,示例:
PS C:\WINDOWS\system32> Get-VMHostPartitionableGpu
Name                          : \\?\PCI#VEN_8086&DEV_A7A8&SUBSYS_3E7419E5&REV_04#3&11583659&0&10#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV
ValidPartitionCounts          : {32}

3、添加vGPU到虚拟机中
环境变量讲解:vm=虚拟机名变量 gpu=显卡Name
宿主机以管理员方式启动 PowerShell,根据虚拟机名及显卡Name编辑并输入以下自定义命令:
$vm = "VM1"
$gpu_path = "\\?\PCI#VEN_8086&DEV_A7A8&SUBSYS_3E7419E5&REV_04#3&11583659&0&10#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"


4、添加 GPU 分区:
Add-VMGpuPartitionAdapter -VMName $vm -InstancePath $gpu_path

修改以下参数**必须关闭虚拟机,开机状态执行直接报错**。
为虚拟机设置 高位内存映射 I/O 空间(High‑MMIO 空间),大小设置为 32GB(PCI 寻址地址范围,不占用宿主机物理内存):
Set-VM -HighMemoryMappedIoSpace 32GB -VMName $vm

5、设置分区资源(示例值):
Set-VMGpuPartitionAdapter -VMName $vm `
-MinPartitionVRAM 80000000 -MaxPartitionVRAM 100000000 -OptimalPartitionVRAM 100000000 `
-MinPartitionEncode 80000000 -MaxPartitionEncode 100000000 -OptimalPartitionEncode 100000000 `
-MinPartitionDecode 80000000 -MaxPartitionDecode 100000000 -OptimalPartitionDecode 100000000 `
-MinPartitionCompute 80000000 -MaxPartitionCompute 100000000 -OptimalPartitionCompute 100000000

6、是否允许虚拟机内部修改内存页的缓存属性:(默认false,Hypervisor 接管全部缓存控制)
Set-VM -GuestControlledCacheTypes $false -VMName $vm
Set-VM -GuestControlledCacheTypes $true -VMName $vm

设置完成后,先重启宿主机,再开启虚拟机。
到了这一步,虚拟机中已经可以看见显卡信息,但是还没驱动,不用急,继续往下,先关闭虚拟机。

7、把宿主机显卡驱动文件复制到虚拟机相应位置,设置完成后,重启虚拟机。
(显卡不同,文件名就不同)文件复制到虚拟机C:\Windows\System32\HostDriverStore\FileRepository
HostDriverStore\FileRepository  虚拟机没有这个文件夹需要自己创建

8、取消分配 GPU 分区:
$vm = "VM1"
Remove-VMGpuPartitionAdapter -VMName $vm

2026年5月28日星期四

NAS机械硬盘长期不休眠排查

思路:

1-查看指定硬盘占用进程

示例:查看data_s002硬盘占用进程

fuser -vm /data_s002

2-迁移数据目录到SSD,并更改软件数据目录路径

#新建目录

sudo mkdir /test

#删除目录或文件

rm -rf  /test/

rm  -rf  test

#移动文件,如移动xxxx 到/usr/local/下

mv -rf  xxxx   /usr/local/

#复制文件,复制xxxx 到/usr/local/下

cp -r xxxxx   /usr/local

3-终止指定进程如23792

kill -9 23792



2026年4月20日星期一

Win11升级后立即清理删除 Windows.old 旧系统备份文件

一、使用磁盘清理工具(官方推荐)

此方法由 Windows 系统原生提供,全程图形化操作,自动识别并隔离“以前的 Windows 安装”项,确保不误删当前系统关键文件,适用于所有 Windows 11 版本。

1、按下 Win + S 组合键,在搜索框中输入“磁盘清理”,点击打开该应用。

2、在弹出窗口中选择系统驱动器(通常为 C:),点击“确定”开始扫描。

3、扫描完成后,点击下方的“清理系统文件”按钮(需管理员权限)。

4、再次选择 C: 盘进行深度扫描,等待系统完成对系统级文件的分析。

5、在文件列表中找到并勾选“以前的 Windows 安装”选项(即 Windows.old 文件夹)。

6、可同步勾选“临时文件”“回收站”等其他非必要项目以进一步释放空间。

7、点击“确定”,在弹出的确认对话框中点击“删除文件”执行清理。

二、通过设置应用中的存储管理删除

Windows 11 将 Windows.old 清理整合进“设置 > 系统 > 存储”界面,支持实时查看释放空间大小,并提供明确的文件描述与尺寸标注,适合普通用户快速操作。

1、按下 Win + I 快捷键打开“设置”应用。

2、依次进入“系统 → 存储”页面。

3、等待系统完成 C 盘使用情况分析后,点击“临时文件”分类。

4、在列表中定位名为“以前的 Windows 安装”的条目(显示大小通常 ≥10 GB)。

5、勾选该项,并可根据需要补充勾选“下载内容”“缩略图”等临时数据。

6、点击页面顶部的“删除文件”按钮,系统将自动执行移除任务。

三、启用存储感知并立即运行清理

存储感知是 Windows 11 内置的自动化空间管理功能,启用后不仅可设定定期规则,还可手动触发即时扫描,同步处理 Windows.old 及其他冗余系统文件。

1、进入“设置 → 系统 → 存储”页面。

2、点击“配置存储感知或立即运行”链接。

3、向下滚动至“删除以前版本的 Windows”选项,将其开关设为开启状态。

4、点击“立即运行”按钮,系统启动扫描并提示是否执行清理。

5、在确认窗口中点击“清理”,等待进度条完成。

四、使用命令提示符强制删除(需管理员权限,不推荐)

当图形界面方法因文件句柄占用、权限锁定或系统资源冲突失败时,命令提示符可绕过部分限制,直接调用底层指令删除;但要求路径准确且操作不可逆。

1、在任务栏搜索框中输入“cmd”,右键“命令提示符”,选择“以管理员身份运行”。

2、输入以下命令并按回车:rd /s /q C:\windows.old。

3、系统将立即执行强制删除,无二次确认,请确保路径正确且当前无需回滚旧系统。

2026年4月18日星期六

Arm设备刷飞牛fnos系统并调整安装到eMMC中的rootfs分区大小,使得小于16GB的设备能自定义预留部分空间做应用储存空间

Arm设备刷飞牛fnos系统并调整安装到eMMC中的rootfs分区大小,使得小于16GB的设备能自定义预留部分空间做应用储存空间

一、刷机流程

1.1刷入第三方安卓底包 如果盒子已经可以正常u盘启动的,可以跳过;

1.2 烧录fnos镜像到U盘,并修改uEnv.txt文件与fnEnv.txt文件中对应的设备DTB文件对应名称;

1.3设备上电启动后,路由器查看飞牛ip ,设置设备名及用户账户和用户密码

1.4在系统设置>SSH>SSH功能  打开功能

二.安装fnos到emmc
2.1 ssh登陆到u盘的fnos 账号密码就是刚刚u盘启动里fnos的设置的账号密码
2.2 切换到root模式,  sudo -i
2.3如果需要修改系统分区大小 修改fnnas-install

编辑命令:sudo vim /usr/sbin/fnnas-install
输入:i 进入编辑模式

原脚本当磁盘可用空间大于 16GiB 时,支持自定义系统根分区大小(默认 16GiB),调整为当磁盘可用空间大于 5GiB 时,支持自定义系统根分区大小(默认 5GiB)

找到这个代码块:
    # Check if the ${fnnas_conf} file exists
    if [[ -f "${fnnas_conf}" ]]; [cite: 28]
    then
        source "${fnnas_conf}"
    else
        # Set root partition size limit (Unit: GiB)
        echo "rootfs_limit_gib=\"16\"" >"${fnnas_conf}" [cite: 28]
        echo "rootfs_resize=\"yes\"" >>"${fnnas_conf}" [cite: 28]
        rootfs_limit_gib="16" [cite: 28]
        rootfs_resize="yes" [cite: 28]
    fi
    # Ensure variables are set
    [[ -n "${rootfs_limit_gib}" ]] || [cite: 29]
rootfs_limit_gib="16" [cite: 29]

用以下方式替换:

    # Check if the ${fnnas_conf} file exists
    if [[ -f "${fnnas_conf}" ]];
    then
        source "${fnnas_conf}"
    else
        # Set root partition size limit (Unit: GiB)
        echo "rootfs_limit_gib=\"5\"" >"${fnnas_conf}"
        echo "rootfs_resize=\"yes\"" >>"${fnnas_conf}"
        rootfs_limit_gib="5"
        rootfs_resize="yes"
    fi
    # Ensure variables are set
    [[ -n "${rootfs_limit_gib}" ]] ||
rootfs_limit_gib="5"

更新交互式菜单文本

在函数中,你需要更新显示给用户的文本,以反映新的5GiB阈值。show_partition_menu()

找到这段代码:

    │    ≥16     │ Enter a number (GiB) to specify Rootfs partition size. 

替换:

    │    ≥5     │ Enter a number (GiB) to specify Rootfs partition size. 

更新输入提示

在函数中,脚本会提示用户输入。这些提示也需要更新以显示新的最低要求。partition_sizing()5

查找代码块::

    echo -ne "${OPTIONS} Please Input ID(1/2/3) or Size(16 ~ ${FREE_SIZE_GiB}): " 

替换

    echo -ne "${OPTIONS} Please Input ID(1/2/3) or Size(5 ~ ${FREE_SIZE_GiB}): "  

查找代码块:

    echo -ne "${OPTIONS} Please Input ID(1/2) or Size(16 ~ ${FREE_SIZE_GiB}): "  

替换:

    echo -ne "${OPTIONS} Please Input ID(1/2) or Size(5 ~ ${FREE_SIZE_GiB}): "  

按键:esc退出编辑模式

输入:wq 保存退出。

2.4 输入安装fnos到emmc命令:fnnas-install

2.5 输入设备模型

2.6 按提示输入 Rootfs partition 分区大小 单位GB

2.7 完成后输入poweroff,拔掉引导盘,并重启设备


设置读写权限,方便使用WinSCP编辑
chmod -R 777 /usr/sbin/fnnas-install
chmod -R 777 /usr/sbin/fnnas-update
恢复权限
chmod -R 777 /usr/sbin/fnnas-install
chmod -R 777 /usr/sbin/fnnas-update




2026年4月2日星期四

arm版飞牛系统(fnnas)系统更新完成重启后依然提示更新(无法完成内核更新)的修复解决办法

arm版飞牛系统(fnnas)系统更新完成重启后依然提示更新(无法完成内核更新)的修复解决办法


修复方法:
检查更新,并等待更新完成,待系统重启后
使用客户端连接SSH
登录 FnNAS 系统 SSH 终端 → 输入命令:
提权:
sudo -i
#安装 u-boot-tools 包
sudo apt update
sudo apt install u-boot-tools -y

打开启动引导目录
cd /boot

Fnos 1.1.20版本修复

手动生成uInitrd-6.12.41-trim
update-initramfs -c -k 6.12.41-trim
复制uInitrd-6.12.41-trim替换uInitrd文件
cp uInitrd-6.12.41-trim uInitrd
复制vmlinuz-6.12.41-trim替换zImage文件
cp vmlinuz-6.12.41-trim zImage
重启系统
reboot

Fnos 1.1.31版本修复

手动生成uInitrd-6.18.18-trim
update-initramfs -c -k 6.18.18-trim
复制uInitrd-6.18.18-trim替换uInitrd文件
cp uInitrd-6.18.18-trim uInitrd
复制vmlinuz-6.18.18-trim替换zImage文件
cp vmlinuz-6.18.18-trim zImage
重启系统
reboot


完成修复。

查看系统信息
uname -a


Linux ZSJX 6.12.41-trim #214 SMP PREEMPT Mon Feb  9 09:24:55 UTC 2026 aarch64 GNU/Linux

注意 :Linux ZSJX 6.12.41-trim  #219  如果比  #214高,可能也会提示更新。

系统更新里也不再提示有-trim 内核更新,至此内核更新问题解决。
资源链接:
提权:
sudo -i 

编辑更新脚本
vim /usr/sbin/fnnas-update
替换源站:https://github.com/ 为加速后的地址:https://gh-proxy.com/https://github.com/ ,https://gh-proxy.com/仅为示例,文件加速网站可自寻可用的地址。
执行更新,确认输入Y
fnnas-update

更新完成后会自动重启系统。

FnNAS 是一款基于最新 Linux 内核(Debian 发行版)深度定制的操作系统。它具备出色的硬件兼容能力,全面支持主流 x86 及 Arm64 设备,支持用户自主组建 NAS 并灵活扩展外部存储。现在,您可以轻松将电视盒子的 Android TV 系统替换为 FnNAS,将其打造为一台功能强大的私有数据存储服务器。