[lvm-devel] lvresize in test mode sends BLKDISCARD to SSD block devices, this will result in the file system corruption
Gang He
ghe at suse.com
Fri Jun 22 09:31:23 UTC 2018
Hello List,
I found a bug for lvresize command, this issue can be reproduced by lvm2-2.02.178 code base.
The reproduce steps are as below,
1) create a LV on a SSD based partition, then format this LV with ext4 file system, and mount this LV.
e.g.
linux-cy2k:/ # lsblk
...
sdc 8:32 0 37.3G 0 disk
├─sdc1 8:33 0 2G 0 part [SWAP]
├─sdc2 8:34 0 14.7G 0 part
│ └─cluster--vg1-test--lv 254:20 0 14G 0 lvm /mnt/ext4 <<= this LV
└─sdc3 8:35 0 20.6G 0 part
2) enable issue discards to a logical volumes's underlying physical volume via edit "/etc/lvm/lvm.conf" file.
e.g.
linux-cy2k:/ # vi /etc/lvm/lvm.conf
set "issue_discards = 1"
3) run lvresize command in test mode.
e.g.
inux-cy2k:/ # lvresize -v -n -L -10GB /dev/cluster-vg1/test-lv --test
4) unmount this LV, then mount this LV again.
You will probably encounter the file system on this LV is corrupted.
e.g.
linux-cy2k:~ # mount /dev/cluster-vg1/test-lv /mnt/ext4/
mount: wrong fs type, bad option, bad superblock on /dev/mapper/cluster--vg1-test--lv,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
linux-cy2k:~ # dmesg
[3711112.342424] JBD2: no valid journal superblock found
[3711112.342429] EXT4-fs (dm-20): error loading journal
To summarize, I think this behavior is a bug and is very dangerous,
the command in test mode should not send BLKDISCARD to the underlying block device,
the BLKDISCARD command will make the related sectors on the block device be trimmed (lost data).
Thanks
Gang
More information about the lvm-devel
mailing list