web-dev-qa-db-ja.com

LVMはI / Oエラーを報告していますが、ディスクは問題を報告していません。ああ

特定の論理ボリューム上のLVM(およびこれらのLV上に仮想マシンを作成しようとするとXenによって)によって報告されるエラーが表示され始めました。しかし、ディスクでテストを実行しましたが、ハードウェアの問題は見当たりません。

ここでは、XEN/Linux(Debian Lenny)ボックスを実行しており、LVM2で管理されている単一のSATAディスクを実行しています。カーネルの最近のapt-getアップグレードだけが大きな変更であり、1年以上稼働しています。

# uname -a
Linux hostname 2.6.26-2-xen-AMD64 #1 SMP Thu Sep 16 16:32:15 UTC 2010 x86_64 GNU/Linux

エラーは次のように表示されます。

# vgck
/dev/dm-20: read failed after 0 of 4096 at 0: Input/output error

そして、そのLVをCドライブ(Windows仮想マシン)に使用するVMを起動しようとすると、VMは起動を拒否し、 /var/log/xen/qemu-dm-*.logログファイルの最後にこれが表示されます。

...
Register xen platform.
Done register platform.
raw_read(6:/dev/vgroup/newvm-cdrive, 0, 0x7fff02bca520, 512) [20971520] read failed -1 : 5 = Input/output error
I/O request not ready: 0, ptr: 0, port: 0, data: 0, count: 0, size: 0
raw_read(6:/dev/vgroup/newvm-cdrive, 0, 0x12dfff0, 512) [20971520] read failed -1 : 5 = Input/output error

これは、ディスクが3番目の元のVMのスナップショットに基づいている2つのVMで最初に発生しました。私は2つのLVを削除し、それらを再作成しました(ここでも、同じ元のVMのLVのスナップショットを作成しました)。それ以来、問題はありません。

しかし、今日、私は新しいVMを作成しようとしました。同じ元のVMのLV(lvcreate -L500M --snapshot --name newvm-cdrive /dev/vgroup/original-cdrive)のスナップショットを作成し、新しいVMを作成しました。最初は機能しましたが、VMを一度シャットダウンすると、上記のエラーで再起動を拒否します。

私の明白な最初の推測はドライブの物理的な問題でしょうが、smartmonは何も報告しません。

# smartctl -t long /dev/sda
# [later]
# smartctl -l selftest /dev/sda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== 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 without error       00%         1         -
# 2  Short offline       Completed without error       00%         0         -

また、badblocksからエラーが発生しません。

vgckpvckを実行してみました:

# vgck vgroup -v
    Using volume group(s) on command line
    Finding volume group "vgroup"
  /dev/dm-20: read failed after 0 of 4096 at 0: Input/output error

# pvck /dev/sda2
  Found label on /dev/sda2, sector 1, type=LVM2 001
  Found text metadata area: offset=4096, size=192512

Interwebsでこのエラーメッセージへのいくつかの参照(「4096の0の後で読み取りに失敗しました」)を見つけましたが、私の状況に当てはまるものは何もありません。

何か案は?

pdate:要求に応じて、以下はlvdisplayおよびls -lの出力です。 COWスペースが足りなくなるのはもっともなことです。どうすればわかりますか?

# lvdisplay /dev/vgroup/newvm-cdrive
  /dev/dm-20: read failed after 0 of 4096 at 0: Input/output error
  --- Logical volume ---
  LV Name                /dev/vgroup/newvm-cdrive
  VG Name                vgroup
  LV UUID                jiarxt-q2NO-SyIf-5FrW-I9iq-mNEQ-iwS4EH
  LV Write Access        read/write
  LV snapshot status     INACTIVE destination for /dev/vgroup/original-cdrive
  LV Status              available
  # open                 0
  LV Size                10.00 GB
  Current LE             2560
  COW-table size         200.00 MB
  COW-table LE           50
  Snapshot chunk size    4.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:20

# ls -l /dev/dm-20
brw-rw---- 1 root disk 254, 20 2010-10-11 15:02 /dev/dm-20

そして、これがfdisk-lです。

# fdisk -l /dev/sda

