Эксперименты с TRIM

Вступление.
Дабы не искать перемещённые блоки по всему диску запишем на бОльшую его часть что-нибудь бесполезное, но с узнаваемым паттерном.
Хотя если контроллер умеет делать перестановки:
«после 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
и т.д.

Ну что ж. Будем разбираться. На сегодня пожалуй всё.

Yuriy Nazarov on GithubYuriy Nazarov on Twitter
Yuriy Nazarov
Software engineer
Люблю machine learning