Sudo updateb `/var/lib/mlocate/mlocate.db' 由于驱动器故障而被锁定,如何永久解决?

Sudo updateb `/var/lib/mlocate/mlocate.db' 由于驱动器故障而被锁定,如何永久解决?

这个 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

两者restartstop不会删除临时大 .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_MOUNTSPRUNEFS和变量在(5)中有详细记录PRUNENAMESPRUNEPATHSupdatedb.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

相关内容