可以从错误的 fsck 中恢复吗?

可以从错误的 fsck 中恢复吗?

我的 HTPC(使用 ext4 文件系统)中有一块 3TB 的 WD Red 磁盘,里面有电影和音乐。几天前电源坏了,所以我把磁盘拿来,放在一个外部 USB 盒里,里面通常有一个 2TB 的备份磁盘,然后把它连接到运行 Ubuntu 14.04 的服务器上。但是我无法安装它,因为服务器声称它有错误。这并不奇怪,因为当 PSU 坏掉时 HTPC 一直在运行,所以我启动了一个 shell:

sudo fsck -y /dev/sde

它运行了一段时间,完成后我就可以安装驱动器了。但是现在它只有一个空的 2TB 分区,而不是之前约 80% 满的 3TB 分区。我现在让 Testdisk 分析它。但是还有其他方法可以逆转 fsck 更改吗?还是我应该把它当作一个教训,重新开始添加媒体的漫长过程?

更新: 我不确定我是否理解正确,但是磁盘分区似乎认为该分区仍在使用完整磁盘:

# gdisk -l /dev/sde
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sde: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): CFAA3FF0-DE38-4FAD-B13B-91811BD71821
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2925 sectors (1.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      5860532223   2.7 TiB     0700  primary

但如果我安装它,它只有 2TB:

# mount /dev/sde1 /mnt
# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/sde1       2.0T   71M  1.9T   1% /mnt

不过,关于它的内容不多:

# ls -altR /mnt
/mnt:
total 24
drwxr-xr-x  26 root root  4096 Jul 18 20:54 ..
drwxr-xr-x.  3 root root  4096 Jul  8 12:45 .
drwx------.  2 root root 16384 Jul  8 12:45 lost+found

/mnt/lost+found:
total 20
drwxr-xr-x. 3 root root  4096 Jul  8 12:45 ..
drwx------. 2 root root 16384 Jul  8 12:45 .

答案1

外部 USB 设备通常会对超过 2TiB 的磁盘执行以下两项操作之一:

  • 它们将 512 字节扇区转换为 4096 字节扇区,从而使磁盘(最大 16TiB)能够通过 32 位指针进行访问。只要访问磁盘,这种方法就可以正常工作仅有的外部机箱。磁盘一定不可以在这些机箱和通过主板直接访问之间来回交换。这样做可能会导致分区表损坏,并可能导致文件系统损坏。
  • 它们以 2TiB 为单位“滚动访问”。这样磁盘看起来要么是 2TiB,要么是真实大小除以 2TiB 的余数——对于 3TiB 磁盘,通常约为 700GiB。(请注意,TB != TiB;请参阅这里了解详情。)此行为是一个严重的问题,它实际上阻止了在具有此行为的机箱中使用大磁盘。将内部使用过的磁盘放入此类机箱通常会导致分区表损坏,如果您尝试使用它,则可能导致文件系统损坏。

在您的输出中,我没有看到任何这些问题的证据gdisk,但不清楚该输出是来自通过 USB 驱动器还是其他方式连接的磁盘。此外,可以想象“翻转”问题可能仍在发生,但外壳报告的是磁盘的真实大小。

还有一点:你说你做了sudo fsck -y /dev/sde。这是在执行文件系统检查整个磁盘。但是,大多数磁盘都是分区的,输出gdisk表明您的磁盘已分区。因此,您应该执行 on fsck/dev/sde1而不是 on /dev/sde。如果您准确报告了这一点,那么可以想象您实际上通过检查整个磁盘而不是分区而损坏了文件系统。通常,fsck当您执行此类操作时,我希望报告错误,但也许您在这方面运气不好。

最重要的是你应该停止使用外部机箱中的磁盘,至少除非你能验证你的外壳是不是进行任何类型的“翻译”或“翻转”。相反,直接将其插入计算机主板即可访问。您可能仍需要修复问题,但至少每次写入磁盘时都不会产生新问题。

相关内容