Доброе утро, господа.
Дано:
- SATA SSD, одна штука (эффект наблюдается как минимум на OCZ Vertex 4 и LSS-16L6G, но, думаю, модель не имеет значения);
- любое ядро Linux вплоть до 4.0-rcчтототам.
Наблюдаем:
$ lsblk -D /dev/disk/by-id/ata-LITEONIT_LSS-16L6G_S0C41154Z1ZSCA185984
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sdb 0 512B 2G 0
├─sdb1 0 512B 2G 0
├─sdb2 0 512B 2G 0
└─sdb3 0 512B 2G 0
# hdparm -I /dev/disk/by-id/ata-LITEONIT_LSS-16L6G_S0C41154Z1ZSCA185984 | grep TRIM
* Data Set Management TRIM supported (limit 8 blocks)
* Deterministic read ZEROs after TRIM
Первая утилита забирает данные из /sys/block/sdX/queue
(куда они помещаются драйвером дискового контроллера в ядре), вторая (AFAIK) — опрашивает контроллер напрямую.
Что не так:
Значения DISC-GRAN (размер erase unit'а) и DISC-ZERO должны быть равны 4K и 1 соответственно. Получается, что ядро не в состоянии узнать эти данные, хотя они на самом деле доступны (через другой интерфейс, видимо).
Вопрос:
Багу не нашёл, зарепортил. У кого-нибудь ещё такое наблюдается? Есть ли здесь специалисты по всему по ведру и разнообразным ATA, которые могут сказать, чем hdparm отличается от ядерного драйвера (и хотя бы примерно указать, куда копать)? Писать код руками умею, если что.