Мій розділ /dev/sda3
на SSD-диску не містить жодної файлової системи, але він містить сміття. Як зробити операцію TRIM / DISCARD на всьому розділі?
Мій розділ /dev/sda3
на SSD-диску не містить жодної файлової системи, але він містить сміття. Як зробити операцію TRIM / DISCARD на всьому розділі?
Відповіді:
Якщо ваша версія util-linux є достатньо новою (вересень 2012 року), насправді існує спеціально створений інструмент blkdiscard
, тобто це найкращий спосіб зробити це:
sudo blkdiscard /dev/sda3
Але якщо вам потрібна сумісність із старими версіями дистрибутива Linux, читайте далі ... Є випадки, коли hdparm
/ wiper.sh
відмовляються торкатися тома, тому що це не розділ, тому нам потрібно щось поза цим.
Найбільш підтримуваний спосіб, який я знайшов, - скористатися тим, що обмінні томи Linux підтримують DISCARD, коли вони включені. Wipefs на кінці є, тому гучність пізніше не буде розпізнана як swap.
D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D
Це призводить до відхилення на більшості пристроїв.
blkdiscard
. Небезпечна команда ... :)
WARNING: All data in the discarded region on the device will be lost!
Я знаю, це питання досить старе, але ...
Найпростіший спосіб зробити це , щоб просто створити ext4 файлову систему на розділі з досить свіжою версією mkfs.ext4
. Перше, що цей інструмент робить - TRIM весь розділ. Після цього ви можете перезаписати створені вами дані в будь-яку файлову систему.
(Я щойно зробив це, щоб створити новий розділ vfat на SD-картці, наприклад.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
здається, призводить до меншої кількості записів, ніж -J size=4
це робиться. (На основі експериментів із використанням розрідженого файлу, а не фізичного SSD та du
для перевірки того, скільки написано.)
hdparm --trim-сектор-діапазони низький, він повинен говорити безпосередньо з SSD, тому немає залежності від файлової системи. Що робить wiper.sh, це використовувати спеціальні програми для файлової системи для відображення вільних (файлової системи) регіонів на (апаратні) SSD сектори, вони використовують hdparm для їх обрізки.
Відповідаючи на запитання, ви можете використовувати hdparm для обрізки цього розділу, але ви повинні бути дуже обережними . Як це зробити - отримати діапазон секторів, який використовується розділом, а потім використовувати hdparm у цьому секторі. Ймовірно, вам потрібно буде пройти кілька діапазонів секторів, оскільки кожен діапазон для --trim-сектор-діапазонів може мати максимум 65535 секторів.
fdisk -l може повідомити вам про початок і розмір розділів. Зверніть увагу на одиниці, які використовує fdisk, та розмір сектора вашого SSD.
Приклад (мій SSD):
Device Boot Start End Blocks Id System
/dev/sdb1 2048 39070079 19534016 83 Linux
Для того, щоб відкинути простір перед цим розділом, я міг би обрізати 2047 (512 байт розміром, на мій SSD) секторів , починаючи з сектора 1: hdparm --trim-sector-ranges 1:2047
. Я не можу обрізати, починаючи з сектора 0, тому що це MBR (не знаю, як це стосується GPT).
Щоб відкинути простір, який використовує розділ, я би зробив hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
. Це може бути написано сценарієм, але я зараз не збираюся його писати.
Крім того, щоб бути впевненим: я нічого не гарантую тут, можливо, я прорахував сектори, зробіть резервну копію всього, перш ніж ефективно використовувати --trim-сектор-діапазони.
Примітка . Якщо ви обрізаєте "порожній" простір перед першим розділом, як я показав, не забудьте перевстановити GRUB (або будь-який завантажувач, який ви використовуєте) перед перезавантаженням, оскільки GRUB зберігає його частину у "невикористаних" секторах перед першим розділом. . Не знаю інших завантажувачів, але я думаю, що це може бути так, тому будьте обережні.
wiper.sh
є застарілим, fstrim
що набагато безпечніше, але для цього специфічне використання blkdiscard
перемагає і те, і інше. У 2013 році немає необхідності ризикувати обчисленням діапазонів вручну.
Ви можете ознайомитись зі сценарієм, що wiper.sh
входить до пакету hdparm. Він використовує команду hdparm --trim-sector-ranges
для TRIM всіх порожніх секторів на розділі, принаймні, якщо він містить файлову систему ext3 / 4. Не впевнений, що він працює з неформатованими розділами, але ви завжди можете тимчасово відформатувати його з ext4.
wiper.sh
дозволить обрізати майже весь розділ, за винятком метаданих ext4. Але я хотів би обрізати всю перегородку.
blkdiscard
може працювати на розділах, а не лише на цілих дисках. Я успішно тестував це на Fedora 20. Я перевірив джерела blkdiscard
- це дуже проста програма, яка нічого не знає про розділи. Я припускаю, що ядро робить переклад.
Будьте дуже обережні, blkdiscard
не задаєте питань і не показуйте інформації про прогрес.
Якщо blkdiscard недоступний, використовуйте цей скрипт і подайте його вихід у hdparm. Перший аргумент - кількість секторів для обрізки, другий - перший сектор для обрізки.
#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
if test $sectors -gt $MAXSECT; then
size=$MAXSECT
else
size=$sectors
fi
echo $pos:$size
sectors=$(($sectors-$size))
pos=$(($pos+$size))
done
Ось цікава стаття, в якій йдеться про використання HDDErase для виклику вбудованої функції безпечного стирання SSD, яка повинна отримати бажане:
blkdiscard --secure
і.