我需要减少我的 /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 选项可以显示更多最终会锁定该文件系统的进程?
您唯一的选择是关闭系统电源并引导至替代环境或 LiveUSB。没有
lsof
或fuser
命令会列出 SystemD 系统/tmp
用于存储事物。SystemD 除其他外(关键系统进程等)都写入
/tmp
- 这通常是为什么您不创建 LV 或任何东西/tmp
并让它存在于易失性内存中,这比写入临时文件的磁盘要快得多。恢复环境也
/tmp
因为内核和关键的系统资源写入那里而使用。这是您需要从另一个引导磁盘进入系统的地方,激活 LVM 环境,然后在您的特殊 LV 中没有数据写入或使用时从那里调整 LV 的大小/tmp
。我还建议,除非您的 RAM 非常昂贵,否则您删除
/tmp
LV 并将其替换为tmpfs
位于 RAM 中并在重新启动时被擦除的 LV。这就是为什么/tmp
通常不在磁盘上而是tmpfs
在大多数安装中的原因。