夜明け前の最も暗いとき

技術的なやったことをメモするブログ

仮想環境ホストPCのHDD壊れる

HDDが壊れました。この記事はHDD故障を確認するまでの記録です。OSはUbuntu 18.04.2 LTS、SSD(OS)とHDDの構成です。

検証用の仮想環境として運用しているPCにアップデート適用後、再起動して仮想マシン再び立ち上げようとしました。

jinglan@vm-host:~$ sudo virsh start dnsserver
error: Failed to start domain dnsserver
error: Cannot access storage file '/dev/vg0/vm-dnsserver-disk': No such file or directory

jinglan@vm-host:~$

ストレージファイルにアクセスできないため開始できなかったというエラーとなりました。/dev/vg0/を確認してみます。

jinglan@vm-host:~$ ls /dev/vg0
ls: cannot access '/dev/vg0': No such file or directory

jinglan@vm-host:~$

/dev/vg0/が存在していないようです。LVMの状態を確認します。

jinglan@vm-host:~$ sudo lvscan

jinglan@vm-host:~$ sudo lvdisplay

jinglan@vm-host:~$ sudo vgscan --cache
  Reading volume groups from cache.

jinglan@vm-host:~$ sudo vgdisplay --partial --verbose
  PARTIAL MODE. Incomplete logical volumes will be processed.
    No volume groups found.

jinglan@vm-host:~$ sudo pvscan
  No matching physical volumes found

jinglan@vm-host:~$ sudo pvdisplay

jinglan@vm-host:~$

pvscanで"No matching physical volumes found"と言うことはLVMの物理ボリュームが存在していないことを意味します。

jinglan@vm-host:~$ sudo cat /etc/lvm/backup/vg0
# Generated by LVM2 version 2.02.176(2) (2017-11-03): Sat Mar  2 00:35:35 2019

contents = "Text Format Volume Group"
version = 1
(中略)

LVMのコンフィグバックアップがあるので復元を試みます。

jinglan@vm-host:~$ sudo vgcfgrestore vg0
  Couldn't find device with uuid xpV66e-4zWx-uceS-LuWQ-mqmm-E7qb-DC1gAB.
  Cannot restore Volume Group vg0 with 1 PVs marked as missing.
  Restore failed.

リストアには失敗です。やはり物理ボリューム(PV)が存在していないようです。物理ボリュームの復元を実行します。(参考)

jinglan@vm-host:~$ sudo pvcreate --uuid "xpV66e-4zWx-uceS-LuWQ-mqmm-E7qb-DC1gAB" --restorefile /etc/lvm/backup/vg0 /dev/sdb4
  Couldn't find device with uuid xpV66e-4zWx-uceS-LuWQ-mqmm-E7qb-DC1gAB.
  Device /dev/sdb4 not found.
jinglan@vm-host:~$

/dev/sdb4/が見つからないというエラー。fdiskでチェックしてみます。

jinglan@vm-host:~$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 7.9 GiB, 8455200768 bytes, 16514064 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: 0x2a45e751

Device     Boot    Start       End   Sectors   Size Id Type
/dev/sdb1  *        2048    206847    204800   100M  7 HPFS/NTFS/exFAT
/dev/sdb2         206848  82870172  82663325  39.4G  7 HPFS/NTFS/exFAT
/dev/sdb3       82870272  83881983   1011712   494M 27 Hidden NTFS WinRE
/dev/sdb4       83881984 976773167 892891184 425.8G 8e Linux LVM

jinglan@vm-host:~$
jinglan@vm-host:~$
jinglan@vm-host:~$
jinglan@vm-host:~$ sudo ls /dev/ | grep sdb
sdb
sdb1
sdb2
jinglan@vm-host:~$

fdiskでは/dev/sdb4があるように見えますが、/dev/にはsdb4が存在しません。ファイルシステムを検査します。

jinglan@vm-host:~$ sudo fsck /dev/sdb
fsck from util-linux 2.31.1
e2fsck 1.44.1 (24-Mar-2018)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/sdb

