ルートファイルシステムで「EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group **: ** blocks in bitmap, ** in gd」ってエラー出た。
vagrantで作ったCentOS6.5の開発環境でサーバ内の
フォルダがいたるところでおかしくなる現象が発生した。
作成したツールが悪さしたのかとか思っていたけど、
どうもrootでしか触れない箇所も一部書き換えられている
ようだったので、そうじゃないと判断。
「dmesg」、「/var/log/message」をみたら以下のようなエラーを吐いていた。
Sep 8 08:30:35 vagrant-centos65 kernel: sda: sda1 sda2 sda3
Sep 8 08:30:35 vagrant-centos65 kernel: sd 0:0:0:0: [sda] Attached SCSI disk
Sep 8 08:30:35 vagrant-centos65 kernel: EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts:
Sep 8 08:30:35 vagrant-centos65 kernel: Refined TSC clocksource calibration: 3096.416 MHz.
Sep 8 08:30:35 vagrant-centos65 kernel: Switching to clocksource tsc
Sep 8 08:30:35 vagrant-centos65 kernel: dracut: Mounted root filesystem /dev/sda1
Sep 8 08:30:35 vagrant-centos65 kernel: SELinux: Disabled at runtime.
Sep 8 08:30:35 vagrant-centos65 kernel: type=1404 audit(1410132625.773:2): selinux=0 auid=4294967295 ses=4294967295
Sep 8 08:30:35 vagrant-centos65 kernel: dracut:
Sep 8 08:30:35 vagrant-centos65 kernel: dracut: Switching root
Sep 8 08:30:35 vagrant-centos65 kernel: udev: starting version 147
Sep 8 08:30:35 vagrant-centos65 kernel: vboxguest 0000:00:04.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
Sep 8 08:30:35 vagrant-centos65 kernel: input: Unspecified device as /devices/pci0000:00/0000:00:04.0/input/input5
Sep 8 08:30:35 vagrant-centos65 kernel: vboxguest: major 0, IRQ 20, I/O port d020, MMIO at 00000000f0000000 (size 0x400000)
Sep 8 08:30:35 vagrant-centos65 kernel: piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
Sep 8 08:30:35 vagrant-centos65 kernel: e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
Sep 8 08:30:35 vagrant-centos65 kernel: e1000: Copyright (c) 1999-2006 Intel Corporation.
Sep 8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
Sep 8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: eth1: (PCI:33MHz:32-bit) 08:00:27:a5:8f:41
Sep 8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: eth1: Intel(R) PRO/1000 Network Connection
Sep 8 08:30:35 vagrant-centos65 kernel: sd 0:0:0:0: Attached scsi generic sg0 type 0
Sep 8 08:30:35 vagrant-centos65 kernel: parport_pc 00:04: reported by Plug and Play ACPI
Sep 8 08:30:35 vagrant-centos65 kernel: ppdev: user-space parallel port driver
Sep 8 08:30:35 vagrant-centos65 kernel: EXT4-fs (sda1): warning: mounting fs with errors, running e2fsck is recommended
Sep 8 08:30:35 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 34: 9527 blocks in bitmap, 9528 in gd
Sep 8 08:30:35 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
Sep 8 08:30:35 vagrant-centos65 kernel: EXT4-fs (dm-0): warning: maximal mount count reached, running e2fsck is recommended
Sep 8 08:30:35 vagrant-centos65 kernel: EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts:
Sep 8 08:30:35 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 20: 5 blocks in bitmap, 29 in gd
Sep 8 08:30:35 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
Sep 8 08:30:35 vagrant-centos65 kernel: NET: Registered protocol family 10
Sep 8 08:30:35 vagrant-centos65 kernel: lo: Disabled Privacy Extensions
Sep 8 08:30:35 vagrant-centos65 kernel: ADDRCONF(NETDEV_UP): eth1: link is not ready
Sep 8 08:30:35 vagrant-centos65 kernel: e1000: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Sep 8 08:30:35 vagrant-centos65 kernel: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
Sep 8 08:30:35 vagrant-centos65 rpc.statd[955]: Version 1.2.3 starting
Sep 8 08:30:35 vagrant-centos65 sm-notify[956]: Version 1.2.3 starting
Sep 8 08:30:39 vagrant-centos65 smbd[1342]: [2014/09/08 08:30:39.851680, 0] printing/print_cups.c:151(cups_connect)
Sep 8 08:30:39 vagrant-centos65 smbd[1342]: Unable to connect to CUPS server localhost:631 - Connection refused
Sep 8 08:30:39 vagrant-centos65 smbd[1312]: [2014/09/08 08:30:39.852067, 0] printing/print_cups.c:528(cups_async_callback)
Sep 8 08:30:39 vagrant-centos65 smbd[1312]: failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Sep 8 09:37:44 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 16: 21091 blocks in bitmap, 21092 in gd
Sep 8 09:40:01 vagrant-centos65 logrotate: ALERT exited abnormally with [1]
Sep 8 09:43:50 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 7: 7013 blocks in bitmap, 6546 in gd
Sep 8 09:43:50 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
ここに注目。
EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 34: 9527 blocks in bitmap, 9528 in gd
どうもEXT4の「/dev/sda1」がおかしい模様。
前にvmがいきなり落ちたのが原因かも・・・。
ちなみに以下のような構成
# mount
/dev/sda1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/VgData01-LvData01 on /var/www/html type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/vagrant on /vagrant type vboxsf (uid=500,gid=500,rw)
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.3G 2.4G 4.6G 34% /
tmpfs 939M 0 939M 0% /dev/shm
/dev/mapper/VgData01-LvData01 91G 729M 86G 1% /var/www/html
/vagrant 863G 239G 625G 28% /vagrant
以下のページを参考に修復を開始。
vagrant up途中で止まったりvagrant sshがconnection closeでもあきらめちゃだめ、destroyしちゃだめ
システム起動時にUNEXPECTED INCONSISTENCYエラーが発生した場合は
Linuxで次回起動時にfsckを強制または抑止する方法について
/etc/fstab – ファイルシステム情報の設定
具体的には
ホスト機にディスプレイ、キーボード、マウスをつなぎ、
Vagrantfileファイル内の以下の箇所を変更。
# vb.gui = true
↓
vb.gui = true
$ vagrant up
ホスト機上でGUIで起動するので以下を実行。
# touch /forcefsck
一旦サーバを落とす。
# shutdown -h now
もう一回
$ vagrant up
すると途中でrootのパスワードを聞かれる。
Give root password for maintenance
(or type Control-D to continue):
ファイルシステム修復用のシェルが起動するので対象を確認する
# mount
今回は/dev/sda1なので以下のコマンドを実行
# fsck -t ext4 /dev/sda1
後はビビりながらEnterを押し続ける。
***** FILE SYSTEM WAS MODIFIED *****
***** REBOOT LINUX *****
↑上記のようなメッセージが出たら脱出
# exit
その後は普通に起動。
「/var/log/message」を確認してみる。
ちなみに今回の修復をするなかで、ルートファイルシステムでfsck場合は
シングルユーザモードで行うと書かれていたので、ゲストにSSHで
ログインしたまま
# /sbin/init 1
したら接続が切られて焦ったのでやらないほうがいい。。
この状態になったら
$ vagrant halt
$ vagrant up
で元に戻った。
あとホスト機でGUIモードで起動してrootログインしてから
シングルユーザモードになって
# fsck -t ext4 /dev/sda1
打っても稼動中って出て修復できなかった。
あー読み込み専用にしないといけなかったのかな。。
あと、
「/etc/fstab」を開きルートファイルシステムの6個目のフィールドを1に変更もやっておいたほうがよい。