fstrim обрезает все свободное место после перезагрузки

391
anonimou

Я только что перешел на SSD. Производительность была отличной.

Однако после каждой перезагрузки, когда я делаю fstrim для разделов, он урезает все свободное пространство. И как я понимаю, обрезка пишет всему свободному пространству, что оно доступно. Не уверен, если это уместно, но я использую полное шифрование диска (/ boot включен).

Поскольку срок службы SSD может быть значительно сокращен при частых записях, я беспокоюсь об этом.

Вот журналы, которые я держу на каждой отделке:

Jul 30 13:46:00 /: 478.6 MiB (501862400 bytes) trimmed Jul 31 13:22:26 /: 347.8 GiB (373409230848 bytes) trimmed Jul 31 13:25:32 /: 194.3 MiB (203710464 bytes) trimmed Jul 31 13:25:40 /: 19.2 MiB (20111360 bytes) trimmed Aug 02 14:08:06 /: 345.9 GiB (371398463488 bytes) trimmed Aug 02 22:21:36 /: 56.9 GiB (61047971840 bytes) trimmed Aug 02 22:31:27 /: 347.7 MiB (364560384 bytes) trimmed Aug 02 22:31:43 /: 127 MiB (133144576 bytes) trimmed Aug 02 22:33:01 /: 243 MiB (254767104 bytes) trimmed Aug 03 06:58:47 /: 1 GiB (1080602624 bytes) trimmed Aug 03 10:00:02 /: 2.4 GiB (2526216192 bytes) trimmed Aug 03 11:42:14 /: 341 GiB (366146318336 bytes) trimmed Aug 03 16:00:01 /: 0 B (0 bytes) trimmed Aug 03 16:33:53 /: 0 B (0 bytes) trimmed Aug 03 16:48:43 /: 341 GiB (366074740736 bytes) trimmed Aug 03 16:50:13 /: 1.2 GiB (1297809408 bytes) trimmed Aug 03 16:53:31 /: 341 GiB (366074695680 bytes) trimmed Aug 03 17:07:55 /: 340.9 GiB (366066126848 bytes) trimmed Aug 05 22:00:13 /: 341 GiB (366073069568 bytes) trimmed Aug 05 22:07:22 /: 1.2 GiB (1261793280 bytes) trimmed Aug 06 07:41:50 /: 1.4 GiB (1522991104 bytes) trimmed Aug 06 10:00:11 /: 341 GiB (366068740096 bytes) trimmed 

Как видите, обрезка после включения компьютера составляет ~ 340 ГБ, а при обычном использовании обрезка составляет всего около 1 ГБ.

Должен ли я волноваться, что это изнашит мой SSD? Я не должен урезать?

0

1 ответ на вопрос

0
Damon

Есть заблуждение. Обрезка не вызывает дополнительных записей, она уменьшает их.

SSD, или, скорее, его NAND, имеет два понятия «блоков», один из которых фактически называется блоком (обычно что-то от 128k до 512k), а другой - гораздо ближе к тому, что вы имеете в виду, когда говорите о «блоке» в Термины вашей файловой системы называются страницами (обычно что-то около 4к). Вы можете написать полную страницу за раз, как на старом жестком диске, без проблем. Вещи просто работают, как ожидалось.

Однако вы не можете перезаписать страницу, они однократные. После этого вы можете только стереть его, сделав его снова доступным для записи. Это то, что имеет значение для жизни NAND. Проблема просто ... на самом деле вы не можете стереть страницы. Вы можете стирать только блоки (то есть кластеры по 32-64 страницы за раз).

Это означает, что когда вы перезаписываете страницу («блок» в терминах файловой системы), контроллер должен:

  1. читать в полном блоке
  2. если существует «девственный» или уже стертый блок, используйте этот
  3. в противном случае очистите тот же блок
  4. выписать полный блок, соответственно изменив содержимое перезаписанной страницы
  5. сделать некоторую неопределенную «магию», чтобы циклы стирания были равномерно распределены по всем блокам, предотвращая преждевременную смерть

Это несколько упрощено, но принцип таков. Умный контроллер может сделать что - то немного другое (например, ReMap страниц логически, заполнить все страницы, пока никто не останется, и как - то «запомнить», какие из них хорошие, а какие из них являются устаревшими, и т.д., и т.д.), но, в принципе, рабочий процесс, как описано выше.

Это проблема, поскольку мелкие записи являются обычным делом, поэтому вскоре у вас есть все блоки на диске, которые были записаны хотя бы один раз. Теперь, что может сделать контроллер? Немного. Он на самом деле не знает, что делает файловая система или что ожидается, поэтому он должен работать в наиболее консервативном предположении. То есть все и все, что когда-то было написано, должно быть сохранено.

TRIM решает эту проблему. Он сообщает контроллеру, что такой-то большой диапазон не используется, поэтому контроллер может также отказаться от него. Это ничего не пишет. Если вообще, он будет стирать только блоки (хотя, только один раз, а не каждый раз).
Поскольку вы сказали контроллеру, что не используете эти данные, он может рискнуть выбросить их без вреда. Теперь неожиданно снова доступны доступные для записи блоки без необходимости копировать данные и многократно стирать блоки. Что не только делает запись быстрее, но и уменьшает количество стираний, которые должны произойти.

Похожие вопросы