The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
 or
    e2fsck -b 32768 <device>

Found a dos partition table in /dev/sdb
jinglan@vm-host:~$

パーティションメタデータ(スーパーブロック)が不正と返ってきました。確認してみます。

jinglan@vm-host:~$ sudo hexdump -C -s 446 -n 64 /dev/sdb
000001be  80 20 21 00 07 df 13 0c  00 08 00 00 00 20 03 00  |. !.......... ..|
000001ce  00 df 14 0c 07 fe ff ff  00 28 03 00 9d 57 ed 04  |.........(...W..|
000001de  00 fe ff ff 27 fe ff ff  00 80 f0 04 00 70 0f 00  |....'........p..|
000001ee  00 69 05 65 8e 50 7f 81  00 f0 ff 04 30 70 38 35  |.i.e.P......0p85|
000001fe
jinglan@vm-host:~$

一列目がパーティションがブート可能(0x80)かどうか、4列目にパーティションのタイプとなっています。今回は上からNTFS(0x07)、Windowsリカバリ(0x27)、LVM(0x8e)となっているので正常そうです。パーティション情報を読み直します。

jinglan@vm-host:~$ sudo partprobe
Error: Can't have a partition outside the disk!

パーティションがディスクよりも大きい…?そんなはずはないとfdiskを再度確認すると

jinglan@vm-host:~$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 7.9 GiB, 8455200768 bytes, 16514064 sectors
(中略)
/dev/sdb4       83881984 976773167 892891184 425.8G 8e Linux LVM

たしかに7.9 GiBしかディスクがありません。それに対して/dev/sdb4は425.8Gで圧倒的に足りてません。S.M.A.R.Tを使ってHDD状態を見てみます。

jinglan@vm-host:~$ sudo smartctl -a /dev/sdb
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-46-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     Q#ノヒWOユa!G"・
                               gョq チ「scqコ9Sォs・T8sH
Serial Number:    235RT08UT
Firmware Version: A・37k・
Rotation Rate:    5400 rpm
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   Unknown(0x55ef) (unknown minor revision code: 0x55eb)
Local Time is:    Sun Apr  7 20:17:30 2019 JST
SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 82-83 don't show if SMART supported.
SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 85-87 don't show if SMART is enabled.
A mandatory SMART command failed: exiting. To continue, add one or more '-T permissive' options.
jinglan@vm-host:~$

Device Modelは文字化けしてうまく読み取れていません。一応テストを実行してみます。

jinglan@vm-host:~$ sudo smartctl -t short /dev/sdb -T permissive
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-46-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 82-83 don't show if SMART supported.
SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 85-87 don't show if SMART is enabled.
                  Checking to be sure by trying SMART RETURN STATUS command.
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Sun Apr  7 20:23:07 2019

Use smartctl -X to abort test.
jinglan@vm-host:~$
jinglan@vm-host:~$ sudo smartctl -t long /dev/sdb -T permissive
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-46-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 82-83 don't show if SMART supported.
SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 85-87 don't show if SMART is enabled.
                  Checking to be sure by trying SMART RETURN STATUS command.
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 125 minutes for test to complete.
Test will complete after Sun Apr  7 22:26:20 2019

Use smartctl -X to abort test.
jinglan@vm-host:~$

検査に125分ほど必要と表示されていますが結果はすぐ出ました。

jinglan@vm-host:~$ sudo smartctl -l selftest /dev/sdb -T permissive
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-46-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 82-83 don't show if SMART supported.
SMART support is: Ambiguous - ATA IDENTIFY DEVICE words 85-87 don't show if SMART is enabled.
                  Checking to be sure by trying SMART RETURN STATUS command.
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: electrical failure 90%     12447         0
# 2  Short offline       Completed: electrical failure 90%     12447         0

electrical failureということで電気的故障という結果でした。

今回は試験用の仮想環境で故障だったのでダメージは少ないです。やはり運用環境にはRAIDが必須ですね。