我的一个托管服务器有一些XFS问题。上次崩溃后,我的一些RRD文件夹被破坏了。
示例(抱歉,它是法语):
# rm *
rm: impossible de supprimer « create_rrd.sh »: La structure a besoin d'un nettoyage
rm: impossible de supprimer « old »: est un dossier
rm: impossible de supprimer « tcgraph.log »: La structure a besoin d'un nettoyage
rm: impossible de supprimer « tcgraph.rrd »: La structure a besoin d'un nettoyage正常的做法是在单个用户中重新启动系统,或者使用活动cd,然后在/dev/sda上运行xfs_repair。不幸的是(这太容易了),托管公司提供了一个选项,重新启动一张活cd,这是行不通的。访问数据中心不是一种选择。
似乎我根本无法触摸节点,每次我都会收到“结构需要清理”的信息。
因此,问题是:有人知道手工修复/修复XFS文件系统的方法吗?任何低级别的XFS操作工具都可以帮助您吗?
发布于 2011-01-28 01:07:01
简短的回答是否定的。
更长的答案是,尝试将所有内容复制到tmpfs ramdisk中,切换/转到tmpfs中,然后卸载硬盘文件系统,在修复驱动器文件系统时完全从ram上运行,这将是非常吸引人的。
我不是第一个想到这个问题的人,我找到了这条线,但是没有关于这个计划是否有效的信息。因为它的目的是擦拭驱动器,他们没有费心拆掉它。
为此,创建一个目录和mount -t tmpfs none /some/directory,然后开始使用系统的重要部分(sshd、挂载、umount、xfs工具、shell和所有运行它所需的库)的副本填充它,可能所有的/etc都要确定,最后是init.chroot监狱创建脚本在这里会有所帮助,拥有大约4GB的RAM也会有所帮助。在其中挂载proc的副本,如果使用devfs,也要挂载devfs的副本。使用/etc/ssh/ sshd _config的副本,设置sshd以启动另一个端口。将chroot发送到您的ramdisk,并确保所有工作正常,并且没有缺少库,然后在ramdisk中(在备用端口上)启动sshd,这样就可以在其中着色。检查是否可以将ssh插入其中(这可能还需要将/home目录复制到其中)(并在您可能拥有的任何防火墙上打开端口)。
现在,魔术开始了:您需要找到一个名为枢轴_根部的实用程序,而不是对tmpfs进行着色。它在生活中的唯一目的就是叫枢轴_根()。它在Debian上的中。pivot_root()的目的本质上是同时对每个进程进行着色。最初用于将initrd ramdisk映像移动/从initrd ramdisk映像移动到实际驱动器,如果这样做有效,那么您将从实际驱动器移动/从实际驱动器移动到ramdisk映像。因此,假设您在复制了所需的所有内容之后执行了mkdir /mnt/tmpfs; mount -t tmpfs none /mnt/tmpfs,下一步是mkdir /mnt/tmpfs/oldroot; pivot_root /mnt/tmpfs /oldroot (如果空间复制用完了,请卸载/mnt/tmpfs并再次挂载它,这一次是使用-o size=...,因为默认情况下只允许内存的一半)。
最后一步是卸载/oldroot。您需要卸载/oldroot/sysfs /oldroot/proc等等。如果您仍然得到“文件系统很忙”,您可以尝试强迫它,或者至少通过查看ls -l /proc/*/cwd /proc/*/fd/ | grep /oldroot/并杀死仍然引用它的所有文件(这可能包括未着色的ssh服务器)来跟踪打开的所有文件。在你开始杀人之前,确保你已经登录了那个备用的sshd )。显然不要杀死进程1 (init)。如果无法强制umount运行init,则需要使用chroot /oldroot /sbin/telinit u2 (您当前正在运行的2=runlevel,或者init可能会杀死所有内容,然后重新启动并重新启动),通过运行您在ramdisk中的“新”init,使init“升级”。为了让它使用/oldroot/dev/initctl ( ramdisk /dev/initctl是不一样的)(注意,telinit将使用/oldroot/dev/initctl与现有的init进程(即pivot_rooted到ramdisk )对话,所以启动的init将在ramdisk上,而不是/oldroot上)。
我不打算在这里的生产服务器上尝试这个。也许这个周末我会在家里试试。
https://serverfault.com/questions/227871
复制相似问题