Вступление.
Дабы не искать перемещённые блоки по всему диску запишем на бОльшую его часть что-нибудь бесполезное, но с узнаваемым паттерном.
Хотя если контроллер умеет делать перестановки:
«после trim» <- «редко записываемые данные» <- «часто записываемые данные»
или
«редко записываемые данные» <-> «часто записываемые данные»
то мы не сможем это увидеть или это будет довольно трудно.
Ладно. Будем надеяться и верить.
Part0.0 Включение trim на уровне файловой системы.
Достаточно иметь ядро линукс 2.6.33 и новее. А также поддерживающую trim файловую систему вроде ext4.
# mount /dev/sdg2 /media/trim/ -o discard,noatime
# mount
…
/dev/sdg2 on /media/trim type ext4 (rw,noatime,discard)
теоретически он должен работать.
Part 0.1 Проверим
Способом отсюда
$ seq 1 1000 > /media/trim/testfile
# sync
# hdparm —fibmap /media/trim/testfile
/media/trim/testfile: underlying filesystem: blocksize 4096, begins at LBA 226564695; assuming 512 byte sectors
byte_offset begin_LBA end_LBA sectors
0 226828775 226828782 8
# hdparm —read-sector 226828775 /dev/sdg
/dev/sdg:
reading sector 226828775: succeeded
0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38
0a39 3031 310a 0a31 3231 310a 0a33 3431
и т.д.
$ rm /media/trim/testfile
# sync
и ничего
# hdparm —read-sector 226828775 /dev/sdg
/dev/sdg:
reading sector 226828775: succeeded
0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38
0a39 3031 310a 0a31 3231 310a 0a33 3431
и т.д.
ладно. Может оно использует этот блок при записи на соседний раздел?
Записываю 25ГБ в начало и 8ГБ в конец sdg1.
И опять 25.
# hdparm —read-sector 226828775 /dev/sdg
/dev/sdg:
reading sector 226828775: succeeded
0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38
0a39 3031 310a 0a31 3231 310a 0a33 3431
и т.д.
Ну что ж. Будем разбираться. На сегодня пожалуй всё.