修复btrfs因为异常断电导致的无法进入系统
昨天干活的时候突然遭遇到大范围停电,今天开机发现进不去了,开机提示:
[ 2.141572] localhost.localdomain kernel: kernel BUG at fs/btrfs/free-space-cache.c:1567!
[ 2.141579] localhost.localdomain kernel: invalid opcode: 0000 [#1] SMP
[ 2.141587] localhost.localdomain kernel: Modules linked in: btrfs libcrc32c xor zlib_deflate raid6_pq nouveau video mxm_wmi i2c_algo_bit drm_kms_helper ttm drm i2c_core wmi uinput
[ 2.141626] localhost.localdomain kernel: CPU 1
[ 2.141633] localhost.localdomain kernel: Pid: 123, comm: mount Tainted: G I 3.9.0-301.fc19.x86_64 #1 Hewlett-Packard HP xw4600 Workstation/0AA0h
[ 2.141642] localhost.localdomain kernel: RIP: 0010:[<ffffffffa0245984>] [<ffffffffa0245984>] remove_from_bitmap+0x1f4/0x210 [btrfs]
[ 2.141676] localhost.localdomain kernel: RSP: 0018:ffff88011713b698 EFLAGS: 00010287
[ 2.141682] localhost.localdomain kernel: RAX: 00000000424fe000 RBX: ffff880117ea1200 RCX: 0000000046199000
[ 2.141689] localhost.localdomain kernel: RDX: 0000000000001000 RSI: 0000000000003a80 RDI: 0000000000004580
[ 2.141696] localhost.localdomain kernel: RBP: ffff88011713b6e8 R08: ffff880116e078b0 R09: 0000000049c00000
[ 2.141702] localhost.localdomain kernel: R10: ffffffffa01eecc1 R11: ffff880117ea1218 R12: ffff8801170b7b00
[ 2.141709] localhost.localdomain kernel: R13: ffff88011713b708 R14: ffff88011713b700 R15: ffff880117ea1228
[ 2.141716] localhost.localdomain kernel: FS: 00007fcdcdc66880(0000) GS:ffff88011fc80000(0000) knlGS:0000000000000000
[ 2.141723] localhost.localdomain kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 2.141729] localhost.localdomain kernel: CR2: 0000003ab3690320 CR3: 000000011719c000 CR4: 00000000000007e0
[ 2.141736] localhost.localdomain kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 2.141742] localhost.localdomain kernel: DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 2.141749] localhost.localdomain kernel: Process mount (pid: 123, threadinfo ffff88011713a000, task ffff8801175d1770)
[ 2.141756] localhost.localdomain kernel: Stack:
[ 2.141760] localhost.localdomain kernel: ffff88011713b6e8 0000000049c00000 ffff8801170b7b24 0000000046199000
[ 2.141772] localhost.localdomain kernel: 0000000000001000 ffff8801170b7b00 ffff8801170b7b24 0000000000000000
[ 2.141784] localhost.localdomain kernel: ffff8801170b7b08 ffff8801177ad400 ffff88011713b738 ffffffffa024714b
[ 2.141796] localhost.localdomain kernel: Call Trace:
[ 2.141816] localhost.localdomain kernel: [<ffffffffa024714b>] btrfs_remove_free_space+0x5b/0x290 [btrfs]
[ 2.141832] localhost.localdomain kernel: [<ffffffff81081130>] ? wake_up_bit+0x30/0x30
[ 2.141846] localhost.localdomain kernel: [<ffffffffa01f6bff>] btrfs_alloc_logged_file_extent+0x1af/0x1d0 [btrfs]
[ 2.141860] localhost.localdomain kernel: [<ffffffffa01e2e86>] ? btrfs_free_path+0x26/0x30 [btrfs]
[ 2.141877] localhost.localdomain kernel: [<ffffffffa0241ef7>] replay_one_extent+0x607/0x690 [btrfs]
[ 2.141895] localhost.localdomain kernel: [<ffffffffa024224b>] replay_one_buffer+0x2cb/0x390 [btrfs]
[ 2.141912] localhost.localdomain kernel: [<ffffffffa02277b4>] ? alloc_extent_buffer+0x94/0x3f0 [btrfs]
[ 2.141929] localhost.localdomain kernel: [<ffffffffa023d484>] walk_down_log_tree+0x224/0x410 [btrfs]
[ 2.141946] localhost.localdomain kernel: [<ffffffffa023d95f>] walk_log_tree+0xbf/0x1f0 [btrfs]
[ 2.141966] localhost.localdomain kernel: [<ffffffffa02443c1>] btrfs_recover_log_trees+0x1f1/0x360 [btrfs]
[ 2.141983] localhost.localdomain kernel: [<ffffffffa0241f80>] ? replay_one_extent+0x690/0x690 [btrfs]
[ 2.141999] localhost.localdomain kernel: [<ffffffffa0206a1b>] open_ctree+0x18eb/0x1f90 [btrfs]
[ 2.142008] localhost.localdomain kernel: [<ffffffff812daa54>] ? disk_name+0x54/0xb0
[ 2.142020] localhost.localdomain kernel: [<ffffffffa01df94e>] btrfs_mount+0x5ce/0x6c0 [btrfs]
[ 2.142028] localhost.localdomain kernel: [<ffffffff8129505d>] ? selinux_sb_copy_data+0x14d/0x220
[ 2.142036] localhost.localdomain kernel: [<ffffffff8119d119>] mount_fs+0x39/0x1b0
[ 2.142043] localhost.localdomain kernel: [<ffffffff811b627f>] vfs_kern_mount+0x5f/0xf0
[ 2.142055] localhost.localdomain kernel: [<ffffffffa01df4fc>] btrfs_mount+0x17c/0x6c0 [btrfs]
[ 2.142062] localhost.localdomain kernel: [<ffffffff8129505d>] ? selinux_sb_copy_data+0x14d/0x220
[ 2.142069] localhost.localdomain kernel: [<ffffffff8119d119>] mount_fs+0x39/0x1b0
[ 2.142074] localhost.localdomain kernel: [<ffffffff811b627f>] vfs_kern_mount+0x5f/0xf0
[ 2.142080] localhost.localdomain kernel: [<ffffffff811b850d>] do_mount+0x1fd/0xa00
[ 2.142087] localhost.localdomain kernel: [<ffffffff811b8196>] ? copy_mount_options+0x36/0x170
[ 2.142093] localhost.localdomain kernel: [<ffffffff811b8d93>] sys_mount+0x83/0xc0
[ 2.142100] localhost.localdomain kernel: [<ffffffff8164d819>] system_call_fastpath+0x16/0x1b
[ 2.142105] localhost.localdomain kernel: Code: 5b 41 5c 41 5d 41 5e 41 5f 5d c3 0f 1f 40 00 31 c0 48 83 7b 20 00 75 e4 48 89 de 4c 89 e7 89 45 c0 e8 b1 ed ff ff 8b 45 c0 eb d1 <0f> 0b e8 69 a4 02 00 0f 1f 44 00 00 e8 59 a4 02 00 66 66 2e 0f
[ 2.142202] localhost.localdomain kernel: RIP [<ffffffffa0245984>] remove_from_bitmap+0x1f4/0x210 [btrfs]
[ 2.142221] localhost.localdomain kernel: RSP <ffff88011713b698>
[ 2.146683] localhost.localdomain kernel: ---[ end trace 0275657f5524be82 ]---
经过搜索得知是btrfs的日志损坏导致的,可以通过以下命令来查看btrfs分区的信息:
# btrfs filesystem show
[root@localhost ~]# btrfs filesystem show
Label: 'fedora' uuid: c210861a-e846-4be4-880b-b7ebb94c91c2
Total devices 1 FS bytes used 12.36GB
devid 1 size 110.81GB used 17.02GB path /dev/sda2
Btrfs v0.20-rc1
修复日志:
# btrfs-zero-log /dev/sda2
修复后检查以下
# btrfsck /dev/sda2
然后重启后就好了
Last modified on 2013-07-20