结论
从死机服务器中提取磁盘后,如何从包含 LVM2 分区的硬盘中恢复文件?
简单来说
我的无头电子邮件服务器设备停止响应网络连接尝试(IMAP、SSH、Ping 等),并且使用 USB 闪存驱动器上的安装/救援映像进行恢复的尝试也失败了。
该设备是一个专有的即插即用设备,基于 Debian 的 PowerPC 端口,具有基于 Web 的管理功能。
我有备份,但它们不完整(备份后有新电子邮件等)。我需要从此磁盘恢复数据。
我卸下了硬盘并通过 SATA 转 USB 适配器将其连接到台式电脑上新安装的 Ubuntu 16.04。
我发现该设备使用了 LVM,但我无法在恢复 PC 上安装 LVM 分区。报告了硬件错误。
如何恢复数据?
详细信息
我有一个无头 Linux 邮件服务器设备停止工作了。它在 PowerPC (MPC8313E) 上运行定制的 Debian。尝试恢复它后,我移除了硬盘并使用 SATA-USB 适配器将硬盘连接到 Ubuntu 16.04 x86_64 台式电脑。
Ubuntu 抱怨 LVM2,所以我尝试了sudo apt-get install lvm2
一下,并尝试了有关 LVM2 的一些信息,之后我尝试了以下操作
$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/bubba/storage
LV Name storage
VG Name bubba
LV UUID TlYu8Y-JahI-lnNT-Y8Tk-w8TE-CEn7-WD8Ytc
LV Write Access read/write
LV Creation host, time ,
LV Status available
# open 1
LV Size 921.08 GiB
Current LE 235797
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
$ sudo pvs
/dev/bubba/storage: read failed after 0 of 4096 at 0: Input/output error
/dev/bubba/storage: read failed after 0 of 4096 at 989004234752: Input/output error
/dev/bubba/storage: read failed after 0 of 4096 at 989004292096: Input/output error
/dev/bubba/storage: read failed after 0 of 4096 at 4096: Input/output error
这是磁盘分区
我尝试了一些进一步的操作:
$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "bubba" using metadata type lvm2
$ sudo lvchange -an bubba/storage
$ sudo vgchange -an bubba
0 logical volume(s) in volume group "bubba" now active
$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "bubba" using metadata type lvm2
$ sudo vgchange -ay bubba
1 logical volume(s) in volume group "bubba" now active
$ sudo lvscan
ACTIVE '/dev/bubba/storage' [921.08 GiB] inherit
$ sudo lvchange -ay bubba/storage
$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/bubba/storage
LV Name storage
VG Name bubba
LV UUID TlYu8Y-JahI-lnNT-Y8Tk-w8TE-CEn7-WD8Ytc
LV Write Access read/write
LV Creation host, time ,
LV Status available
# open 0
LV Size 921.08 GiB
Current LE 235797
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
$ sudo vgdisplay bubba
--- Volume group ---
VG Name bubba
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 921.08 GiB
PE Size 4.00 MiB
Total PE 235797
Alloc PE / Size 235797 / 921.08 GiB
Free PE / Size 0 / 0
VG UUID 1AHmxk-we3d-86Ji-UxJ1-jO35-ViDm-swxwRT
$ sudo lvmdiskscan
/dev/ram0 [ 64.00 MiB]
/dev/bubba/storage [ 921.08 GiB]
/dev/ram1 [ 64.00 MiB]
/dev/sda1 [ 294.09 GiB]
/dev/ram2 [ 64.00 MiB]
/dev/ram3 [ 64.00 MiB]
/dev/ram4 [ 64.00 MiB]
/dev/ram5 [ 64.00 MiB]
/dev/sda5 [ 4.00 GiB]
/dev/ram6 [ 64.00 MiB]
/dev/ram7 [ 64.00 MiB]
/dev/ram8 [ 64.00 MiB]
/dev/ram9 [ 64.00 MiB]
/dev/ram10 [ 64.00 MiB]
/dev/ram11 [ 64.00 MiB]
/dev/ram12 [ 64.00 MiB]
/dev/ram13 [ 64.00 MiB]
/dev/ram14 [ 64.00 MiB]
/dev/ram15 [ 64.00 MiB]
/dev/sdf1 [ 9.32 GiB]
/dev/sdf2 [ 921.09 GiB] LVM physical volume
/dev/sdf3 [ 1.10 GiB]
1 disk
20 partitions
0 LVM physical volume whole disks
1 LVM physical volume
结尾
$ sudo mount /dev/bubba/storage /mnt/usb
mount: wrong fs type, bad option, bad superblock on /dev/mapper/bubba-storage,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
$ dmesg | tail -n 15
[ 1108.474708] sd 5:0:0:0: [sdf] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[ 1108.474717] sd 5:0:0:0: [sdf] tag#0 Sense Key : Hardware Error [current]
[ 1108.474722] sd 5:0:0:0: [sdf] tag#0 Add. Sense: No additional sense information
[ 1108.474729] sd 5:0:0:0: [sdf] tag#0 CDB: Read(10) 28 00 01 2a 55 41 00 00 38 00
[ 1108.474734] blk_update_request: I/O error, dev sdf, sector 19551553
[ 1250.060801] sd 5:0:0:0: [sdf] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[ 1250.060810] sd 5:0:0:0: [sdf] tag#0 Sense Key : Hardware Error [current]
[ 1250.060815] sd 5:0:0:0: [sdf] tag#0 Add. Sense: No additional sense information
[ 1250.060822] sd 5:0:0:0: [sdf] tag#0 CDB: Read(10) 28 00 01 2a 55 41 00 00 38 00
[ 1250.060827] blk_update_request: I/O error, dev sdf, sector 19551553
[ 1365.599683] sd 5:0:0:0: [sdf] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[ 1365.599692] sd 5:0:0:0: [sdf] tag#0 Sense Key : Hardware Error [current]
[ 1365.599696] sd 5:0:0:0: [sdf] tag#0 Add. Sense: No additional sense information
[ 1365.599703] sd 5:0:0:0: [sdf] tag#0 CDB: Read(10) 28 00 01 2a 55 41 00 00 38 00
[ 1365.599709] blk_update_request: I/O error, dev sdf, sector 19551553
我是否可以正确地得出结论,我不可能从该磁盘安装或恢复任何内容 - 或者我可以尝试其他方法吗?
答案1
恢复
通过安装恢复工具,我可以从 LVM 分区中提取文件,而无需挂载它测试磁盘
就像是
sudo apt install testdisk
然后
sudo testdisk /dev/bubba/storage
我接受了 testdisk 建议的默认值(分区类型等)。
这显示了一个文本用户界面(TUI),让我浏览到包含我的数据的目录并将其内容复制到我的台式电脑上的驱动器中。
它报告了一小部分文件的错误(例如 50000 个文件中的 50 个)。恢复的文件是可读的框文件 - 尽管有些文件的内容完全相同。可能是由于 dovecot 管理磁盘空间的方式,也可能是由于 testdisk 恢复数据的方式,它们看起来不像是我见过的文件系统损坏的那种交叉链接。
我认为这是成功的,我现在可以研究如何将我恢复的文件与我能从备份中恢复的文件合并并消除重复项。我应该能够生成一组可用于电子邮件后端或前端应用程序的文件。
除了作为该工具的新用户之外,我与 testdisk 没有任何联系。
概括
- 从死机系统移除磁盘
- 将磁盘连接到新安装的 Ubuntu PC
- 安装 LVM 并尝试挂载文件系统
- 安装 testdisk 并使用它将文件夹复制到 Ubuntu PC
答案2
有趣的是,我发现这个答案存在与完全相同的专有设备有关的问题!
就我的情况来说,系统根本就无法运行。磁盘的 SMART 状态显示正常,但坏块数量也逐渐增加,大约有 1250 个。
设备备份工具从未真正起作用,并且我的手动备份有点旧了。
Testdisk 能够恢复部分数据,但无法恢复其他数据。经过多次尝试,我做了以下操作。
- 我买了一个新的USB硬盘,大小是坏盘的两倍。
- 我在新磁盘上创建了一个 1TB 的空白分区。
- 我用了救援分几次复制旧分区。成功率高达 99.99%(复制速度在接近结束时降至 100 B/s)。使用地图文件使该过程增量且可重新启动,尤其是在存在硬件问题的设备上。
- 由于该分区是 LVM 组的物理卷,因此无法将其与原始卷一起安装。低级 ddrecue 操作使其成为重复的 PV。最简单的方法是关闭系统,拔下旧磁盘并重新启动系统。干预 LVM PV、VG、激活和安装的替代方案相当麻烦。
- 检查文件系统。我建议使用带有 -z undo_file 的 esfsck。
总而言之,我认为我恢复了大部分数据。我还没有遇到损坏的文件。