{{tag>[linux ssd trim]}}
~~NOTOC~~
=====Test SSD TRIM with LVM=====
* check if the device report **discard_zeroes_data:1** The example below does not write zero's!# grep -s "" /sys/block/sda/queue/*
/sys/block/sda/queue/add_random:1
/sys/block/sda/queue/discard_granularity:512
/sys/block/sda/queue/discard_max_bytes:2147450880
/sys/block/sda/queue/discard_zeroes_data:0
/sys/block/sda/queue/hw_sector_size:512
/sys/block/sda/queue/iostats:1
/sys/block/sda/queue/logical_block_size:512
/sys/block/sda/queue/max_hw_sectors_kb:32767
/sys/block/sda/queue/max_integrity_segments:0
/sys/block/sda/queue/max_sectors_kb:512
/sys/block/sda/queue/max_segments:168
/sys/block/sda/queue/max_segment_size:65536
/sys/block/sda/queue/minimum_io_size:512
/sys/block/sda/queue/nomerges:0
/sys/block/sda/queue/nr_requests:128
/sys/block/sda/queue/optimal_io_size:0
/sys/block/sda/queue/physical_block_size:512
/sys/block/sda/queue/read_ahead_kb:128
/sys/block/sda/queue/rotational:0
/sys/block/sda/queue/rq_affinity:1
/sys/block/sda/queue/scheduler:noop deadline [cfq]
/sys/block/sda/queue/write_same_max_bytes:0
* Note the LVM PV offset, in this case **1050624**:# fdisk -l /dev/sda
Disk /dev/sda: 30.0 GB, 30016659456 bytes, 58626288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00052410
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1050623 524288 83 Linux
/dev/sda2 1050624 58626047 28787712 8e Linux LVM
* Note LV payload offset, in this case for /var **1050624**:# dmsetup table
vg-lv_home: 0 1048576 linear 8:2 2048
vg-lv_swap: 0 1048576 linear 8:2 17827840
vg-lv_root: 0 8388608 linear 8:2 9439232
vg-lv_var: 0 8388608 linear 8:2 1050624
* Create file with random data:# cd /var/tmp/
# dd if=/dev/urandom of=tempfile bs=1M count=3
# sync
* Find first sector for file, here **2101112**:# hdparm --fibmap tempfile
tempfile:
filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
byte_offset begin_LBA end_LBA sectors
0 2101112 2107255 6144
* Add the offsets from the first two steps to the begin_LBA, and read the sector from disk, you should see random data:# hdparm --read-sector 4202360 /dev/sda
/dev/sda:
reading sector 4202360: succeeded
3e80 9f15 efd5 27c1 95d5 d6fb 9ea4 eda1
c8de 8a76 7903 37a4 5472 74bc c156 0ba3
639d f70c 2eff 7820 6677 7d9e e111 e44d
a607 3e4f cdee 6507 9770 da35 e1b9 ec76
3eb6 5fb3 d482 28cf 6ec4 a03e f7ec 58d9
* You can verify the data with hexdump:# hexdump tempfile | head -5
0000000 3e80 9f15 efd5 27c1 95d5 d6fb 9ea4 eda1
0000010 c8de 8a76 7903 37a4 5472 74bc c156 0ba3
0000020 639d f70c 2eff 7820 6677 7d9e e111 e44d
0000030 a607 3e4f cdee 6507 9770 da35 e1b9 ec76
0000040 3eb6 5fb3 d482 28cf 6ec4 a03e f7ec 58d9
* Delete the file fstrim the file system:# rm tempfile
# sync
# fstrim -v /var
/var: 3.9 GiB (4195037184 bytes) trimmed
* Check data data is now all zero's, you might need to wait a few minutes:# hdparm --read-sector 4202360 /dev/sda
/dev/sda:
reading sector 4202360: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000