VirtualBoxで動かしていた旧いサーバをディスクエラーから救出する

出張中に、旧いサーバが動かなくなったということで復旧の依頼がありました。
何も機材が無かったのですが、ありあわせの機材で何とかなりました。
久しぶりにストレージ障害を ddrescue で復旧したのでまとめ。


# 環境 


- ホストOS Debian GNU/Linux 7
- VirtualBox 
- ゲストOS Scientific Linux 6   
- PostgreSQL


障害ストレージは 1TBytes の SATA HDD (Seagate ST1000DM003) 。 単一のストレージで運用していました。

救出用ストレージとして、2TBytes の HDD (TOSHIBA DT01ACA2) を用意。


# 診断

ホストOSは起動するけれどもゲストOSがVirtualBox上で起動しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3cc8fcdd-31c4-6c9c-b5d0-168799d98438.png)




ゲストOS上で /var/log/messages に記録されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/898ec838-a15a-b5b4-c3a7-3ef7e6cce419.png)

同様に、ホストOSにも記録がされていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/387b09c2-9b31-db08-e6c0-145ad8881eb9.png)


```

Nov 20 07:17:01 penguinoffice /USR/SBIN/CRON[23461]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 20 08:17:01 penguinoffice /USR/SBIN/CRON[23483]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 20 08:51:14 penguinoffice kernel: [19251136.414265] ata6.00: exception Emask 0x0 SAct 0x180000 SErr 0x0 action 0x0
Nov 20 08:51:14 penguinoffice kernel: [19251136.414268] ata6.00: irq_stat 0x40000008
Nov 20 08:51:14 penguinoffice kernel: [19251136.414271] ata6.00: failed command: READ FPDMA QUEUED
Nov 20 08:51:14 penguinoffice kernel: [19251136.414275] ata6.00: cmd 60/20:98:90:fd:62/00:00:01:00:00/40 tag 19 ncq 16384 in
Nov 20 08:51:14 penguinoffice kernel: [19251136.414275]          res 41/40:20:a0:fd:62/00:00:01:00:00/00 Emask 0x409 (media error) <F>
Nov 20 08:51:14 penguinoffice kernel: [19251136.414277] ata6.00: status: { DRDY ERR }
Nov 20 08:51:14 penguinoffice kernel: [19251136.414278] ata6.00: error: { UNC }
Nov 20 08:51:14 penguinoffice kernel: [19251136.414979] ata6.00: supports DRM functions and may not be fully accessible
Nov 20 08:51:14 penguinoffice kernel: [19251136.415923] ata6.00: supports DRM functions and may not be fully accessible
Nov 20 08:51:14 penguinoffice kernel: [19251136.416098] ata6.00: configured for UDMA/133
Nov 20 08:51:14 penguinoffice kernel: [19251136.416103] ata6: EH complete
Nov 20 08:51:18 penguinoffice kernel: [19251140.067322] ata6.00: exception Emask 0x0 SAct 0x400000 SErr 0x0 action 0x0
Nov 20 08:51:18 penguinoffice kernel: [19251140.067325] ata6.00: irq_stat 0x40000008
Nov 20 08:51:18 penguinoffice kernel: [19251140.067328] ata6.00: failed command: READ FPDMA QUEUED
Nov 20 08:51:18 penguinoffice kernel: [19251140.067332] ata6.00: cmd 60/20:b0:90:fd:62/00:00:01:00:00/40 tag 22 ncq 16384 in
Nov 20 08:51:18 penguinoffice kernel: [19251140.067333]          res 41/40:20:a0:fd:62/00:00:01:00:00/00 Emask 0x409 (media error) <F>
Nov 20 08:51:18 penguinoffice kernel: [19251140.067334] ata6.00: status: { DRDY ERR }
Nov 20 08:51:18 penguinoffice kernel: [19251140.067335] ata6.00: error: { UNC }
Nov 20 08:51:18 penguinoffice kernel: [19251140.068045] ata6.00: supports DRM functions and may not be fully accessible
Nov 20 08:51:18 penguinoffice kernel: [19251140.068972] ata6.00: supports DRM functions and may not be fully accessible
Nov 20 08:51:18 penguinoffice kernel: [19251140.069148] ata6.00: configured for UDMA/133
Nov 20 08:51:18 penguinoffice kernel: [19251140.069153] ata6: EH complete
Nov 20 09:10:01 penguinoffice kernel: [19252262.806139] EXT4-fs (sda2): Unaligned AIO/DIO on inode 51904712 by AioMgr0-N; performance will be poor.
Nov 20 09:17:01 penguinoffice /USR/SBIN/CRON[23504]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 20 10:17:01 penguinoffice /USR/SBIN/CRON[23526]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 20 11:17:01 penguinoffice /USR/SBIN/CRON[23548]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 20 12:17:01 penguinoffice /USR/SBIN/CRON[23580]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 20 13:01:07 penguinoffice kernel: [19266123.424239] ata6.00: exception Emask 0x0 SAct 0xe000 SErr 0x0 action 0x0
Nov 20 13:01:07 penguinoffice kernel: [19266123.424242] ata6.00: irq_stat 0x40000008
Nov 20 13:01:07 penguinoffice kernel: [19266123.424245] ata6.00: failed command: READ FPDMA QUEUED
Nov 20 13:01:07 penguinoffice kernel: [19266123.424249] ata6.00: cmd 60/08:68:78:a1:a7/00:00:01:00:00/40 tag 13 ncq 4096 in
Nov 20 13:01:07 penguinoffice kernel: [19266123.424250]          res 41/40:08:78:a1:a7/00:00:01:00:00/00 Emask 0x409 (media error) <F>
Nov 20 13:01:07 penguinoffice kernel: [19266123.424251] ata6.00: status: { DRDY ERR }
Nov 20 13:01:07 penguinoffice kernel: [19266123.424252] ata6.00: error: { UNC }
Nov 20 13:01:07 penguinoffice kernel: [19266123.425006] ata6.00: supports DRM functions and may not be fully accessible
Nov 20 13:01:07 penguinoffice kernel: [19266123.425940] ata6.00: supports DRM functions and may not be fully accessible
Nov 20 13:01:07 penguinoffice kernel: [19266123.426124] ata6.00: configured for UDMA/133
Nov 20 13:01:07 penguinoffice kernel: [19266123.426130] ata6: EH complete
Nov 20 13:01:15 penguinoffice kernel: [19266132.009225] ata6.00: qc timeout (cmd 0x2f)
Nov 20 13:01:15 penguinoffice kernel: [19266132.009232] ata6: failed to read log page 10h (errno=-5)
Nov 20 13:01:15 penguinoffice kernel: [19266132.009236] ata6.00: exception Emask 0x1 SAct 0x7c0000 SErr 0x0 action 0x6 frozen
Nov 20 13:01:15 penguinoffice kernel: [19266132.009238] ata6.00: irq_stat 0x40000008
Nov 20 13:01:15 penguinoffice kernel: [19266132.009241] ata6.00: failed command: READ FPDMA QUEUED
Nov 20 13:01:15 penguinoffice kernel: [19266132.009245] ata6.00: cmd 60/08:90:78:a1:a7/00:00:01:00:00/40 tag 18 ncq 4096 in
Nov 20 13:01:15 penguinoffice kernel: [19266132.009245]          res 40/00:90:78:a1:a7/00:00:01:00:00/40 Emask 0x1 (device error)
Nov 20 13:01:15 penguinoffice kernel: [19266132.009247] ata6.00: status: { DRDY }
Nov 20 13:01:15 penguinoffice kernel: [19266132.009248] ata6.00: failed command: WRITE FPDMA QUEUED
Nov 20 13:01:15 penguinoffice kernel: [19266132.009251] ata6.00: cmd 61/08:98:78:f5:16/00:00:63:00:00/40 tag 19 ncq 4096 out
Nov 20 13:01:15 penguinoffice kernel: [19266132.009252]          res 40/00:90:78:a1:a7/00:00:01:00:00/40 Emask 0x1 (device error)
Nov 20 13:01:15 penguinoffice kernel: [19266132.009254] ata6.00: status: { DRDY }
Nov 20 13:01:15 penguinoffice kernel: [19266132.009255] ata6.00: failed command: WRITE FPDMA QUEUED
Nov 20 13:01:15 penguinoffice kernel: [19266132.009258] ata6.00: cmd 61/08:a0:40:45:bf/00:00:01:00:00/40 tag 20 ncq 4096 out
Nov 20 13:01:15 penguinoffice kernel: [19266132.009258]          res 40/00:90:78:a1:a7/00:00:01:00:00/40 Emask 0x1 (device error)
Nov 20 13:01:15 penguinoffice kernel: [19266132.009260] ata6.00: status: { DRDY }
Nov 20 13:01:15 penguinoffice kernel: [19266132.009261] ata6.00: failed command: WRITE FPDMA QUEUED
                                                                                                      

```
# 救出用マシンを作成

