К вопросу о функционировании trim/discard на SSD накопителях, подключенных по интерфейсу USB, в Linux. У меня таких накопителей много, в том числе и загрузочных Linux и я очень удивился, увидев что это просто не работает (в разных дистрибутивах).
Небольшой поиск показал, что история известная: низкоуровневые команды на ssd идут через довольно длинную цепочку софта и аппаратуры, мост USB — SSD может (не) пропускать нужные команды (зависит от прошивки моста, в том числе), более того — накопитель USB может неправильно интерпретировать эти команды, в результате чего — прийти в негодность. Вероятно поэтому trim по умолчанию отключен на внешних накопителях: Windows пытается что то сделать «сама» для определения работоспособности trim, ну а в случае Linux — придется проверить вручную
Если накопитель «умеет» trim то Linux может автоматически активировать эту возможность при его подключении в USB используя магию UDEV. Нужно просто добавить файл вида /etc/udev/rules.d/50-usb‑ssd‑trim.rules с примерно таким содержимым:
ACTION=="add|change", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"
Где VID и PID — идентификаторы нужного USB накопителя (отображаются командой lsusb
)
После чего надо перезагрузить UDEV: sudo service udev force-reload
Я собрал небольшую коллекцию идентификаторов своих накопителей и для удобства дополнения разместил все на github С учетом вышесказанного — применять на свой риск, ну и можно слать коммиты со своими ID