Ale maže. V okamžiku kdy je uvolněn celý erase block dojde pomocí TRIM ke smazání.
fstrim není potřeba spouštět, pokud pokud používáte SSD tak jak se používat má. Tedy filesystem máte namountovaný s volbou discard
a dále v LVM konfiguraci máte také issue_discards = 1
. Tak se posílá TRIM ihned když je to možné.
Pokud nepoužíváte TRIM, můžete zažít ošklivé rozčarování z degradace výkonu SSD (zvláště pokud nemá disk sám vyhrazenou rezervu s volnými bloky). Wear-leveling pak musí jak blázen přesouvad bloky o kterých si myslí, že obsahují platná data. Výsledkem je nízký výkon a velké opotřebovávání SDD...
Tak ještě jednou a polopaticky:
Funkce TRIM označí sektor v SSD za nepoužitý a to je vše. Teprve při dalším zápisu se zase sektor označí za použitý. Nový zápis sektoru je ovšem většinou realizován na úplně jiné místo SSD.
V době po TRIM jsou původní data sektoru bezprizorní a SSD je může a nemusí smazat nebo přepsat jinými daty. Všechna data se dají bez problémů vyčíst servisním rozhraním.
Z hlediska OS jsou data po TRIM skutečně smazaná. Z hlediska fyzické existence nikoliv.
Ano, ale SSD se bude snažit uvolnit „prázdné“ bloky co nejdřív, aby byly připraveny na zápis. Takže je velmi pravděpodobné že vynulované bloky smazaný soubor brzy rozsekají na kousky, ze kterých půjde poskládat jen málo informací.
Jasně, asi to není zabezpečení proti FBI bušící na dveře, ale pokud někdo maže soubory z obavy že je tam nalezne někdo jiný, třeba „nálezce“ „ztraceného“ laptopu, tradiční metody lovu dat mu moc nepomůžou.
SSD nepracuje tak, že by se tam něco přepisovalo, to SSD neumí. Každý přepis ve skutečnosti znamená smazání a zápis nových dat. Navíc zapisuje se po stránkách, ale maže se jedině po blocích, což je skupina stránek. Takže pokud má SSD disk něco "přepsat", mnohem raději najde čistou stránku, tam zapíše změněná data, a původní stránku označí za prázdnou. Když se mu takhle podaří uvolnit celý blok, vyčistí jej a tím jej připraví k dalšímu zapisování.
Před uložením nových dat je nutno ten starý blok vymazat. To trvá nějaký čas. Pokud o tom že je určitý blok vymazaný ví jen filesystém (běžná praxe před TRIM) a SSD je zaplněné víc (je málo opravdu volných bloků), brutálně klesá výkon kvůli další režii při novém zápisu. TRIM nejen říká SSD které bloky jsou vymazané, ale zároveň, v době kdy je na to čas, je všechny vymaže fyzicky, aby následný zápis nebyl ničím bržděn. Dostat z toho pak smazaná data je těžší než z plotnového disku po přemazání náhodným bordelem.
Filesystém odjakživa pracuje na úrovni sektorů 512 B až 4096 B, rozhodně ne na úrovni SSD bloků 512 KB a o stavu SSD bloků neví vůbec nic.
Když smažete pár sektorů uvnitř 512 KB bloku, tak se řadiči do mazání vůbec nechce, dokud k tomu není donucen docházejícím místem nebo wear levelingem.
Vím, jak fungují flash paměti na low level úrovni, nevím, jak je to přesně vyřešené na úrovni SSD. Nicméně vzhledem k první části předchozí věty jem přesvědčen, že fyzické mazání flash paměti je plně v moci lokálního FW na SSD, který se snaží mazat pokud možno na úrovni bloků flash pamětí. TRIM (implementovaný jako ATA/SATA command) slouží pouze pro informování FW na SSD, že je možné blok smazat. Záleží na garbagge collectoru FW SSD, jak se k této informaci postaví - ty se mohou lišit a snahou každého výrobce SSD je minimalizovat počet zápisů a distribuovat je rovnoměrně po SSD, ovšem při zachování dobrých hodnot ostatních parametrů (rychlost). To samozřejmě vede na to, že statisticky jsou poslední uvolněné bloky použity co nejpozději, přesně jak píšete. Mám ale za to, že a) buď existuje nějaký požadavek (ATA/SATA interface standard), aby byly bloky fyzicky smazány do jistého časového limitu (stejně budou nakonec smazány, takže když má FW zrovna čas...), nebo b) existuje podpora pro přímé mazání bloků či inicializaci mazání v ATA/SATA standardu (méně pravděpodobné, byla by to dualita k trim ovšek s dotažením akce do konce, zřejmě toto existuje pouze jako proprietární funkce, kterou zná pouze výrobce). Toto by mohl doplnit někdo znalý, kdo má ATA/SATA standard skutečně prolezlý.
Mazání na úrovni bloků není něco, o co by se firmware snažil, ale je to jediný způsob, jak na SSD něco smazat. Operační systém pokud vím o blocích nic neví, příkazem TRIM označí za prázdnou stránku (a blok se skládá z více stránek). Takže pokud by firmware SSD měl na každý TRIM reagovat tak, že příslušnou stránku smaže, musel by smazat celý blok, tedy nejprve přesunout používané stránky z bloku do jiného bloku. Což nevypadá na nejefektivnější způsob práce. Takže bych se rozhodně nespoléhal na to, že po TRIMu se data fyzicky smažou v krátké době.
a) Časový požadavek u TRIM neexistuje http://www.t13.org/Documents/UploadedDocuments/docs2009/d2015r2-ATAATAPI_Command_set_-_2_ACS-2.pdf
b) Běžný OS zaručeně tyto případné rozšířené funkce nevolá. Intel má na to extra utilitu Intel SSD ToolBox, která to umí pro SSD Intel.
Ale kdeze ...
zjisti si k cemu je TRIM ... je to informace pro SSD ze tento blok muze ingnorovat. Nic vic. Pri zapisu totiz musi SSD udelat to, ze vzhledem k rozdilnym velikostem bloku, je treba nacist celou bunku, tu modifikovat a celou ji zapsat zpet. Presne proto, aby tohle delat nemusel, se pouziva trim.
A je to tak proto, ze SSD, ktere toto neumely, prave musely vzdy vsechny nenulove bloky modifikovat timto zpusobem, coz zcela efektivne zlikvidovalo jejich vykon.
To není o tom, že by musel nejdříve blok načíst - to je velmi rychlá operace. Jde o to, že před zápisem je potřeba celý blok smazat. A to je řádově pomalejší operace (čtení a zápis je v řádu nanosekund, mazání milisekund). Díky TRIM ví, které bloky si může dopředu ve volném čase mazat.