[Bug Report] 【Bug Report】Deepin v25:apt 警告 driver.list 无法清除
Tofloor
poster avatar
Abyss
deepin
2026-09-05 12:23
Author

【Bug 反馈】Deepin 25: /etc overlayfs 上层目录项损坏,apt 警告无法清除

一、系统环境

项目 信息
系统版本 Deepin 25 (crimson)
内核版本 6.18.38-amd64-desktop-rolling #25.01.01.28 SMP PREEMPT_DYNAMIC
架构 x86_64
根文件系统 /dev/nvme0n1p5 (ext4)
问题影响 apt update 持续警告,但不影响软件源更新

二、问题描述

/etc/apt/sources.list.d/ 目录下存在一个损坏的文件系统目录项 driver.list:

  1. ls -la 显示为 c????????? ? ? ? ? ? driver.list(无法获取文件类型、权限、inode 信息)
  2. 对该文件执行 stat / unlink / rename / mv / open / chattr 全部失败,报错 No such file or directory
  3. 使用 Python 直接调用底层系统调用 os.unlink() / os.rename() 同样返回 FileNotFoundError(内核在路径解析 lookup 阶段即失败)
  4. apt update 每次执行均出现警告:
    N: 忽略'driver.list'(于目录'/etc/apt/sources.list.d/'),鉴于它不是一个常规文件
    

三、根因分析(排查结论)

经排查,该损坏目录项位于 etc-overlay overlayfs 的底层目录中,但 overlay 挂载参数引用的 upper/lower 层路径在当前系统中完全不可访问:

  • findmnt /etc 显示 overlay 配置:
    /etc  等-overlay overlay rw,relatime,
    lowerdir=/root/persistent/overlay/data/layer-4d646bbc6cce5538/etc:
            /root/persistent/ostree/data/4aab5bbf066c5aa7321d2d41181230f22a96cc4a7dbd5aadac8f6e1e61c8d150.0/checkout/etc:
            /root/ostree/deploy/deepin/deploy/84f4c0bc223db7d2db9a7a39cbfda6be76a7a1da74ecc9aee1c107e34a9b3f09.23/etc,
    upperdir=/root/persistent/overlay/data/layer-c7cec8ff43a3bab1/etc,
    workdir=/root/persistent/overlay/data/4aab5bbf066c5aa7321d2d41181230f22a96cc4a7dbd5aadac8f6e1e61c8d150.0/etc-work
    
  • 但以上所有路径(含 /root/persistent/、/root/ostree/)在 sudo ls 下均显示不存在(/root 下只有用户目录)
  • 使用 debugfs 直接读取底层 ext4 设备 /dev/nvme0n1p5,同样返回 File not found by ext2_lookup
  • 底层 ext4 的 /etc 目录仅包含 fstab 和 lsb-release 两个文件(无 apt 目录),证明 /etc 内容完全由 overlay 层合成

结论:overlay 挂载创建于系统启动早期(疑似 initramfs/ostree 阶段),其 upper/lower 层所在的文件系统在当前运行环境中不可见(路径"失联"),内核保留了挂载引用使 overlay 正常工作,但损坏的目录项无法通过任何用户空间文件操作清除。怀疑与 Deepin 25 的 ostree + overlay 实现有关。

四、已尝试的解决方法(全部失败)

# 方法 命令 结果
1 常规删除 sudo rm -f /etc/apt/sources.list.d/driver.list 无报错但条目仍在(rm -f 静默跳过)
2 unlink sudo unlink /etc/apt/sources.list.d/driver.list 报错:No such file or directory
3 改名 sudo mv /etc/apt/sources.list.d/driver.list xxx 报错:stat 失败,No such file or directory
4 覆盖为空白文件 重定向创建同名文件 失败(无法创建,inode 损坏)
5 chattr 锁定/解锁 sudo chattr -i 等 失败(无法 stat)
6 Python 系统调用 os.unlink() / os.rename() FileNotFoundError(lookup 阶段失败)
7 访问 overlay upper 层 sudo ls /root/persistent/overlay/data/layer-c7cec8ff43a3bab1/etc/apt/sources.list.d/ 路径不存在
8 debugfs 读底层磁盘 sudo debugfs -R "ls -l ..." /dev/nvme0n1p5 File not found by ext2_lookup
9 initramfs 残留目录 sudo ls /run/initramfs/root/... 不存在(/run/initramfs 仅有 fsck.log)

五、完整诊断输出

