[dm-devel] fstrim discarding too many or wrong blocks on Linux 5.1, leading to data loss
Andrea Gelmini
andrea.gelmini at gelma.net
Mon May 20 14:53:41 UTC 2019
Il giorno lun 20 mag 2019 alle ore 15:58 Michael Laß <bevan at bi-co.net>
ha scritto:
>
>
> > Am 20.05.2019 um 15:53 schrieb Andrea Gelmini <andrea.gelmini at gmail.com>:
> >
> > Had same issue on a similar (well, quite exactly same setup), on a machine in production.
> > But It Is more than 4 tera of data, so in the end I re-dd the image and restarted, sticking to 5.0.y branch never had problem.
> > I was able to replicate it. SSD Samsung, more recent version.
> > Not with btrfs but ext4, by the way.
>
> Thanks for the info, that eliminates one variable. So you also used dm-crypt on top of LVM?
root at glet:~# lsblk |grep -v loop
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 3,7T 0 disk
├─sda1 8:1 0 260M 0 part /boot/efi
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 67,6G 0 part
├─sda4 8:4 0 883M 0 part
├─sda5 8:5 0 1,9G 0 part /boot
└─sda6 8:6 0 3,5T 0 part
└─sda6_crypt 254:0 0 3,5T 0 crypt
├─cry-root 254:1 0 28G 0 lvm /
├─cry-swap 254:2 0 70G 0 lvm [SWAP]
└─cry-home 254:3 0 2,7T 0 lvm /home
nvme0n1 259:0 0 119,2G 0 disk
├─nvme0n1p1 259:1 0 97,8G 0 part /mnt/nvme
└─nvme0n1p2 259:2 0 21,5G 0 part [SWAP]
root at glet:~#
Booting with kernel > 5.0, it discard cry-home, for the first big part.
root at glet:~# lvdisplay -vv
devices/global_filter not found in config: defaulting to
global_filter = [ "a|.*/|" ]
Setting global/locking_type to 1
Setting global/use_lvmetad to 1
global/lvmetad_update_wait_time not found in config: defaulting to 10
Setting response to OK
Setting protocol to lvmetad
Setting version to 1
Setting global/use_lvmpolld to 1
Setting devices/sysfs_scan to 1
Setting devices/multipath_component_detection to 1
Setting devices/md_component_detection to 1
Setting devices/fw_raid_component_detection to 0
Setting devices/ignore_suspended_devices to 0
Setting devices/ignore_lvm_mirrors to 1
devices/filter not found in config: defaulting to filter = [ "a|.*/|" ]
Setting devices/cache_dir to /run/lvm
Setting devices/cache_file_prefix to
devices/cache not found in config: defaulting to /run/lvm/.cache
Setting devices/write_cache_state to 1
Setting global/use_lvmetad to 1
Setting activation/activation_mode to degraded
metadata/record_lvs_history not found in config: defaulting to 0
Setting activation/monitoring to 1
Setting global/locking_type to 1
Setting global/wait_for_locks to 1
File-based locking selected.
Setting global/prioritise_write_locks to 1
Setting global/locking_dir to /run/lock/lvm
Setting global/use_lvmlockd to 0
Setting response to OK
Setting token to filter:3239235440
Setting daemon_pid to 650
Setting response to OK
Setting global_disable to 0
report/output_format not found in config: defaulting to basic
log/report_command_log not found in config: defaulting to 0
Setting response to OK
Setting response to OK
Setting response to OK
Setting name to cry
Processing VG cry Orkwof-zq16-e1qM-rUMt-vKV1-Lc13-CgiKYp
Locking /run/lock/lvm/V_cry RB
Reading VG cry Orkwofzq16e1qMrUMtvKV1Lc13CgiKYp
Setting response to OK
Setting response to OK
Setting response to OK
Setting name to cry
Setting metadata/format to lvm2
Setting id to OtoEfX-bpWN-l9gd-kLJW-1xca-PaHR-ARrSKr
Setting format to lvm2
Setting device to 65024
Setting dev_size to 7465840640
Setting label_sector to 1
Setting ext_flags to 1
Setting ext_version to 2
Setting size to 1044480
Setting start to 4096
Setting ignore to 0
Setting response to OK
Setting response to OK
Setting response to OK
/dev/mapper/sda6_crypt: size is 7465842688 sectors
Adding cry/root to the list of LVs to be processed.
Adding cry/swap to the list of LVs to be processed.
Adding cry/home to the list of LVs to be processed.
Processing LV root in VG cry.
--- Logical volume ---
global/lvdisplay_shows_full_device_path not found in config:
defaulting to 0
LV Path /dev/cry/root
LV Name root
VG Name cry
LV UUID J0vJ5D-Rzyt-9fOm-cJVU-bwjc-6pc1-jGqIhc
LV Write Access read/write
LV Creation host, time glet, 2018-11-02 17:51:35 +0100
LV Status available
# open 1
LV Size <27,94 GiB
Current LE 7152
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
Processing LV swap in VG cry.
--- Logical volume ---
global/lvdisplay_shows_full_device_path not found in config:
defaulting to 0
LV Path /dev/cry/swap
LV Name swap
VG Name cry
LV UUID c4iLex-xxMu-Quyr-4qkt-hFk2-uOb5-BDF5ls
LV Write Access read/write
LV Creation host, time glet, 2018-11-02 17:51:43 +0100
LV Status available
# open 2
LV Size 70,00 GiB
Current LE 17920
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
Processing LV home in VG cry.
--- Logical volume ---
global/lvdisplay_shows_full_device_path not found in config:
defaulting to 0
LV Path /dev/cry/home
LV Name home
VG Name cry
LV UUID jycl7w-59lN-F3Ne-DBDa-G21g-CAmb-ROvIaX
LV Write Access read/write
LV Creation host, time glet, 2018-11-02 17:51:50 +0100
LV Status available
# open 1
LV Size <2,71 TiB
Current LE 709591
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:3
Unlocking /run/lock/lvm/V_cry
Setting global/notify_dbus to 1
Also, changing crypttab:
root at glet:~# cat /etc/crypttab
sda6_crypt UUID=fe03e2e6-b8b1-4672-8a3e-b536ac4e1539 none luks,discard
removing discard didn't solve the issue.
In my setup it was enough to boot the system, so having complain about
/home mounting
impossible (no filesystem found).
Well, keep in mind that at boot I have a few things, like:
root at glet:~# grep -i swap /etc/fstab
/dev/mapper/cry-swap none swap sw,discard=once,pri=0
0 0
/dev/nvme0n1p2 none swap sw,discard=once,pri=1
And other stuff in cron and so on.
So I can trigger the problem at boot (ubuntu 19.04), by my changes.
Hope it helps.
Uhm, by the way, my SSD (latest firmware):
root at glet:~# hdparm -I /dev/sda
/dev/sda:
ATA device, with non-removable media
Model Number: Samsung SSD 860 EVO 4TB
Serial Number: S3YPNWAK101163T
Firmware Revision: RVT02B6Q
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II
Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x005e)
Supported: 11 8 7 6 5
Likely used: 11
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 7814037168
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 3815447 MBytes
device size with M = 1000*1000: 4000787 MBytes (4000 GB)
cache/buffer size = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 1 Current = 1
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
SET_MAX security extension
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
Write-Read-Verify feature set
* WRITE_UNCORRECTABLE_EXT command
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Phy event counters
* READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
* DMA Setup Auto-Activate optimization
* Device-initiated interface power management
* Asynchronous notification (eg. media change)
* Software settings preservation
* Device Sleep (DEVSLP)
* SMART Command Transport (SCT) feature set
* SCT Write Same (AC2)
* SCT Error Recovery Control (AC3)
* SCT Features Control (AC4)
* SCT Data Tables (AC5)
* reserved 69[4]
* DOWNLOAD MICROCODE DMA command
* SET MAX SETPASSWORD/UNLOCK DMA commands
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* Data Set Management TRIM supported (limit 8 blocks)
* Deterministic read ZEROs after TRIM
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
4min for SECURITY ERASE UNIT. 8min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5002538e7001e8a7
NAA : 5
IEEE OUI : 002538
Unique ID : e7001e8a7
Device Sleep:
DEVSLP Exit Timeout (DETO): 50 ms (drive)
Minimum DEVSLP Assertion Time (MDAT): 30 ms (drive)
Checksum: correct
More information about the dm-devel
mailing list