我有一个来自 Buffalo LinkStation 的磁盘,上面有一个无法安装的 XFS 分区。
将磁盘插入 Ubuntu 盒子上的 SATA->USB 盒。我得到以下信息:
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 63 594404 297171 83 Linux
/dev/sdb2 594405 1590434 498015 83 Linux
/dev/sdb4 1590435 976768064 487588815 5 Extended
/dev/sdb5 1590498 1863539 136521 82 Linux swap / Solaris
/dev/sdb6 1863603 976494959 487315678+ 83 Linux
问题分区是 /dev/sdb6。
$ sudo xfs_check /dev/sdb6
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_check. If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.
因此尝试 xfs_repair -L 选项让我陷入无法摆脱的境地:
$ sudo xfs_repair -L /dev/sdb6
Phase 1 - find and verify superblock...
superblock read failed, offset 382252089344, size 131072, ag 89, rval -1
fatal error -- Input/output error
使用 photorec,我能够从该分区中提取一些文件,因此数据在那里,磁盘物理上可以正常工作。但是,超级块存在问题。
我该如何恢复该分区?
答案1
XFS 重放错误后,根据错误消息尝试再次 MOUNT 该分区。
如果一切都太混乱,我强烈建议下载UFS 探索者帮助从另一个系统进行深度文件恢复。
答案2
当我今天(大约 9.5 小时前)遇到此问题时,上述答案对我没有帮助。我将在此介绍对我有用的解决方案,以及先前答案没有帮助的原因。
症状
- 突然之间,任何文件
/home
或列出的任何目录都无法保存/编辑等。 dmesg
在某处显示了xfs_do_force_shutdown called
一些其他 xfs 消息。xfs_repair
第一阶段失败,superblock read failed
随后fatal error -- Input/output error
- 我的磁盘的其余部分运行正常(包括
/
,只有 ie/home
无法工作)。 - 尝试
mount
会导致superblock cannot be found
(或类似的)错误,但没有提示下一步该做什么。
解决方案
该解决方案基于这个帖子Nigel Smith,XFS 的主要作者(如果我理解正确的话)。如果之前的链接过时了,我将在这里重新发布这些步骤。所有以下操作都必须按以下方式运行root
(显然)。
- 对驱动器进行长时间的自检: 。这可能需要一段时间。如果最近有一次长时间的测试(就像我的情况一样),
smartctl -t long /dev/sda
您也可以使用 运行一次短时间的测试。smartctl -t short /dev/sda
- 使用以下任一方法检查测试:
smartctl -l selftest /dev/sda
或smartctl -a /dev/sda
(后者显示所有内容,但您需要的信息几乎在最后)。 - 测试报告的最后一列称为
LBA_of_first_error
。这是磁盘上第一个错误的位置。从最新的测试(将编号为“#1”并位于列表顶部)中,获取显示的数字并将其除以 8 并截断为整数值(请参阅原始帖子以了解原因)。 - 然后,您将把这个特定的块清零。这将导致该位置处的特定文件损坏。(但如果你已经用尽了所有其他方法,那么几个损坏的文件就不是什么大问题了。)要做到这一点,请运行以下命令:
# dd if=/dev/zero of=/dev/sda conv=sync bs=4096 count=1 seek=*NUMBER_COMPUTED_EARLIER*
- 执行简短测试并等待一两分钟以查看结果。重复此操作,直到简短测试不显示任何错误。或者,您可以使用检查错误块的大致数量。
smartctl -A /dev/hda | egrep 'Reallocated|Pending|Uncorrectable'
在我的例子中,我重复了步骤 1 到 4,直到错误数降到 24 个。 - 跑步
xfs_repair /dev/sda
(没有标志-L
)。这可能会报告您应该尝试挂载文件系统,因为日志错误。 - 尝试安装该系统。就我而言,失败了,因此我必须运行
xfs_repair -L /dev/sda
删除日志的命令(这可能会导致数据被删除)。 - 安装您的文件系统并进行最近备份!
为什么上述解决方案不再有效
- 最初的帖子已有数年历史。与此同时,XFS 已发生足够多的改变,SuSE 团队认为它足够稳定,可以用作 的主要 FS
/home
。 xfs_check
已被废弃,取而代之的是xfs_repair -n
。- Debian 的解决方案非常麻烦,而且浪费时间。到目前为止,Debian才不是支持 UEFI 启动,并且该信息不是在他们的下载页面或主要 FAQ 页面上(在他们的 Wiki 上)。因此,为了使用它进行启动,您需要在 BIOS 中禁用 UEFI Secureboot,然后使用密钥进行启动。之后,您会注意到不默认安装 xfs 工具。因此,您只会
apt-get install xfsprogs
意识到,这是 Debian,他们的“稳定”软件包实际上落后了好几年。长话短说,xfs_repair /dev/sda
只是永远挂起。无法终止该进程(即使使用 sigterm)。 - UFS Explorer 是一款付费软件。
- photorec 仅支持特定文件类型(告别 GPG 密钥),并将所有任意名称的文件恢复到一个文件夹中。祝您好运,完成所有这些操作并找到相关信息。
答案3
我在“sda6”上有 XFS 分区。在 Lubuntu 上,它已损坏,无法修复,也无法在 13.10 上安装 XFS 分区。启动 Lubuntu 时,它显示应该修复并尝试启动修复 XFS 文件系统。当我第一次安装 Lubuntu 时,分区上显示未知。
Lubuntu 没有修复。使用命令xfs_check对我来说没有解决。
我终于解决了Debian 7并重新安装。检测到所有文件系统和通常挂载 XFS分割。
我读到过很多 XFS 文件系统的用户,所以我认为这是内核版本变化的问题,因为 Debian 7 使用的是版本3.2并正常挂载 XFS 且没有错误,但在具有最新内核的 Ubuntu 上3.11 无法解决 XFS 文件系统问题。
我尝试使用 CentOS 6.5,但是CentOS继续使用 RedHat 和旧的“稳定”内核。它不会被检测到自动 XFS。
我终于上 Debian 7 了备份所有数据在 XFS 分区上并重新创建分区以EXT4。
由于 RedHat 不会修复 XFS 读取分区和一些 XFS 问题(谷歌一下有多少用户没有解决 XFS 读取分区)我通常选择使用 Debian 进行备份并更改为与内核 3.11 兼容的新 EXT4/btrfs... 文件系统。
希望有人能帮忙。
答案4
我使用新下载的 Debian 8.7.1 在真实服务器上修复了我的 XFS 分区,只需将磁盘放在此系统上,它就会自动修复。 Centos 5 和 6 无法修复它