1. 目录状态(ls 可见但无法操作)

$ ls -la /etc/apt/sources.list.d/
drwxr-xr-x 2 root root 4096 1970年Jan 1日 .
drwxr-xr-x 1 root root 4096 Sep 5日 11:41 ..
-rw-r--r-- 1 root root  116 1970年Jan 1日 appstore.list
-rw-r--r-- 1 root root  116 1970年Jan 1日 appstore.list.bak
-rw-r--r-- 1 root root  113 Apr 9日 21:10 docker.list
c????????? ? ?    ?       ?             ? driver.list
-rw-r--r-- 1 root root  259 1970年Jan 1日 termius.list
-rw-r--r-- 1 root root  278 Sep 4日 10:25 vscode.sources

2. stat 失败输出

$ stat /etc/apt/sources.list.d/driver.list
stat: 对 '/etc/apt/sources.list.d/driver.list' 调用 statx 失败: 没有那个文件或目录

3. Python 系统调用失败输出

$ sudo python3 -c "import os; os.unlink('/etc/apt/sources.list.d/driver.list')"
Traceback (most recent call last):
  File "", line 1, in 
FileNotFoundError: [Errno 2] No such file or directory: '/etc/apt/sources.list.d/driver.list'

4. debugfs 输出

$ sudo debugfs -R "ls -l /root/persistent/overlay/data/layer-c7cec8ff43a3bab1/etc/apt/sources.list.d" /dev/nvme0n1p5
/root/persistent/overlay/data/layer-c7cec8ff43a3bab1/etc/apt/sources.list.d: File not found by ext2_lookup

$ sudo debugfs -R "ls -l /etc" /dev/nvme0n1p5
 6829057   40755 (2)      0      0    4096 10-Nov-2025 21:25 .
      2   40755 (2)      0      0    4096  5-Sep-2026 11:45 ..
 6829059  100644 (1)      0      0     618 10-Nov-2025 21:25 fstab
 6829058  100644 (1)      0      0      92 10-Nov-2025 21:25 lsb-release

5. apt update 警告

$ sudo apt update
...
N: 忽略'driver.list'(于目录'/etc/apt/sources.list.d/'),鉴于它不是一个常规文件

6. 其余 overlay 挂载(同架构)

/usr   usr-overlay  overlay (lowerdir/upperdir 同 /root/persistent/... 结构)
/opt   opt-overlay  overlay (lowerdir/upperdir 同 /root/persistent/... 结构)

六、期望的官方支持

  1. 提供修复方法,或确认下次系统更新(ostree 新部署层)时能否自动清除该损坏目录项
  2. 确认是否为 Deepin 25 ostree + overlayfs 实现的已知问题
  3. 如需进一步诊断,本人可提供更多系统信息或配合远程调试

七、备注

  • 该问题不影响软件源更新和 Docker 等软件正常使用,仅产生 apt 警告

  • 系统其余功能正常

  • 可用 sudo apt update 完整输出 + 本报告 + findmnt /etc 输出作为附件提交

    截图_deepin-terminal_20260905120929.png

    截图_deepin-terminal_20260905120505.png

Reply Favorite View the author
All Replies
avatar
𰻞𰻝面
deepin
2026-09-05 14:26
#1

看不明白confused

Reply View the author
avatar
Abyss
deepin
2026-09-05 14:30
#2
𰻞𰻝面:

看不明白confused

看终端的两个图片 driver.list  删不掉。也不能创建同名的覆盖掉
Reply View the author
avatar
𰻞𰻝面
deepin
2026-09-05 14:44
#3
Abyss:
看终端的两个图片 driver.list  删不掉。也不能创建同名的覆盖掉

直接用 ”最全驱动PE“ 访问磁盘删除,或者DiskGenius强制移除

Reply View the author
avatar
Abyss
deepin
2026-09-05 15:13
#4
𰻞𰻝面:

直接用 ”最全驱动PE“ 访问磁盘删除,或者DiskGenius强制移除

没找到deepin可以用的软件包
Reply View the author
avatar
𰻞𰻝面
deepin
2026-09-05 19:43
#5
Abyss:
没找到deepin可以用的软件包

这个 PE下可以操作linux分区的

Reply View the author
avatar
Abyss
deepin
2026-09-08 22:34
#6
𰻞𰻝面:

这个 PE下可以操作linux分区的

刚刚更新了25.2.2版本。现在暂时没有了。
Reply View the author