大致操作如下:
1.fsck原ext4文件系统 没问题
2.btrfs-convert 把原文件系统转换成btrfs 没报错,成功。
3.btrfs subvol delete ext2_saved 删掉转换后留下的子卷
4.
btrfs fi defrag -r
btrfs balance start
整理碎片,banlance一下?不懂具体干嘛,按官方的指示照做了。(把文件系统变清真一点?)
5.btrfs filesystem defragment -r -v -clzo 对文件系统做全盘压缩(这是我用btrfs的原因,透明压缩)
以上操作均没报错
代码: 全选
fstab:
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=de31e48a-a9d4-4cfe-9864-2a8265ee20ea / btrfs defaults,compress=lzo,subvol=@ 0 1
变成readonly炸掉时dmesg能看到如下错误信息:
代码: 全选
[ 587.019825] WARNING: CPU: 1 PID: 56 at /build/linux-bNGTuE/linux-4.4.0/fs/btrfs/inode.c:2931 btrfs_finish_ordered_io+0x7da/0x7f0 [btrfs]()
[ 587.019828] Modules linked in: nvram msr joydev vboxsf(OE) snd_intel8x0 snd_ac97_codec ac97_bus snd_pcm snd_seq_midi snd_seq_midi_event vboxvideo(OE) crc32_pclmul snd_rawmidi ttm aesni_intel drm_kms_helper aes_i586 snd_seq xts lrw gf128mul ablk_helper cryptd snd_seq_device snd_timer drm snd input_leds serio_raw fb_sys_fops syscopyarea soundcore sysfillrect i2c_piix4 sysimgblt vboxguest(OE) 8250_fintek mac_hid binfmt_misc parport_pc ppdev lp parport autofs4 btrfs xor raid6_pq hid_generic usbhid hid video ahci libahci e1000 psmouse fjes
[ 587.019876] Workqueue: btrfs-endio-write btrfs_endio_write_helper [btrfs]
[ 587.019911] [<f8755f6a>] ? btrfs_finish_ordered_io+0x7da/0x7f0 [btrfs]
[ 587.019923] [<f8755f6a>] ? btrfs_finish_ordered_io+0x7da/0x7f0 [btrfs]
[ 587.019937] [<f8755f6a>] btrfs_finish_ordered_io+0x7da/0x7f0 [btrfs]
[ 587.019948] [<f87562f0>] finish_ordered_fn+0x10/0x20 [btrfs]
[ 587.019962] [<f8784870>] btrfs_scrubparity_helper+0xd0/0x2d0 [btrfs]
[ 587.019975] [<f8784afd>] btrfs_endio_write_helper+0xd/0x10 [btrfs]
[ 587.020024] BTRFS: error (device sda1) in btrfs_finish_ordered_io:2931: errno=-95 unknown
btrfs check --repair没有报错(结果和官方https://btrfs.wiki.kernel.org/index.php/Btrfsck的类似,总之没报错,下面这段是摘自官方的):
代码: 全选
Fixed 0 roots.
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
enabling repair mode
Checking filesystem on /dev/mapper/space
UUID: 77077815-4ca2-44cd-a83a-b1aeb4607df4
cache and super generation don't match, space cache will be invalidated
found 294976426877 bytes used err is 0
total csum bytes: 636680648
total tree bytes: 6981910528
total fs tree bytes: 5149491200
total extent tree bytes: 895369216
btree space waste bytes: 1860661732
file data blocks allocated: 651971338240
referenced 676102934528
Btrfs v3.17
btrfs-zero-log试过了,无济于事。
再做balance、defrag也都无济于事。
我的一些主观判断:
1.应该不关压缩的事,我的另一台安装时就用的btrfs文件系统的ubuntu机器,也是用上面的方法做的全盘压缩,挂载的压缩选项也一样,一点问题也没有。
2.几乎可以断定是从ext4转换过来的锅,
因为,Google ext4 btrfs readonly 或者 btrfs errno=-95 unknown能找到一大堆和我情况相似的,全都是从ext4转过来的,然后自动炸成只读的。dmesg报的错都一样!
但是,翻遍google,都无解。
只能在中文社区问问看有没有大神有什么办法了。。