我在硬盘驱动器 (/dev/sdb3) 上有一个交换分区,但最终失败了。驱动器被移除并更换。创建了一个新的交换,更新了 fstab 并打开了 (/dev/sdc3),但旧的交换仍然列在 /proc/swaps 中,但带有(deleted)
.
[root@server01 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sdc3 partition 4194300 0 -2
/dev/sdb3\040(deleted) partition 4194300 0 -1
/dev/sda3 partition 4194300 0 -3
我试图删除交换。 swapoff /dev/sdb3
失败,没有这样的文件或目录。swapoff -a 和 swapon -a 似乎没有任何错误,但 /proc/swaps 仍然列出已删除的交换。
如何删除不存在的交换?如果需要,系统还会尝试使用这块交换空间吗?那时会发生什么?
附加背景:服务器无法重启,通过热插拔接口更换了驱动器。这些驱动器是 AHCI SATA 驱动器,不通过 RAID 控制器、HBA 或任何其他特殊接口。尽管 /dev/sdb 失败且不再存在,但新驱动器在插入同一端口时变为 /dev/sdc。/dev/sda 存在并且在整个过程中运行良好。
参考:另一位用户询问是什么原因导致交换显示为已删除,但我知道原因,只是不知道如何删除它。
您需要重新启动系统。
在写入数据时,内核应该忽略任何已删除的交换分区/文件。
在读取时,它试图交换页面的任何进程都将被终止(我不确定发送了什么信号,但我相信它与尝试访问包含无法纠正的内存错误的页面时发送的信号相同) . 根据确切的内核配置,这也可能导致内核崩溃,使系统崩溃。这是理想情况下应该重新启动的重要原因,因为停用交换空间会导致存储在那里的任何页面再次被换入或移动到其他交换空间,因此停用不存在且具有数据存储的交换空间可能会导致进程被终止,恕不另行通知。
在您的情况下,您在有问题的交换空间上没有任何数据,因此停用它应该是安全的。但是,正如您所发现的,用于停用交换空间的命令行工具在不存在的设备上无法正常工作。为了将来参考,请确保在断开连接之前停用故障存储设备上的任何交换空间,这样您就可以避免这种情况。
此外,您可能需要在
/etc/fstab
重新启动后再次更新。活动但不存在的交换分区仍保留对已移除存储设备的引用,该存储设备将在重新启动时释放。在您重新启动之前,设备枚举顺序将不同于通常的顺序,因此当前/dev/sdc
可能会/dev/sdb
在重新启动时变为。