我的系统有以下分区:
- 戴尔实用程序
- Windows 7的
- Ubuntu 14.04(64 位)- 扩展
- /home-扩展
- virtualbox-扩展
- 交换 - 扩展
(具有 Ubuntu 双启动和独立主页/“其他数据”分区的戴尔机箱)
事件顺序
- 发行版升级至 16.04.1,显然成功了
- 重新启动并进入紧急模式,如下所述这里
- 使用 systemctl 等失败;建议通过 GRUB 使用 Upstart,启动到桌面
- 下一次启动(进入紧急模式)没有成功;现在 /home 分区不可用
- 通过 USBDrive 启动;/home 仍然不可用,被 gparted 列为“未知分区”
- 通过 fdisk、testdisk 等进行长时间的调查。维基百科,指南表明所有超级块均已损坏,没有可用的备份。我不是恢复专家,但这似乎不寻常。
- 将测试磁盘映像放入“virtualbox”分区
- 按照描述的过程这里没有成功,包括最后使用
mke2fs -S
。 - testdisk 更深层次的搜索找到了分区,但没有找到超级块;并出现了类似这样的消息
No ext2, JFS, Reiser, cramfs or XFS marker
- photorec 等工具可以检索一些文件,但它们是乱码,缺少文件名/结构,而且由于它是 /home 分区,许多文件都是加密的
- 由于我有该分区和原始数据的备份,因此决定删除并替换 /home 分区,成功了。启动到“home-new”并进行设置...
- 以及下一个启动时,我惊讶地发现“home-new”和“virtualbox”分区都不可用。同样的超级块问题。好吧,太棒了。
- 使用 USBDrive,在不同的磁盘位置重新创建主分区;这看起来很稳定。删除“home-new”。
- 意识到 /home 的备份和一些关键数据位于现在无法读取的分区上;获取一个 USB 磁盘并在上面制作一个映像
现在的情况
我的分区是:
- DellUtility(确定)
- Windows 7(可以)
- Ubuntu 16.04(正常)
- /home-new(坏的,已删除,与原始 /home 位于同一磁盘位置)- 扩展
- /home(似乎没问题,在不同的磁盘位置)- 扩展
- virtualbox(不好)-扩展
- 交换(OK)-扩展
“virtualbox”分区约为 550GB。它不可读,并且没有有效的超级块。
其中的重要数据:* 我原来的 /home 分区的测试磁盘映像,约 50GB,本身无法读取,没有有效的超级块* 一些来自 /home 的原始数据,未经 Crashplan 处理。虽然还不足以成为严重问题,但足以让人烦恼。
请注意,第一双靴子很好——它在下一个启动时出现问题。“virtualbox”分区已作为 Testdisk 映像备份在 USB 驱动器上。
fdisk:
sudo fdisk -l /dev/sda
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x15642c74
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 63 80324 80262 39.2M 6 FAT16
/dev/sda2 18395136 427995135 409600000 195.3G 7 HPFS/NTFS/exFAT
/dev/sda3 427995136 1920120831 1492125696 711.5G f W95 Ext'd (LBA)
/dev/sda4 1920122880 1953523711 33400832 15.9G 82 Linux swap / Solaris
/dev/sda5 438233088 489433087 51200000 24.4G 83 Linux
/dev/sda6 773240832 1920120831 1146880000 546.9G 83 Linux
/dev/sda7 633921536 736321535 102400000 48.8G 83 Linux
Partition 1 does not start on physical sector boundary.
Partition table entries are not in disk order.
dumpe2fs:
sudo dumpe2fs /dev/sda6
dumpe2fs 1.42.13 (17-May-2015)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sda6
Couldn't find valid filesystem superblock.
分手:
sudo parted -l
Model: ATA ST1000DM003-1CH1 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 32.3kB 41.1MB 41.1MB primary fat16 boot
2 9418MB 219GB 210GB primary ntfs
3 219GB 983GB 764GB extended lba
5 224GB 251GB 26.2GB logical ext4
7 325GB 377GB 52.4GB logical ext4
6 396GB 983GB 587GB logical
4 983GB 1000GB 17.1GB primary linux-swap(v1)
假设
你可以想象,这非常令人沮丧。注意“分区 1 未从物理扇区边界开始。”fdisk 中出现警告,之前从未出现过。
通过去分区不是从物理扇区边界开始的?,我怀疑存在一些对齐问题,会混淆低级磁盘实用程序,这是由 16.04 升级引入的,但这只是怀疑。
磁盘管理:
sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 8C15FD44-F839-4637-853E-C092F0959C48
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 209964007 sectors (100.1 GiB)
Number Start (sector) End (sector) Size Code Name
1 63 80324 39.2 MiB 0700 Microsoft basic data
2 18395136 427995135 195.3 GiB 0700 Microsoft basic data
4 1920122880 1953523711 15.9 GiB 8200 Linux swap
5 438233088 489433087 24.4 GiB 8300 Linux filesystem
6 773240832 1920120831 546.9 GiB 8300 Linux filesystem
7 633921536 736321535 48.8 GiB 8300 Linux filesystem
问题
- 我该如何确定原因?我的系统现在看起来很稳定,但我对进一步的低级磁盘写入持谨慎态度。
- 是否有可能恢复没有超级块的“virtualbox”分区 - 然后希望恢复其中没有超级块的“home”分区映像?
也许超级块是完整的,但是通过系统无法识别的偏移。
答案1
取得了一些进展(并给出了部分答案):
注意到在一些应用程序(例如系统监视器),在某个时候,交换空间被报告为 546.9GB。交换空间应该是 15.9GB,这个数字可疑地接近损坏的“virtualbox”分区。
lsblk
显示 /dev/sda6(分区)也通过 cryptswap1 映射到交换区。
/etc/crypttab 包含:
cryptswap1 /dev/sda6 /dev/urandom swap,cipher=aes-cbc-essiv:sha256
确凿的证据!所以现在的假设是 16.04 升级未能正确地重新配置交换,并且在之后的启动中,交换启动破坏了分区(这可以解释为什么第一次启动成功)。
- 禁用所有交换(使用的技术如何处理“/dev/mapper/cryptswap1 的磁盘驱动器尚未准备好或不存在”?)
- 重新启动并确认无交换状态
- 使用 testdisk 进行调查。它尝试将活动分区标记为已删除,但找不到该分区,因此退出。
- 确认状态不变
sudo dumpe2fs /dev/sda6
dumpe2fs: Bad magic number in super-block while trying to open /dev/sda6 Couldn't find valid filesystem superblock.
- 因此,请使用上面描述的最后方法:
sudo /sbin/mkfs.ext4 -S -v /dev/sda6
sudo mount /dev/sda6 /media/USER/virtualbox-image/
- ... ls 列出了一些文件/目录!
好吧,万岁!!
我无法访问这些文件,因此运行了 fsck。错误太多了,我放弃了 preen 和交互模式,只使用了 -y。以下是一些 fsck 消息供参考:
- 组描述符 4349 校验和为 0xf6d0,应为 0x2ed1。已修复。
- /dev/sda6:Inode 13434881 正在使用中,但已设置 dtime。已修复。
- /dev/sda6:Inode 13434881 具有额外的大小(336),这是无效的,已修复。
- /dev/sda6:Inode 13434881 已设置 INDEX_FL 标志,但不是目录。HTREE INDEX 已清除。
- /dev/sda6:Inode 13434881,i_blocks 为 137157068659908,应该为 0。已修复。
- 发现属于损坏的孤立链接列表的 Inode。修复?是
- Inode 13434886 是孤立 Inode 列表的一部分。已修复。
- Inode 13434886 已设置 imagic 标志。清除?是
- Inode 13434886 有一个额外的大小 (62340),这是无效的,修复了吗?是的
- Inode 13434886 在不支持压缩的文件系统上设置了压缩标志。清除?是
- Inode 13434886 已设置 INDEX_FL 标志但不是目录。清除 HTree 索引?是
- Inode 13434886,i_size 为 18440780219561279704,应为 0。修复?是的
- Inode 13434886,i_blocks 为 219803506189340,应为 0。修复?是的
- Inode 13495674 有一个坏的扩展属性块 21496064。清除了吗?是
- Inode 13495674 有非法块。清除?是
- inode 13495674 中的非法块 #0 (1376321536)。已清除。
- 文件 /image_new_superblock.dd(inode #45605,修改时间 2015 年 10 月 28 日星期三 12:58:24)有 1 个被多次认领的块,与 1 个文件共享:...(inode #13455772,修改时间 1996 年 7 月 4 日星期四 03:48:32)是否克隆被多次认领的块?是
上面的许多屏幕,到处都是时间戳。 fsck 实际上由于内存分配而中止了几次,哈哈。最终它运行正常,并显示以下消息:
- 运行额外的过程来解决被多个 inode 声明的块...
- 1B 阶段:重新扫描多重认领的区块
- 步骤 1C:扫描目录中具有多重认领块的 inode
- 1D 阶段:协调多重认领的区块
现在可以挂载分区并复制数据。许多文件似乎仍然完好无损。
但还有很多事情要做;这个分区已受到影响三周了。据推测,如果我在最初制作的图像上重复此操作,我可以恢复更多或几乎所有的数据。仍然需要调查“分区 1 不是从物理扇区边界开始的。”但是,看起来不错!