在 Ubuntu Server 14.04 LTS 上复制格式化为 VMFS 的 ~300GB VMDK 文件驱动器失败

在 Ubuntu Server 14.04 LTS 上复制格式化为 VMFS 的 ~300GB VMDK 文件驱动器失败

好吧,我将尝试彻底解释我的情况,所以请耐心听我说完。我目前的情况是这样的。我有一个 500GB 的硬盘,以前放在服务器上 - 它托管虚拟机 - 并且是 RAID 1 中的两个驱动器之一。我假设此时两个驱动器是相同的,但如果出于某种原因这个驱动器无法正常工作,或者我需要使用它,我还有另一个驱动器。

该驱动器通过板载 SATA 连接到一个小型 Linux 盒(它是 Intel 服务器 MiniITX 主板),运行 Ubuntu Server 14.04 LTS,专门为此目的全新安装。我已经安装了vmfs-tools,并授予了 访问权限vmfs-fuse,我使用它来安装驱动器:

sudo vmfs-fuse /dev/sda1 /mnt/recovery

这可以作为只读挂载成功运行(请注意,/dev/sdb 是我的启动驱动器,它们被交换了,因为我混淆了 SATA 端口)。我的 fdisk 如下:

taylor@nas:~$ sudo fdisk -l /dev/sda

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT.           Use GNU Parted.

Disk /dev/sda: 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/sda1               1   975699967   487849983+  ee  GPT

我可以成功读取包含有问题的文件的文件夹的内容dot-flat.vmdk

taylor@nas:~$ sudo ls /mnt/recovery/dot
dot-flat.vmdk  dot.vmdk  dot.vmx   vmware-1.log  vmware-3.log  vmware.log
dot.nvram      dot.vmsd  dot.vmxf  vmware-2.log  vmware-4.log

自然想测试一下以确保我能正确读取文件,希望内容没有被损坏,我尝试tailvmware.log

taylor@nas:~$ sudo tail /mnt/recovery/dot/vmware.log
2014-12-01T09:19:46.553Z| vmx| I120: VMIOP: Exit
2014-12-01T09:19:46.696Z| vmx| I120: Vix: [35957 mainDispatch.c:849]: VMAutomation_LateShutdown()
2014-12-01T09:19:46.696Z| vmx| I120: Vix: [35957 mainDispatch.c:799]:  VMAutomationCloseListenerSocket. Closing listener socket. 
2014-12-01T09:19:46.715Z| vmx| I120: Flushing VMX VMDB connections
2014-12-01T09:19:46.715Z| vmx| I120: VmdbDbRemoveCnx: Removing Cnx from Db for '/db/connection/#1/'
2014-12-01T09:19:46.715Z| vmx| I120: VmdbCnxDisconnect: Disconnect: closed pipe for pub cnx '/db/connection/#1/' (0)
2014-12-01T09:19:46.721Z| vmx| I120: VMX exit (0).
2014-12-01T09:19:46.721Z| vmx| I120: AIOMGR-S : stat o=1 r=3 w=0 i=0 br=49152 bw=0
2014-12-01T09:19:46.721Z| vmx| I120: OBJLIB-LIB: ObjLib cleanup done.
2014-12-01T09:19:46.721Z| vmx| W110: VMX has left the building: 0.

所以这没问题,可能不是驱动器问题。无论如何,我想检查 SMART 数据。在我将它们取出进行升级之前,驱动器运行良好。我安装了它,smartmontools然后:

taylor@nas:~$ sudo smartctl -a /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital RE3 Serial ATA
Device Model:     WDC WD5002ABYS-18B1B0
Serial Number:    WD-WCASY4933732
LU WWN Device Id: 5 0014ee 202b597b2
Add. Product Id:  DELL�
Firmware Version: 02.03B04
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.5, 3.0 Gb/s
Local Time is:    Sun Dec  7 01:55:02 2014 PST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x84)    Offline data collection activity
                    was suspended by an interrupting command from host.
                    Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0)    The previous self-test routine completed
                    without error or no self-test has ever
                    been run.
Total time to complete Offline
data collection:         ( 9480) seconds.
Offline data collection
capabilities:              (0x7b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003)    Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01)    Error logging supported.
                    General Purpose Logging supported.
