我正在尝试将服务器可用的交换空间从 4GB 增加到 16GB,但目前 XFS +某物让这变得不可能。
我有一个托管操作系统 (CentOS 7) 的 SSD,带有启动分区和 LVM2 分区(安装的默认设置)。 LVM2 分区内部有 、 、 和 三个虚拟分区root
,home
占用swap
整个 LVM2 分区。同样,默认安装时,这些文件系统类型为 XFS。
我的简单愿望是缩小未充分利用的home
分区,为swap
分区腾出空间。现在发现缩小 XFS 分区是不可能的,我陷入了备份主驱动器删除分区并通过从备份恢复将其恢复为较小大小的兔子洞。
现在的问题是我似乎无法释放主目录或分区。退出 GUI、注销并在终端以 root 身份重新登录后,最初我无法卸载主目录。虽然有东西正在使用,lsof
但fuser
上面没有显示任何打开的东西。
我发出了
umount -f home
这似乎在卸载家庭中起作用。我现在可以自由地安装和卸载 home,而无需-f
标注,这似乎很可疑。然而现在正在尝试
lvremove /dev/centos/home
返回的消息是
Logical volume centos/home in use.
我在这里查看了很多问题和答案,但都不是以下内容:
- NFS服务
- 打开文件
- 使用主要、次要名称打开文件
- 活动标志(已尝试过
lvchange -an -v /dev/centos/home
,它还声称该卷正在使用中)
我找不到任何东西似乎可以暗示正在使用什么home
。如果我能得到一个不依赖于重新启动机器的解决方案,那将是理想的。
答案1
umount -f
不幸的是,只是从 VFS 中删除了一些东西没有实际上正在卸载。它只是不再出现在/proc/mounts
其中或任何地方,但它仍然被安装。没有明显的方法来检查仍在使用此安装的内容(或者它是否仍然存在,因为lsof
如果您使用不再存在的路径名,其他事情也会失败),缺少检查文件系统脏标志和希望一旦真正卸载后,这个问题就会被清除。
losetup
您可以手动检查一些内容,例如、cat /proc/mdstat
、dmsetup table
、 ...使用的设备或文件,并检查/proc/*/{maps,cwd,exe,fd/*}
对相关设备的引用(安装路径本身不再存在)。但这也可能并不能涵盖所有内容。
如果您找到这样的引用(例如正在运行的进程的打开文件描述符),您会发现您可以访问该文件并以您喜欢的任何方式修改它,从而证明文件系统仍然已安装并且完全可操作,尽管不可见。
我用一些代码来查找这种惰性卸载的存在,请注意它是针对不同的设备名称进行硬编码的。
isbusy() {
grep -E '^/dev/mmcblk(0p3|1p1) ' /proc/mounts || \
grep -E '^([^ ]+ ){3}b3:0[39] ' /proc/*/maps || \
find /proc/[0-9]*/exe /proc/[0-9]*/cwd /proc/[0-9]*/fd -exec stat -tL {} + \
| grep -E '^([^ ]+ ){6}b30[39]'
}
但它并不完整。
答案2
- 如果可能的话,为系统添加更多 RAM。交换不是一个解决方案,它只是一个临时的权宜之计,以防止系统因内存不足而崩溃。如果系统一直在交换,那么它真正需要的是更多的 RAM。
如果系统无法安装更多 RAM,那么值得考虑将其替换为可以安装的 RAM。
它不像交换分区那么快,因为它必须经过文件系统层(您不太可能注意到差异),但您可以在 /home 上创建一个大的空文件,并告诉系统使用该文件作为交换空间。例如
dd if=/dev/zero of=/home/swapfile bs=1M count=16384
mkswap /home/swapfile
编辑 /etc/fstab 并添加 /home/swapfile 作为更多交换空间
swapon -a
答案3
我认为你可以尝试lvresize
减少lv而不是使用lvremove
删除lv。通过这种方式,您可以避免lvremove
命令引入的问题。使用lvresize
减少 lv后,您可以使用lvresize
交换命令从 .swap 文件中添加卷centos VG
。