我需要减少我的 /tmp LV,因此我输入此命令:
$ sudo lvreduce -r -L -2G /dev/myVG/tmp
Do you want to unmount "/tmp" ? [Y|n] y
umount: /tmp: target is busy.
fsadm: Cannot proceed with mounted filesystem "/tmp".
/sbin/fsadm failed: 1
Filesystem resize failed.
因此我进行了调查fuser
,lsof
但他们什么也没显示:
$ sudo fuser -vm /tmp
USER PID ACCESS COMMAND
/tmp: root kernel mount /tmp
$ sudo lsof /tmp
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
Output information may be incomplete.
lsof: WARNING: can't stat() fuse file system /run/user/1001/doc
Output information may be incomplete.
$ sudo lsof +f -- /tmp
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
Output information may be incomplete.
lsof: WARNING: can't stat() fuse file system /run/user/1001/doc
Output information may be incomplete.
$
EDIT0:在安装 Ubuntu 20.04 之前,我手动创建了 /tmp(以及其他分区):
$ mount | grep -w /tmp
/dev/mapper/myVG-tmp on /tmp type ext4 (rw,relatime)
EDIT1:我也在 Ubuntu 恢复模式下尝试了相同的命令,但都无法fuser
向lsof
我显示哪个进程正在锁定 /tmp 文件系统。
lsof 手册很难理解。有谁知道是否有其他 lsof 选项可以向我显示更多最终将锁定文件系统的进程?
答案1
您唯一的选择是关闭系统并启动到备用环境或 LiveUSB。没有lsof
或fuser
命令会列出 SystemD 系统用于/tmp
存储的内容。
SystemD 以及其他东西(关键系统进程等)都写入/tmp
- 这通常是你不创建 LV 或任何东西/tmp
并让它存在于易失性内存中的原因,这是快得多而不是将临时文件写入磁盘。
恢复环境也使用/tmp
内核等以及写入其中的关键 systemd 资源。在这里,您需要从另一个启动盘进入系统,激活 LVM 环境,然后在出现问题时从那里调整 LV 的大小不在您的特殊 LV 中写入或使用的数据/tmp
。
我还建议,除非您的 RAM 非常紧张,否则请删除 LV /tmp
,并将其替换为tmpfs
驻留在 RAM 中且在重启时被删除的 LV。这就是为什么/tmp
它通常不在磁盘上但tmpfs
在大多数安装中。