Ubuntu 20.04 を適当なマシンにインストール、障害ストレージと救出用ストレージを接続しました。
また、以下をインストールしています。

- VirtualBox
- ddrescue ( gddrescue )


# イメージコピー

ddrescue を使用しました。Ubuntu のパッケージに入っているのは　gddrescue　です。


```

# export SOURCE=/dev/sdb
# export DIST=/dev/sdc
# ddrescue $SOURCE $DIST 20201129.map --force

```

操作ミス防止のために一旦環境変数に入れて操作しています。

![IMG_20201130_071331491.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/698c93fa-1dd9-d39d-7a6a-9433f48d541a.jpeg)

リードエラー1628を伴ってコピーできました。

実は、これより先に同様のやりかたでコピー先をイメージファイルにして操作しましたが、 loopback マウントがうまくいかなかったので、物理デバイス同士で取り直しました。

# 必要なファイルの退避

リードオンリーとしてマウントして、必要なファイルをコピー

```

# mount /dev/sdc2 /mnt/sdc2 -o ro

```

コピーしたもの

- "VirtualBox VMs" フォルダ
- SL-65-x86_64_2014-01-17-Install-DVD.iso

# VirtualBox 操作


まず、コピーした SL-65-x86_64_2014-01-17-Install-DVD.iso を使って Scientifix Linux の仮想マシンを新たに作ります。

