这个 4.20.3 Arch 系统的 BTRFS 格式/
磁盘没有剩余可用空间。原来是mlocate的原因:
# du -h --exclude=Volumes -- * 2>/dev/null | sort -hr | head -2
11G var
9.6G var/lib/mlocate
问题Updatedb:无法打开“/var/lib/mlocate/mlocate.db”的临时文件接受的答案建议预先添加sudo
,但这不会改变任何事情:
# sudo updatedb
updatedb: `/var/lib/mlocate/mlocate.db' is locked (probably by an earlier updatedb)
/var/lib/mlocate 中似乎有一个临时文件正在耗尽所有磁盘空间:
# ls -lh var/lib/mlocate/
-rw-r----- 1 root locate 1.1M Oct 21 00:00 mlocate.db
-rw------- 1 root root 9.6G Dec 30 19:46 mlocate.db.PRvfsw
根本原因可能是.timer
挂起的更新作业吗?
# systemctl status updatedb.timer
* updatedb.timer - Daily locate database update
Loaded: loaded (/usr/lib/systemd/system/updatedb.timer; static; vendor preset: disabled)
Active: active (running) since Mon 2019-10-21 16:05:10 CEST; 2 months 9 days ago
Trigger: n/a
两者restart
都stop
不会删除临时大 .db 文件,并且updatedb
仍然返回locked
。
似乎有一个updatedb
进程仍在运行:
# ps -ef | grep updatedb
root 3249 1 99 Oct22 ? 213573-14:47:11 /usr/bin/updatedb
我知道我可以终止这个进程。根本原因很可能是 USB 记忆棒出现故障:
# ls /Volumes/RM_GUE__
ls: cannot access '/Volumes/RM_GUE__/'$'\001\020': Input/output error
ls: cannot access '/Volumes/RM_GUE__/)': Input/output error
虽然下次 USB 记忆棒出现故障时,/
会再次充满。
更新数据库配置文件
这些updatedb.conf
选项没有给我带来任何有用的过滤选项:
- 按路径:我无法猜测分区损坏后的名称
- 按文件系统:在这种情况下,VFAT 已损坏(且只读),但我无法预测将来哪个文件系统会损坏。
如何彻底且永久地解决此问题,例如通过限制updatedb.timer
可能运行的持续时间和/或跳过遭受输入/输出错误的磁盘,或限制文件大小LimitFSIZE=
甚至更好的方法?
答案1
mlocate
(参见)的文档man mlocate
导致updatedb
, 反过来又说
由某些选项修改的
PRUNE_BIND_MOUNTS
、PRUNEFS
和变量在(5)中有详细记录PRUNENAMES
。PRUNEPATHS
updatedb.conf
阅读该文档 ( man updatedb.conf
) 并查看该文件/etc/updatedb.conf
会显示两种可能的选项来满足您的要求:
PRUNEFS
以空格分隔的文件系统类型列表(如 /etc/mtab 中使用的),不应由updatedb
(8) 扫描。文件系统类型匹配不区分大小写。
PRUNEPATHS
不应由updatedb
(8) 扫描的以空格分隔的目录路径名列表。每个路径名必须完全采用 (1) 报告目录的形式locate
。
如果您的 USB 记忆棒和其他可移动媒体始终安装在下面,/Volumes
您可以将该目录添加到您的PRUNEPATHS
设置中/etc/updatedb.conf
。在我的 Debian 系统上这会导致
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /Volumes"
或者,如果您的 USB 记忆棒始终是 FAT 或 NTFS,您可以将这些文件系统类型添加到 指定的排除集中PRUNEFS
。