Short self-test routine
recommended polling time:      (   2) minutes.
Extended self-test routine
recommended polling time:      ( 112) minutes.
Conveyance self-test routine
recommended polling time:      (   5) minutes.
SCT capabilities:            (0x303f)    SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   194   185   021    Pre-fail  Always       -       3291
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       196
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   056   056   000    Old_age   Always       -       32738
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       106
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       99
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       196
194 Temperature_Celsius     0x0022   108   105   000    Old_age   Always       -       39
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     32447         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

至少对我来说,这看起来像是一份针对旧驱动器的相当直观的 SMART 报告,尤其是对于通电时间为 32638 小时(1352 天!)的驱动器。我之前在另一个驱动器(RAID 对)上运行过该报告,如果我没记错的话,结果非常相似。

有问题的驱动器包含大约 8 个虚拟机,我可以轻松地从驱动器中拉取它们。为此,我使用了一个cp不同的驱动器的简单命令,就这样。该目标驱动器(操作系统正在运行的驱动器)有大约 700GB 的可用空间。问题始于cp访问所有 VMDK 文件中最大的(相差很大)文件。大多数 VMDK 大约为 25-30GB,而有问题的 VMDK 大约为 300GB。大型 VMDK 最初是作为 THICK VMDK 创建的。以下是它的作用cp

taylor@nas:~$ sudo cp /mnt/recovery/dot/dot-flat.vmdk ~/dot-flat.vmdk
cp: error reading ‘/mnt/recovery/dot/dot-flat.vmdk’: Input/output error
cp: failed to extend ‘/home/taylor/dot-flat.vmdk’: Input/output error

我读到的关于这笔Input/output error交易的所有信息都表明硬盘有问题。但我在两个硬盘上都遇到了同样的问题,而且 SMART 测试似乎没问题,所以我想可能是其他原因。文件大小也可能是一个因素。

因此,我决定尝试rsync,因为逐位复制可能更适合我。这个有点奇怪。起初,它似乎rsync运行良好,我可以访问ls -al目标目录,并看到临时文件大小稳步增加。但是,一旦目标文件达到适当的大小,它就会Input/output error像以前一样显示,然后rsync重新开始整个过程​​,删除它刚刚传输的文件(或至少部分删除)。真是令人沮丧。输出如下所示:

已经完成了一半多一点,一切顺利:

taylor@nas:~$ sudo rsync -av --progress /mnt/recovery/dot/dot-flat.vmdk ~/dot-flat.vmdk
sending incremental file list
dot-flat.vmdk
201,769,451,520  62%   95.50MB/s    0:20:30

完成后:

taylor@nas:~$ sudo rsync -av --progress /mnt/recovery/dot/dot-flat.vmdk ~/dot-flat.vmdk
sending incremental file list
dot-flat.vmdk
322,122,547,200 100%   81.94MB/s    1:02:29 (xfr#1, to-chk=0/1)
rsync: read errors mapping "/mnt/recovery/dot/dot-flat.vmdk": Input/output error (5)
WARNING: dot-flat.vmdk failed verification -- update discarded (will try again).
dot-flat.vmdk
    672,759,808   0%   85.96MB/s    1:00:52

真的,我最终想要的是 VMDK 中的一些文件。如果有办法直接挂载 VMDK,我很想知道,但我在网上看到的关于这个主题的所有内容都不起作用,主要是因为我有一个 VMFS 卷,而不是更直接的 EXT4。我想可能有一些解决方法,但我不太确定

我想我可以尝试将两个驱动器重新放入服务器,重新创建 ESXi VM 并以此方式提取数据吗?不行。它们所在的服务器是带有 SAS 6i/R RAID 控制器的 Dell Poweredge 1950,上面已经有一个不同的阵列。如果我愿意,我无法将驱动器重新放入并加载到 ESXi 中,至少要格式化它们。

所以这就是我求助于 SuperUser 的地方。有什么建议吗?有没有什么替代的复制实用程序?在驱动器格式化为 VMFS 的情况下,有没有什么方法可以挂载 VMDK?有没有什么方法可以修复我的输入/输出错误?也许甚至可以手动拆分 VMDK?我在映像本身上只有一个分区,因此很容易猜出给定的虚拟 EXT4 分区将从哪里开始,但我对 VMDK 文件的结构一无所知。

感谢您花时间阅读!

答案1

经过一些工作和@DanielB 的启发,我意识到我可以在服务器上的 USB 驱动器上设置另一个 ESXi 实例,从头开始安装,将旧驱动器连接到我用来运行 ESXi 主机驱动器的 SATA 端口,然后以这种方式重新创建 VM。

它直接启动、读取我的文件,一切都顺利进行。

相关内容