23262


vagrant +
virtualboxを使い、CentOS6.7をゲストOSとして起動させ、それを環境としてシステム開発をしています。(デプロイ先のサーバーと環境を揃えるためです)  
ホストOSはubuntu.15.10です。

今日、`vagrant ssh`が失敗するので、virtualbox自身のターミナルからrootユーザーでログインし、`fsck -n` を実行すると

[code]

    /dev/mapper/VolGroup-lv_root contains a file system with errors, check forced.
    ...
    ...
    Free blocks count wrong (845378, counted=845408)
    Free inodes count wrong (309812, counted=309769)
    
[/code]

と表示されました。  
`/etc/fstab`を確認し、

[code]

    $ cat /etc/fstab
    /dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
    UUID=d197cae3-0dd5-4555-9b2f-f9f21c1d9679 /boot                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    
[/code]

ルートファイルシステムに異常があるのだとわかりました。

このため、何とかして`fsck`をルートファイルシステムに実行したいのですが、マウントしたままだとファイルシステムを壊してしまうと以前聞いたことがあったので、それなら何とかルートディレクトリからアンマウントしなければと考えました。

そこでシングルユーザーモードで起動しなおし、それから

[code]

    umount /
    fsck /dev/mapper/VolGroup-lv_root
    
[/code]

としたところ、

[code]

    /dev/mapper/VolGroup-lv_root clean ...
    
[/code]

と表示されました。  
ファイルシステムに何の問題もないはずがないのですが、とにかくこれ以上何も起きません。  
わからないなりに以下のようにもして何か確認できないかとやってみました。

[code]

    # fsck -fv -t ext4 /dev/mapper/VolGroup-lv_root
    fsck from util-linux-ng 2.17.2
    pass 1: checking ...
    ...
    ...
    pass 5: group summary information
    
    130829 inodes used
    ...
    ...
    913928 blocks used
      0 bad blocks 
      1 large file
    ...
    ...
    
[/code]

(virtual boxのターミナルで上手く画面をマウスでコピーできないため、要点になりそうなところだけかいつまんでいます。全部の詳細を書けずすみません)

これを見ても、bad blocks が 0 というのは理解ができません。  
マルチユーザーモードで起動した時にだけ`fsck`がおかしくなるとでも言うのでしょか？

多分、fsckの使い方を間違えているのか、もっと違うところを  
間違っているかだろうと思うのですが、  
今日一日ずっと調べていても分かりませんでした。  
プログラミングの質問とは違いますが、このままではそのプログラミングができません。  
すみませんがどなたかアドバイスをお願いいたします。  
よろしくお願いします。


CC BY-SA 3.0
2016-03-18T10:11:47.767
23254
2016-03-28T01:44:39.187
2016-03-28T01:34:55.400
8000
9403
question
linux centos
ルートファイルシステムを復旧させたいのにfsckが上手く使えない


シングルユーザモードで `/` を読み取り専用で再マウントして `fsck` を実行すれば良いと思います。

[code]

    # mount -o ro,remount /
    # fsck -t ext4 /dev/mapper/VolGroup-lv_root
    # reboot
    
[/code]


CC BY-SA 3.0
2016-03-18T13:29:57.967
23262
2016-03-18T13:29:57.967
5008
23254
answer


「bad blocks」はハードディスクでいうところの不良セクターのことではないでしょうか。  
fsck でエラーとなっているのは「bad blocks」があるからではなく、フリーブロック数とフリー i-node
数の実際の値がファイルシステム側(メタデータに記録されている)よりも少ないということだと思います。  
ファイルシステムを縮小する前に LVM や仮想ディスクを縮小したりしていませんでしょうか。

修復方法については take88 さんの回答のとおりです。


CC BY-SA 3.0
2016-03-28T01:44:39.187
23522
2016-03-28T01:44:39.187
4603
23254
answer