我有一个 500 GB 的磁盘,上面有一个 XFS 文件系统(编辑:操作系统位于另一个磁盘上)。在这个磁盘上,我有原始数据的多个硬链接副本形式的备份数据。每次新备份后,我都会删除包含最旧备份数据的目录。相应的rm
进程有时不会终止(并且消耗大量CPU)。杀死它(-9)没有帮助,只有重新启动系统才有帮助。
我尝试xfs_repair
在该卷上运行。然而,我似乎没有足够的 RAM(机器有 4 GB RAM 并且仅支持 32 位)。
机器的位置使我很难实际接触硬盘。
如何修复我的文件系统和/或终止rm
?
编辑:我xfs_repair -v -t 1 /dev/disk/xxx
和 一起跑xfs_repair version 3.1.7
。编辑:输出:
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- agno = 0
failed to create prefetch thread: Resource temporarily unavailable
- agno = 1
failed to create prefetch thread: Resource temporarily unavailable
- agno = 2
failed to create prefetch thread: Resource temporarily unavailable
- agno = 3
failed to create prefetch thread: Resource temporarily unavailable
- agno = 4
failed to create prefetch thread: Resource temporarily unavailable
- agno = 5
failed to create prefetch thread: Resource temporarily unavailable
- agno = 6
failed to create prefetch thread: Resource temporarily unavailable
- agno = 7
fatal error -- calloc failed in dir_hash_init
答案1
您是否尝试过strace
该rm
过程以便了解它的作用?当删除大量文件时,XFS 的速度可能会非常慢。我曾经愚蠢地使用过ccache
XFS,移动所有其他文件、格式化文件以及将文件移回原处,比尝试移动rm -r
数百万个ccache
文件要快得多。如果我让它顺其自然的话,它最终还是会终止。
至于xfs_repair
,我从来没有注意到它使用了大量内存,但我所有的机器都有足够的内存,所以......
您可以添加交换(如果有帮助的话)。或者,您可以将块设备(通过 OpenVPN 或 SSH 隧道使用 NBD)导出到具有更多可用 RAM 的计算机,尽管我不确定这是否比传输整个文件系统的映像(可能使用xfsdump
)更快或更慢。取决于xfs_repair
在此过程中需要读取/写入多少数据。
答案2
从 256Mb SGI Indigo 2 开始,我记得 XFS 检查可能是内存堵塞。我们必须对 2Gb 以上的文件使用 XFS。如果出现问题,我们将数据备份到外部驱动器 (scsi) 并在重新格式化出现问题的数据文件系统后进行恢复。
当然,只有在您有足够的驱动器容量(500Gb USB 3.0 驱动器不到 50 欧元)并且您的系统不在同一分区上(您的问题并不能 100% 清楚地说明这一点)时才有效。