Disk /dev/sda: 160.0 GB, 160000000000 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000080

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          31      248976   83  Linux
/dev/sda2              32       19452   155999182+  8e  Linux LVM
5
andrewf

答えは、論理ボリュームのCOWスペースがいっぱいだということだと思います。

コマンド「lvs」(先ほど発見した)を使用すると、...

# lvs
/dev/dm-20: read failed after 0 of 4096 at 0: Input/output error
LV             VG      Attr   LSize   Origin          Snap%  Move Log Copy%  Convert
[...other LVs...]
newvm-cdrive   mrburns Swi-I-   2.00G original-cdrive 100.00
[...other LVs...]

「Attr」列の先頭にある大文字の「S」は、「無効なスナップショット」を意味します。 (小文字の 's'は(有効な)スナップショットを意味します。)ご覧のように、Snap%は100です。つまり、すべてのCOWスペースが使用されます。

迷惑なことに、lvdisplayしませんこの情報を提供しますが、スナップショット論理ボリュームが無効であることを通知しません。 (スナップショットのステータスは「INACTIVE」であり、「現在使用されていません」という意味であると言っているだけです。)そして、lvsコマンドはあまり広く宣伝されていません。また、エラーメッセージ(「入出力エラー」)はあまり役に立ちません-実際にはnoログメッセージまたは「スナップショットがいっぱいです」というエラーメッセージがありました。 (LVM2のそれ以降のバージョンは、スペースがいっぱいになり始めると/ var/log/messagesにメッセージを書き込みますが、Debian Lennyのバージョンはそうではありません。ブー。)

そして問題を悪化させるために、インターネット上でこれについての議論はありません(または少なくとも、私が見つけることができなかった)!

LVにスペースを追加するだけではCOWスナップショットを修正できないのはなぜだろうと思いました(lvextendを使用しますが、実際には、スナップショットの宛先に書き込むときだけでなく、- またスナップショットソースに書き込む場合。COW領域がいっぱいになると、ソースLVへの書き込みにより、必ずスナップショットLVが無効になり、簡単に回復できなくなります。

8
andrewf

(直接的な答えではありませんが、入出力エラーの原因となる100%完全なスナップショットと戦っている他の人に使用したいと思っています)

これは私に起こりました:私のスナップショットは100%いっぱいになりましたが、その中のファイルシステムはスペースの負荷があると考え、lvsまたは他のLVM2コマンドを実行するたびにinput/outputエラーが発生しました。

私の場合、唯一のオプションはlvremoveを使用してスナップショットを削除することですが、umount -lを使用してスナップショットをレイジーにアンマウントしたため、削除できませんでした。これにより、最近マウントされるまでファイルシステムを使用していたプロセスを追跡することが非常に困難になりました。

論理ボリュームのメジャー+マイナーデバイス番号を取得することで成功しました。以下の252:10

root@hostname:~# lvdisplay

  --- Logical volume ---
  LV Path                /dev/vg00/
  LV Name                snapshot_of_my_Origin
  VG Name                vg00
  LV UUID                CWZxOa-depw-k5P4-SqDo-bdFb-h3Np-ukQkmM
  LV Write Access        read/write
  LV Creation Host, time cz3328jlkj, 2016-07-12 13:47:31 +0100
  LV snapshot status     active destination for my_Origin
  LV Status              available
  # open                 1
  LV Size                150.00 GiB
  Current LE             38400
  COW-table size         50.00 GiB
  COW-table LE           12800
  Allocated to snapshot  0.03%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:10

引数なしでルートとしてlsofを実行すると、システムで開いているファイルの完全なリストが表示されます。上記のようにコロンではなく、commaで区切られたメジャー+マイナーブロックデバイス番号でフィルタリングすると、それを使用するプロセスが見つかる場合があります。

root@hostname:~# lsof | sed -ne '1p; / 252,10 /p'
COMMAND     PID   TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
bash       2055           upr473  cwd       DIR             252,10      4096          2 /

NAME/であることに注意してください。これは、レイジーにマウント解除されているため、lsofは元のパス名を解決できません。

このプロセス(この例では2055)を強制終了し、lvremove etalを再試行してください。

0
RobM