ここで、ありあわせの機材だったのでBIOSを以下のように設定し直す必要がありました。

![IMG_20201130_072642413.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/2b7ea6ca-0be0-95b3-bce4-073a5f48b14a.jpeg)

これを確認せずに起動しようとして以下のようにエラーが出たりしてあれれ?? と戸惑いました。

![IMG_20201130_073439869.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/78cf6edc-c965-05f0-5d37-cbfc2013e357.jpeg)

上記を修正し、無事インストールできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c9e4859e-89cb-798b-2a7f-c190aaf2f42a.png)


# 新ゲストマシンに必要なプログラムをインストール


VboxGuestAdditionとそれに必要なプログラムをインストール

```
- yum install gcc kernel-devel kernel-headers dkms make bzip2
- yum update kernel*
- reboot
- CD内のインストーラを起動

```

旧サーバのサービスに必要なプログラムをインストール

```

# yum install nkf httpd
# yum install postgresql 
# yum install php-pgsql php php-mbstring
# yum install postgresql-server
```

上記プログラムの設定は適宜しておきます。


# VirtualBox 上で仮想ディスクを mount する



```

$ mount /dev/VolGroup2014/lv_root /mnt/lv_root

```

# 必要なファイルを救出


```

# cd /mnt/lv_root/var
# cp -a www/html /var/www
# cp -a lib/pgsql /var/lib 

```

# postgresql のデータの損傷

```

# /etc/init.d/postgresql start
```


とするとエラーが起こる。


```

# su - postgres

```


 として、

```

$ postmaster -p 5432

```

 とするとサービスが起動した。

```

$ psql

```
 としてもエラーとなるが、


```


$ psql -d [データベース名]

```
 とすると接続できたのでダンプ。

データベースを退避してたオリジナルに切り替えて、ダンプを取り込むと復旧できた。
運の良いことに、データベースデータは問題がありませんでした。