![如何删除不再存在的交换分区?](https://linux22.com/image/130443/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E4%B8%8D%E5%86%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E4%BA%A4%E6%8D%A2%E5%88%86%E5%8C%BA%EF%BC%9F.png)
我的硬盘驱动器上有一个交换分区 (/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 存在并且在整个过程中工作正常。
参考:另一位网友提问是什么导致交换显示为已删除,但我知道原因,只是不知道如何消除它。
答案1
您需要重新启动系统。
在写入数据时,内核应该忽略任何已删除的交换分区/文件。
读取时,它尝试交换页面的任何进程都将被终止(我不确定发送什么信号,但我相信它与尝试访问包含不可纠正的内存错误的页面时发送的信号相同) 。根据具体的内核配置,这还可能导致内核恐慌,从而导致系统崩溃。这是您理想情况下应该重新启动的重要原因,因为停用交换空间会导致存储在那里的任何页面再次交换或移动到其他交换空间,因此停用不存在且具有数据存储的交换空间可能会导致流程被终止,恕不另行通知。
就您而言,您没有有关交换空间的任何数据,因此停用它应该是安全的。但是,正如您所发现的,用于停用交换空间的命令行工具在不存在的设备上无法正常工作。为了便于将来参考,请确保在断开故障存储设备之前停用其上的所有交换空间,这样就可以避免出现类似情况。
/etc/fstab
此外,重新启动后您可能需要再次更新。活动但不存在的交换分区仍然保留对已删除存储设备的引用,该引用将在重新启动时释放。在您重新启动之前,设备枚举顺序将与通常的顺序不同,因此重新启动后/dev/sdc
可能会变成当前的顺序/dev/sdb
。